From fc511e40cc1a274473a753c959f8d7e5fcc317d0 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 3 Aug 2022 20:09:50 -0400 Subject: [PATCH 001/179] 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 413806b467f6..f09006ed7163 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 13ed1709215d..e434ae170bcd 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 eef5d8395426..471432a8b01a 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 000000000000..833100f6ac43 --- /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 000000000000..843832ddbc14 --- /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 000000000000..d405379327c5 --- /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 000000000000..833100f6ac43 --- /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 000000000000..f84bc761b332 --- /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 000000000000..ba6cecc64957 --- /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 002/179] 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 59577d8fef06..6d4e5f2c5f9a 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 003/179] 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 4784339cefdf..a5347b96a1b7 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 03a27289fbfb..565f424c8446 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 004/179] 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 32e787959680..d144ebb353b3 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 f7ced16199bb..0eb15d27fc59 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 f2bde565a3b6..ac90ea80c0e4 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 005/179] 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 000000000000..4d4195ef7594 --- /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 000000000000..4a59379e5c12 --- /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 000000000000..4b217c5fdc53 --- /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 000000000000..61950d18d524 --- /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 000000000000..65fa295516d7 --- /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 000000000000..6319d9e03a2f --- /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 000000000000..0f3eda7bf277 --- /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 000000000000..4828baf73812 --- /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 000000000000..c5c86bc7c2e4 --- /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 000000000000..e1bddbadc9b5 --- /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 000000000000..0c5599a16b8d --- /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 000000000000..9f5fb57858e8 --- /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 006/179] 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 000000000000..12cf9b1cf1a1 --- /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 000000000000..719c3845721c --- /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 000000000000..0763888513f6 --- /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 000000000000..94d12c17b630 --- /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 000000000000..ed3317f1c738 --- /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 000000000000..3b5c4aeafa15 --- /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 000000000000..78cea3141f8e --- /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 000000000000..e324cccc1dc1 --- /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 000000000000..18770722242a --- /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 000000000000..f31140080433 --- /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 000000000000..e32886d05969 --- /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 007/179] 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 5f170ee665a6..aa2d3e754dcd 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 008/179] 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 528b9aec7424..667e5df88f73 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 009/179] 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 28a93e73d15f..159c6fb25f17 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 010/179] 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 667e5df88f73..8fc94523afee 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 011/179] 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 8fc94523afee..212cff9f6905 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 012/179] 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 212cff9f6905..8b2dbba8c43e 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 013/179] 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 47e63dc0a359..bbfb770e3a97 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 fee388f1b1d3..000000000000 --- 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 d9aeaa9560bd..9423e1af92a3 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 014/179] 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 8b2dbba8c43e..793e350dea53 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 015/179] 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 06a79af0778f..4297f7aca191 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 016/179] 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 a5989cef8457..8e945cde91a3 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 1f019cdc5895..3393d0c42fcf 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 017/179] 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 b76a27b49697..51546006316b 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 1ab4d4426fc5..71fcad29d2d9 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 018/179] 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 1f54692d73b5..787d513661fa 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 019/179] 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 c31b6783c922..215ccb63fe43 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 8e945cde91a3..16373673c6d7 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 000000000000..622c74983768 --- /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 000000000000..55cba78861da --- /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 000000000000..0b4ac21f848f --- /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 000000000000..368e848a9a56 --- /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 000000000000..eacdd41a7119 --- /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 000000000000..04b98a8ac5b2 --- /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 000000000000..fb23f20ccd27 --- /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 000000000000..bf9ba7cb8a41 --- /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 000000000000..ec4665a3fec3 --- /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 000000000000..9d9ab734c0d7 --- /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 000000000000..9f6fad1c90dc --- /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 000000000000..3a0ad4624ca8 --- /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 000000000000..3a0ad4624ca8 --- /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 000000000000..9d9ab734c0d7 --- /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 000000000000..7b12c252f3e0 --- /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 000000000000..9d9ab734c0d7 --- /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 000000000000..9d9ab734c0d7 --- /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 000000000000..c5fe224e2627 --- /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 000000000000..2b82df5ca7c7 --- /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 000000000000..e63b01e5ab00 --- /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 90470ba3daa3..12c036135888 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 d2b6aa9df215..6f377073810f 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 13ca5eb64b2d..76452dc357de 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 020/179] 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 0df31ad5c0c6..f43781516e0e 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 e6f8bfb8ee6b..43c7c24e5d33 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 000000000000..ded7f926b9c3 --- /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 000000000000..3dcc710cd7b1 --- /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 000000000000..2db84bcd5a3e --- /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 021/179] 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 350197223150..12b06621781f 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 36b2d55e8bc1..244242a9360d 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 159d9ade0145..751d592b9550 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 000000000000..651edb94166c --- /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 000000000000..7f833ff555f8 --- /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 000000000000..768a59c9c400 --- /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 000000000000..757ff860a1c0 --- /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 000000000000..112e0344ae4a --- /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 dc3bf6c235eb..ef5b55213248 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 022/179] 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 ac90ea80c0e4..2b651ac53f6c 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 023/179] 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 2b651ac53f6c..dde8bae48d3a 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 024/179] 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 f89d3279d1c8..9902046db3d3 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 025/179] 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 28e4b0edbd9c..354f0511eea5 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 c230257058cb..c909ec02ebb2 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 026/179] 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 368e848a9a56..2c1d6c71088b 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 027/179] 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 ed40f9368c8a..20235d045f73 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 902b76d15a4f..0f9cfe2e77f5 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 a40bd3651a24..effbe4ac887d 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 c3462ddeb724..b66a910d3d2e 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 000000000000..f1a41fcf2c33 --- /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 000000000000..3a2d70febebf --- /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 000000000000..fb939de59c83 --- /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 000000000000..f1a41fcf2c33 --- /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 000000000000..dcf2aae6384d --- /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 000000000000..9ad50202c32c --- /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 000000000000..f1a41fcf2c33 --- /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 000000000000..ce85f25db6c8 --- /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 000000000000..74de8588d633 --- /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 000000000000..f1a41fcf2c33 --- /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 000000000000..561f88a9297a --- /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 000000000000..d5406e195a10 --- /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 000000000000..f1a41fcf2c33 --- /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 000000000000..dcf2aae6384d --- /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 000000000000..7071e8cd3977 --- /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 000000000000..f1a41fcf2c33 --- /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 000000000000..ba70ee981777 --- /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 000000000000..96c2f270fef4 --- /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 000000000000..f1a41fcf2c33 --- /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 000000000000..424242d599ea --- /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 000000000000..a82d3ea724bf --- /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 000000000000..09720d8d0323 --- /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 43edb9612225..45719679dfb9 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 2606aaf8bf95..33d18e33a2e0 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 028/179] 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 6a2fbdc82ca3..a701b4ce4b0a 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 000000000000..15ba9488ecdd --- /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 029/179] 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 d144ebb353b3..3e67c4024706 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 dde8bae48d3a..00d48f3fe675 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 030/179] 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 6ace1925af8b..0fe7212d3db3 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 3dfcdb473f92..9179b0d0b761 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 32bdb82821e4..a4a7be58df78 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 fe99ac9659b3..8bbe1a7ef292 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 7ed047c30c65..a2c6a2871dc4 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 031/179] 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 215ccb63fe43..759dd72a32ae 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 032/179] 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 759dd72a32ae..3833abe80f76 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 16373673c6d7..92df03c3cb8a 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 375bcd4e5212..8c2cfbcfced5 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 a9b2d5ae0f6b..d048a03e0ab4 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 7b5ec92719f3..c6566feb932b 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 3393d0c42fcf..38c61eeaf564 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 033/179] 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 000000000000..24a8e5cc747b --- /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 000000000000..eb02c45f8f70 --- /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 000000000000..f869db5db1d9 --- /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 000000000000..f869db5db1d9 --- /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 000000000000..e76bccb48156 --- /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 000000000000..0b7f32e592bb --- /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 000000000000..db44eb690aa8 --- /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 000000000000..718c7ba2ce59 --- /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 000000000000..90fd66d1fa58 --- /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 000000000000..4243f5189e60 --- /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 034/179] 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 4297f7aca191..61af445c2207 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 b2833c309fb9..a6582472a724 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 035/179] 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 0279f6b1c4cc..e8ae429454c2 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 94c4a5dd0b6b..a0c1892806bd 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 c909ec02ebb2..d28886efb852 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 036/179] 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 a6582472a724..7c933b032a36 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 037/179] 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 46901d15e0df..91c7d6d77b3a 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 038/179] 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 622c74983768..a699a81394e2 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 039/179] 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 4b61fc721744..3da50b57e5d2 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 000000000000..1768fc210624 --- /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 000000000000..227d9cf29836 --- /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 000000000000..72b6744ae44e --- /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 5e95cd50574a..ce80e958d23c 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 040/179] 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 000000000000..51fbc28c5c8c --- /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 000000000000..abb05282edad --- /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 000000000000..0087208cf17d --- /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 000000000000..0087208cf17d --- /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 000000000000..bb2b843ddfd4 --- /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 000000000000..a999df6a073b --- /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 000000000000..136e6927f47b --- /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 000000000000..97d3c53b55da --- /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 000000000000..3dc954c33a9f --- /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 000000000000..3811423eeee9 --- /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 041/179] 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 91c7d6d77b3a..6944135ea08a 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 042/179] 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 cd1d834d06cf..9a2980ae6c81 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 6944135ea08a..a535a4ef145a 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 043/179] 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 000000000000..5a1eeb13b6d9 --- /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 000000000000..3de10105976a --- /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 000000000000..0087208cf17d --- /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 000000000000..0087208cf17d --- /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 000000000000..bb2b843ddfd4 --- /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 000000000000..aa52594882e4 --- /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 000000000000..53218a860c6b --- /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 000000000000..cc14182696d1 --- /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 000000000000..864321cc1563 --- /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 000000000000..b4c4b438dee0 --- /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 044/179] 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 3833abe80f76..3d89ed7b3211 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 045/179] 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 0f9cfe2e77f5..01104d1cd7d1 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 046/179] 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 a36507665787..8084be8953da 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 047/179] 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 0f5df9993ac6..452786d19014 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 048/179] 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 aa2d3e754dcd..146e7bb7ed94 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 049/179] 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 1b743a595e29..e85d7ecae98a 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 050/179] 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 61af445c2207..69ee0fc4d9a7 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 051/179] 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 ec5e0e7a5ddf..587bc7aa4502 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 052/179] 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 eef79f39927a..5193d8468286 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 053/179] 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 000000000000..a40195e3c6cf --- /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 15b4acf7e2d7..09006646f41a 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 054/179] 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 09006646f41a..6f4ba84d23ef 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 055/179] 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 96e7e16d3099..847a47abc2b3 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 9179b0d0b761..71b243d34ed7 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 056/179] 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 cf6c07ee46bc..d126e38aa1e2 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 057/179] 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 000000000000..2a0d99460d81 --- /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 000000000000..8ec164eb23a8 --- /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 000000000000..6c9bcdf134e1 --- /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 058/179] 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 000000000000..11c63a5a0058 --- /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 000000000000..3f7331c3772c --- /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 000000000000..cf282bac2cb5 --- /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 000000000000..7ab2632a2729 --- /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 000000000000..f10d18af4a11 --- /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 000000000000..cee108facbf8 --- /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 059/179] 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 3691085392d0..f6506a065d0f 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 060/179] 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 a40195e3c6cf..ccb0ddbaf40b 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 000000000000..66d2332f1a25 --- /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 061/179] 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 000000000000..251d2c27231d --- /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 000000000000..eaa714d69af4 --- /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 000000000000..3d53e3244fde --- /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 000000000000..70232e18a72a --- /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 000000000000..8657f8aea307 --- /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 000000000000..e7e351403c75 --- /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 000000000000..992f395d95f5 --- /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 000000000000..85c5cccdc080 --- /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 000000000000..50aa4486c871 --- /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 000000000000..5df11b9e04dc --- /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 000000000000..d71d9f626269 --- /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 000000000000..07e304cfa5c3 --- /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 000000000000..54e360a393ed --- /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 000000000000..07e304cfa5c3 --- /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 000000000000..54e360a393ed --- /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 000000000000..d3fcdc88fbb2 --- /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 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Ð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 062/179] 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 000000000000..c8472428a727 --- /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 063/179] 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 000000000000..897184f66c78 --- /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 000000000000..a321b73dd055 --- /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 000000000000..449e0b1fe261 --- /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 000000000000..c21dcf07d92f --- /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 000000000000..9a1dabacdbc2 --- /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 000000000000..3cd4868686d4 --- /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 000000000000..2f561d0de354 --- /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 000000000000..031936eaae5b --- /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 000000000000..2f561d0de354 --- /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 000000000000..cff0d53cc5f3 --- /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 064/179] 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 a8a2da22d6c8..3184aab2502a 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 065/179] 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 b4c4b438dee0..343304003084 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 066/179] 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 d21f38325c55..7c77c4ad2b74 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 067/179] 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 5ea852e965c8..dc22c40b566e 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 068/179] 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 000000000000..91bd098807e4 --- /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 000000000000..a930b90f264d --- /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 000000000000..186c88bc5e31 --- /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 000000000000..772796da6f0a --- /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 000000000000..c19b131926b7 --- /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 000000000000..350fe6de917e --- /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 000000000000..679e1464eeae --- /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 000000000000..bd9d95794da5 --- /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 000000000000..ab19d10f6f86 --- /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 069/179] 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 000000000000..0982057792aa --- /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 000000000000..33baa11072e4 --- /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 000000000000..a88cc5ca06fd --- /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 000000000000..fa847d505952 --- /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 000000000000..f203c9f8b1cc --- /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 000000000000..72d0b8f1bfbe --- /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 000000000000..7975b262af1c --- /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 000000000000..46a213d9c602 --- /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 000000000000..37c1cef4828d --- /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 000000000000..2d8f0a814161 --- /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 000000000000..eb1e552a40a7 --- /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 000000000000..097872f5cabe --- /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 000000000000..46b40dee46aa --- /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 000000000000..7842925e3906 --- /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 000000000000..8da1510de056 --- /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 000000000000..7dfd51e8356c --- /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 000000000000..21a4efb86123 --- /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 000000000000..eee750bf8c55 --- /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 000000000000..b3b60422257b --- /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 000000000000..a6066b95aac8 --- /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 000000000000..368ba288d345 --- /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 000000000000..e6aa27bab2f4 --- /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 000000000000..9b2c18d4c8ea --- /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 000000000000..2445ef39516a --- /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 000000000000..37c30812fd1d --- /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 000000000000..e9824572f6f0 --- /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 000000000000..bbb0af485550 --- /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 000000000000..c2ced92e6ab9 --- /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 000000000000..6a6d9d44604a --- /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 000000000000..9918386d0253 --- /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 000000000000..422aaabc7b49 --- /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 000000000000..daeee223a924 --- /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 000000000000..cf5b81974541 --- /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 000000000000..184a5ce856bd --- /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 000000000000..e9665ff91cb9 --- /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 000000000000..d591f17f316d --- /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 000000000000..882131581972 --- /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 000000000000..a3cb5a2cd2df --- /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 000000000000..2ce5b9394256 --- /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 000000000000..edac091f6180 --- /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 000000000000..e79d6cb6d6c7 --- /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 000000000000..b567aa2dfe01 --- /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 000000000000..2a28a9039a53 --- /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 000000000000..37974d698f6a --- /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 000000000000..86bc8dfcfe82 --- /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 000000000000..068b07576aec --- /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 000000000000..cc4240416457 --- /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 000000000000..a309a787f5ef --- /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 000000000000..04f32faac01d --- /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 000000000000..bd69bbb18017 --- /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 000000000000..c171e2bb8922 --- /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 000000000000..e18414be847b --- /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 000000000000..596757636a24 --- /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 afd730a51b11..ed8765f35e27 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 ee9775569a43..a503cc46e35c 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 9de0ad7f2dbb..8a70cef2413d 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 070/179] 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 000000000000..a2e1fbe63c1b --- /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 071/179] 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 54c5ae825481..a2bf0c58a587 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 3184aab2502a..4c3868ec45d6 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 072/179] 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 a2bf0c58a587..f90c74889e10 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 073/179] 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 a503cc46e35c..c07533588c08 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 074/179] 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 ea26f6ebd732..2e468fe0b572 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 075/179] 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 9902046db3d3..358d5d144f06 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 ba5bcb079579..009476855ed7 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 a6430a533a49..46fdde3ce41c 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 650d6747d4a9..0ff45904b250 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 67f5ce74c210..2ff99d58cbb9 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 076/179] 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 c04883c06e0c..172f20a2b18e 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 077/179] 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 000000000000..9477db396360 --- /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 000000000000..2ecf47b2fdea --- /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 000000000000..a8b4a868b2c3 --- /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 000000000000..936694790cfa --- /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 000000000000..24b0f582b0e0 --- /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 000000000000..9be3811f9342 --- /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 078/179] 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 c8472428a727..444de996b53a 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 079/179] 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 06c168b33502..3becf5fd4a64 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 080/179] 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 3becf5fd4a64..961d1079b8aa 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 081/179] 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 961d1079b8aa..a2e491b8957f 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 082/179] 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 8ec164eb23a8..d6eb89a3df29 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 d3fcdc88fbb2..0d91e96c7305 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 78aa14a10bff..83aa31c75d48 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 cb9f6b56c89f..48080c7f2f95 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 zcmd43c{El1A3v(6wuVD0X&Y0KA|0nPMm$nV8Imy$j?!R0W*K|72g#5jLn$g{o-&?e zY$wT-Df4t9^Grg9?q?tLeb&1F+_ipp-F5#+?DHAk^ZWIFe?I&8T~ocpyo+-e0|NuI z(&Y=+85nlqz(1xPTfvj^#LPS3zl+zDH7`!g&dz?^)1=AJ<1Rb*Vy}O2NJ;r82K#@0 z|Naezyoh^q=rEuE{kw-^e5;z8^xmeXzssEY{uSlj`Lq7u?L**MY~6AYr;U;JrmLPj~;tFl`^2 z$}v$`NOR#iYk8n<07*Ci2dFmh9Fi^|JxO;t74yVFr~c|Yin@@(^!8m0?>~NL8u?lQ z*`3xcZ5Di10i8LbKY}EvX8k&VZ>y{La-r_5P2xH2hp#jD@%+U=5HvLmaG{b~W}k^i zS3<3Uc=mkW2^AvwVX&A|yPfJv(=zw@ho28IFob2*xi*wM#@%sG@4pjPKr2BZoo?d% zya72e_?(3oU#v5mx7MQIkrS+283;!c@*3;{uOD#e6t3w<@~e}`==kc&Q_J|z$({*toM1l5(|*-L=>e{; zf_I+#_l@(G_IH*x4h%O+Bo1dcO!cVC+$Ttu;uIg7*gdun39#uy^w%h~3_hWKfQG}% zuW^&+288ssW9ejc%>RB1V^a^l&El~b-kF)P8cz{C7OT{+c{XDh88KsG{AyBm{8-Se z{u4e2br)5$FxCnSvs~wqZbtgtoUQ{m|U91u#;)e{q&&o&^(p7Zp=X=l8WQOX##z)Sk=atucAzJM7R0xq<~hCWk# z6#D35!XPz1wjb$jH#Z}rQww&e-;-3Ws`#@RCVLnjQ2CFT-!Q#@bGV4`B69Vz_(}8n zbJb9GcHjP5k)mvzYCKZwAACV0rnOgqfx#|VQ=(U(8Lx{Dx=P`lYutzCFzxXoPF_7XsUx>tWwHefQff{q5I^U6z;;-!+R~3 zzim?hbDU30Xh^?EG7L@A5NbQy`on_}Ug@zXqoYgEv8AOiH00Z1)^YyZTG|J+Q!3Ty zyF?|*&iJ3DkPa`J+Mr3TFPG1mcho^;)rF)VnZfQXe#0Mj2(-B@C4U6O*OUzX{r;0~ zW+QY$Ph7wOoei~bozQFHlPylf1%;=)#VkvrF=OW1+66%W6OCe=_8r#*$)J7*g9zvBB@^=8NA_*~jA3Q2Pav1yhMjpr*xa6WspsMT+MCN+uz^g04H{Qx5eRKm(Hutk^O zPcq{bi4trVV7r?}C`i_`{ z6+OD>fRZk5b57Y6q25eU_*gmklPlRDej7K`I;Rit|sbI#LW7%_IU_vxMed-5-x4uXNi!gd(OuM*D{=As;R{IYo{Dk$yYh3zBdm%?nJq5X08WH?H)9Mu+o?H+l3f(#Rz z1GX`pNuj;Lv#aE3U&#LYkX9CbYEGKsa92GiGrJC7gVYy zW^h>j;#0|(>ANy-Km9vWWBPze)maZCP9wObCJhchnQ=Z^mF?sQtq{_63FnhS=`6NF zDr2(`aPhf3A5suzt42Z3&l&}^Cw*Ua7|SG`M0La286LDhw9=SoGc*rtln}~ent3tR zcjxX;OBJS+&i(%;)Rx@rr1<^tcrvz>wLE!M$7$i?_p`AzrrEJBr-yg4oJ*3pcnkP> z*`87@entic5uvUop0mmg3NqIi<0d1|epeL)8HE9_OB%H`W6!XDQ;74hlV@Of4;6CX zpEWaMPxGeu;utU9WM~Q=4`cC^Sma#X26NBvkE<1EDuYU?haUJ5r~BJo_b^xwAjZFL znu)epoOUM?j_=z_L&6Th+j^>@q0e=VAp!@+`;ooyw)fBg!T@s*BDZ4s1G0NA^TI3Q zWrrB>pP?=IHW%9czHCQ$JmpE*O49>*2I93qb{fLbct1dp^Y#eU5Fe#_*767g{y4mC zdN*ED$K}Amj6DnX@>?0Vkmd0^$f$gfc)1__8ETE+@c@^+cPo+n0H=-9*xzAFsj(+{ zOS&$0UCc{Y;iiC1!8#PuneMV|eD=2Zb7|RLub8dncXRq}thR<{XLdy6s{?!{K0)A_ z*iDA)0@B$wi0f*maaXb4!s9=Sc*4&G;8bhgrI=5U2DY=U`~%#V5oBaf8jh9v5g5HzaVH1ls~;gK>X3hxCLPYfGq4J;Y{w$0S8VngZbG z?y4Ncd<+yIPznt^lx?;DI;WgnCpN(W)}W8$S7u3NBVj^KwZp#q{OmuEhIK?>%=~tU@vjUNfuZG@3K(`Wh zD53hsFMT}`m}!$Bi(6t95723vC^qo+6%IPxL~?Na#WT-uJz)B2gI*rnv93?anx;>y z3R9=g7$4g*(U1JIPC~W7$AqR|zD$~>#Vh>_NTT;o=Em*%$^Dn)@Ef1? zk*j{KI;SNftP8udzUVb1-Rzy?Z8Cjv>&*1KT)fTM@|1X2^?0{j@9N@ikE-tHR<^!= zy`Q0qm8&cU2816{jW5G6sZJaJJh+XR*$k;o;MrAg^Z9QtzScTyu#edWT~?H8ekkOS zK|8Y2 z^BE1W)_VIee8Kp1dsH`6mgCDSZjxDuW5l#y1-?BL$sT37 zo8-pPK@;tkmq>2ejxzg%`FtkKqH6|_v78=gYBFESI{c1B=E9hR;fc9B_X{6&6-$OE zRtcw6q4zabPrYwSc4iTHc87c&W@0VB$1KEtkyXG;UYPEX{q1;4k^|~~(IP*|baA*J zX+0!j9$`~me6JvzZB=9meV{&QwxGen{`@Nx*UUe=UrhBNt3Vi<*(miFU9c8#k)rKw zxJ&bmV?#l7l7kIOoNnucnjXFKcbM;8jh{JfSOJ+&2)?)sdFEOOaWI{DM~^QvZm>)< zl{9d#q?R`0$hJ>AT*lD>eYA&Q&ru^;^tpH&93T*!m6ImN|1AC={?v~M1LY;>sRJ|w z78IhA=Iy`CVAFh4lsO6uNcYL4u2&w#ywA2iXukB@?swFMkhrALck(*?{so1*=EJ0kk7P?O*cNxft1c-PUA3Xp90`*YDH{@>X z2`Z_p4{^U6&d~`?=@g0dToXBz;2Y7P{{Sa0`E`$=d5m_ZzO&@zo)1?xBwC4gj&2^% z6uh30ywhm(fG5`=GNJ&=0B(Y1VV3<|$JpNdcKzSW`wLVBy2k^G)wsRGb?M>7xd1nr zt?-+ZIPEF~E4OsF2Aqg=Snz%k7C&oU@aT+2+w*u_tboo_g5G&}URUSMMaBy0ci2>J zTwNmOQ>ED`$r>K-bW^uFTba5WW&tSoJeitQbIRXoaN%#(U7bJPwdi^+JX1jXUcGL< z*Fbs+#Ciz+c$!EKf0r7HOHZ&xld16w3dHFr`PCWn= zRUMAQE`9d17lXE7R)}wFfTkYpuN_7bBvt$PW#GtKCl%lP)~3gVb1ezlxH- z)7V^gwpqYYYl%1}+tA-Sc^`)b%BW`O3`%pux81zoZ9wQ1&a!@X;g{y~OLtG-j^=AK zOPS1DnZJ~#tutZ5PRC$nGiH(6$%SqdN;t8=5>~#)Z=N?rZo6Jf<*X7fNceXBhVXgW!;^Cx+h=(uRot`W2)IaZL zw=m)o>9BrQGwV&v3}cG%CaA>id8>X|LD!)>X|1UH@!k&uAJvCgHR$=|rU$Hi)vRS4 zX&A=qau>i0I}WO`De!Uy9yt?Od-lcmNJ3cso0Q6XZj(EjUP#Qt>s~&E^hP_vHL_8P zx{sZ^i76m-&#dn24|>F@#?ADF&B{9=kv8`QM;8ny956~GnBI8oEDQ(ml2LamOTm1W zs)ASTZ7NOkddshxkn8KD%;24W&-;qQ!t-WNWK!;YiY!ryT`DWjMM=DHO;_X>9P=@S zXrlvzNYiJMZ}sCuy3f8-{>he|!9TD+m3&pRA2A*H{Jx14R#iyS$C3qb|I-kHkcij0wJjWphaQx(ddj%6AS~ZCiE+1##A59#y+h65 z8f6JP^`sv;2M;E*rRCt+YmVRZ`&3ADx-qoXsR{yXZ-}n(vrH zLf3h&gee!e2B(#KcQv_9;fxsUq~e+(uXEeQrp(OIdw4p>ufH})>b#p2%&o#$7N*L* zF0)fHzNv+&1NuMX-*n_R2A$Z!Vuy~`_@tnCcD;zCl&HUL8u!hN<0Vzk!>^CM&~<00 z`-L!jDr@YcPSxfTHYa^~=a;yaZCGd55r;P3 zfxB84TjI~%=AJ~vP?8!Ppr2KuQTs}qb(JwD#O|W;&ui0_#~3kZXt>0v_N}lTDjj=v zUOX;|KW$)KrfTHhc)CtR#9!TVvH@++%bRQ z_00sU)6)e)GQw%I%`sFGz93b~;reIBu$|r$rp7v=e^-4HY~1}${wdwqPQ79q@2_4F zNpNPGxY4~k->(V&9r9dtCTA{FPQ%vaO1pE}e2n8w`bN4@4zdeB4$D+loE;;P=spXO znLQlrb8JL+I}iWnlOM1;FN@C}6)C-}rJ92WHxQgMyzlMd6L-E<{1vw#dxj3c$np&D z>$vyv)>V07UD@}L+yPeVUjTGrnD0GAk9=4s^#8>_Bd)H@jGqHoZO1zHyb1@TfAxr~ zUXVUW1@3lfh_B09wdwc;L0?8JIlYHm_h{?vN>J9hc>c5H^<)`g% z!F%e`TQ9|Cr<=LE>^Gq6_!Y(1yL7G%+`G|`{L8TeM4@XilL|gcoX8)cT5#V^+oJ-* zyt-L9#aul5GvTyP&|J^~vy18ZxE>ZRv#<}N{tU1i-tYnyh#>PGT=PiNmq-}9VcE-j z1}@^|`&xOJ<2zz2zYhH`5ec4O?3<6cf{*QrXsd~@2FLz7C{MhG-?3g?cs%QpEL5e^ zEVK1OqL08uJYx1|uAhmsm8Tw}<7!fdZswkNZ`b8%mVsK^-i+DIpEJne{kuJiUwwd@ zuD~_poEO#iF#Q=%y9Ngc*`bZ`>OD}Ce`~X%b1s$U+9m~^H`2q~AAK-81s7EtCkB1La!}kB zPe~@D*MxR%zjza?SLk4W{L{tfuM=NiCWa;_eu7Ti;Z8kMG#!ld$-=eNU9{BW_%qPL zSc{C-Kf$$tF3phfts$h;x0XuMEb)2xpI!6Ax-2qYXFhXG+k0ui0EBb*8b~1xr#Rq# zo#hBv>f>>K-p5|+=;)A&*4GAXr3_JWV)gM43lx|F1bs>9`Y(o|&Zlw9U907!h^AmtM6K<;YL zc3}X4Un9L~cFTcJaS>lNF+$c&gT{{6%@(j3a7Kfv=~=$sm7j1C5vu7g%+HFoiUN(S zS5`b<>bp3uuda@>o-g}l-P=EeT$Hd(+Y3n8+-Ug|;^bT4>t^~y`^iJD7QWr#W{Yjk z=uN`Cb2tACItJ9u)Mm@&n}v&i%ct6psC(lgoQPV&3ETgS!R4s%M(ID6G#lpedn8S? z77QFrN$YjAMT?3Rn+0FC?EN#c@HwgZv?s|U;^`w2!Re}_ap?6d=To`IWd;%TcF2EJ zXCM`$o^Gbog{q~mPeA@vI?hv};dzk%0LKoUl;C*NFkx-p*KKC|s*Y81izd&i1CM)n z$xrTJwb@qd5hU#eueyT<`F?lEFT?(V!+s-w!vR%z_S~i8m|xKiR+zW6>!$j>`O9-g z5niY^TWaT<`yJ01;hL)3Ux%Y_{!c<&iR`c7W~TDx^qq{ITA7MJJ0irBoX|wK;6$5R z6U@^AXIt>P@)u9$*8A=qbx}$;Yk4cqC1%yw37t9L!T&_wI||tLdQ6Bf)1m6C-u3bCUvZc%6|EvM{s{-XLYzc46GVV z<3w2Cu42^M=2+J@c-!F3(utXs8fa!8p5623^5jX6$NJ(s@H=Yc+kUz@4kEg;r+U6i zBxy3?cPOj%t~|hj$c8SpxrQ>r+v453tV-7u$mUMB4N3Nld=MxKPkW>C@m4od5)YCug!}?U}*)@{4`gr?x0e8e8Hd?ukM+#wYLF zO577$wdN0O0Las5tH?VV^8PxoFwAfuF9!G{SLUyc$vUW=IOPyQTpD}?gzd(Wv(F3n z*R8p7?62?0qmN*8g)9mC$S73pSWj{H)YqKTV7<@d^Z`@V%hZ=!yyy?;%uQAQT=hs| zWCB72)FC(zD?DW(2M`=k6|qi`*kh2yG0NrfiHbEq=R3qO&j$ey%M;iqrv*VACH9Fl zHv!tPyh{OD1Rw%H5Dg?dOoQ0cRoGm*KVVI)Lxjh;l90pK1;E@V8w;%`miP1+*W<&! zITh?opMfn6*8I=ows1@CDYIVl!Y5A5t`k1v`>VlR%qmf6$O-L!`Q=Ic3o{YHNpYzl zKq;UJ{3PcQ$@Syj{e@VnTYq$oo(C|$*aj0X<0a$hA%A@xI0E-YmoEa)zsbb_;A)+> zPZ-_wMX&LmTDNz(EM|A?vgB>eoHqA*~5o#rQhSRWe5NpqJ@b6tDWn&1;>sYV3z zHdds4&?GngJ;gg8&w*e3;{Fi}UZBoJVUub|t`n+=HUeYmkL0N&zGHYw5$C%ZAT!J# zh|{<2Q1-eBzPy{{6PtGd#0}SpyA~LQE6G~76d;fRL`0u29#Q*(wIAsO5@iZ&hO;Dt zoR$`xzYsIYv;6J9iC<+i{vwjK;gt@<9@{OG^PlowWWAgHnQ}WJC?Rx1aY189O0&>P zNrtwP(ou2H6OCClbD*X-Kf=jYLm5mb2IUGg$_+OeX)u_s`pbY^4n=-L5)vq+a>|xX z)&ubDAU)FU5!lNU;1*QcX*y)Xgnt}x$Qz1_!7LxM5xVI<*`T2cbDB*xVIw!~0DM4W z8Vk}qx2GU>t>K0E!1Cb@e!==^ox`TwUlKD@a00Pwd0`udH+{<8O*An@FhalBME4X|)1#+;qF?8+eLdZWZkwK1%w=2PjgPujHOy z*W=pTktNIFKe2#;Ioy{qWcfL6GQk1uqH4z#kXG8K3PTL0O)(e89CXM5Es9A4=Vu=( zLmP;MPawQ)7&;lW40qw9lt+*yCfnR0{h`@>DZ!kl{4xbGz0p=o80wQK>7Y|Hm#Rx{y6@)SSjiB#0s*UyzdlU zj_b~G7c|Lan}0ksuUE;L+`&eVc|f-0DBPzsA<5S`tN0s_qjqg7OtK!b#vibbcS2RJ zAK$ZXada}>l5wAAJYq$MI}`DXP3NX}lw?Ah~W$~af;KV~b*S7(cwc>XLs&fG9Cp@XxlmEZ6VpjY_$ zlL?K3A1g;&w`K@L8OnZ%&DgiDZMlz-lTsG%>d6pbxwip&521B$Y3fz0n~IFy2uO0k zKr}E5yXuJYTO+M?wnlGOv;SC&22fO@Vwb)M!^9PK5A{z?}j@| zMEy8W`oGC15j4&Poqx7zDcD?hZ~|@l*Hh7j(qQd1 ziSGX{Yha58D?u4z-{ywVP92DgSh-HEd zJ=amUtuqd`XbQ)H3pPjp2-y~Gt%EY$533*7^vW2ke=8+l)Sa^#k}$7NDWqBIp;to| zW#dQ!tiofY4(dM_=xd`o_Ne4jnhL({1^XO@R+4;%U#?Vnt#D*Deq(@>13GcUs7p=| zeuIF65ZjDBa0I8)lmg@2S?5AQ=FM0(P=IA>N2|m5RMG2E2Jte6)3d#s$z%E{K8k;N zOrLwIZ>6FJA0;)9@0pm=`2@k^$np>TKg}9fFC7)D@sJDI@JHD?NI$9xx>V{cB=5mPbkg}e=}fflOXhN!}X>G@y^d0AT{FjQ3G=L;2>M-S2VFe&u!`S<}&!NP(Dys zTcc!X&)dna!_OleGUN5!RyW-qi#Hh~$g*f*@@IE#)PL%B0#{ACY^X-rI`iwEDKdgk z!!Pd2-WkETFMgpm>u5ig!LdZ92{LvGxO38U9?ehRP3$&u`-0Qhj7R6~&`)lM6$>qa%S@zq}{&m*t(k_X^mFUz|LPot%exzy9iJts2B01JD`rkP_m7&?v z*}u`kLxy*Fl{ftiC`NS(abU7Xn^hJXpKt4#ExlGmb@`{SctesHV2rdwmA5Qfd9zVT z>E3TdpAjq#p6G7a-)G1*%uS{<$sqH|&WMPkCE;Fkp}O3cv8o#r14y@I3rE&MQmCT$ zr{F~P)$YDhgkN!K?dFCoup!xlNOXn4v`it%$_f=-`2AtehuIu2om2m%@=FxXN)a4l z-;|-9w z0#810V*a7WEOqh~nWRd+r)UdynmO-}~# zhx;VlW%1~=;hOHHG$^7F|u8%d&|9b?7UzWs>YoG|* z?f-B;_Z^AeYd{bhCRyDh+3YcH{w*TC>H1ipI|?=uG9mvKCCpg@NC&oV?S%$J;!KH#sZ+pR*r2=AF@80 zddQF*|LG$VovDJG@D#X|WE#$jll?nl!&${)lzxUkTi8Z#(bJyo^YJ$+|Faqpd8oA8 z-$G`S%UazC(&q_sdyTE4zHNpz0PktlRGLunTTkjM@votMA5^>05)wV3y^o_pPQp@BdWED zI59vt4^CDhDt5%1=DqqZQAAFI=?=V4FjYR%$c$e)ak@pjt4Hb&<8O%sGU{DG`n_Fs zJG^ouOtR_NJ~nMw5HA%vai+xNU!_gfzDj?9jG7>v`QtZFho`iU1=-$$a82qNo4!Zu zq>^YzY#&m2?)wSxy_X>AfU1)MJkK6(<};Cg#8{n5njNt&lp;=N?J*E%uMrjr9US7Q zal4;%cx4NE?_fTxD<3U(?R)I0@yzk|b zT>f4q?q4khn>+bCpoid<8X`filJqQA{p^`0lGUDXOMHHt1FUuVb`z()Y*AhgW%C2v zf?vd549=qbf3)z8(;fiTD#-KKrN$LKK2yijXyT9GbH|p~R_iw{p_q?IHl@wb_h@I7ie%ZVSBfhB$pTTiJN#o7+L%%exj729-8}43^=Gh=enD z2-1(0_3*4l)=G@EPfudeE@BkvjD?wjxlw5egGi}H^@`)pUY(fg?}(|#He*i4^jNwI zBZiUuRvdj;#UK*y#b|v{_cOGh(ApS=rMPN4w1!n23!Kw-cBq}G?iqh&!#!b=bWW}N z5b7}t{2~=dx{wxx^LPTV*k~4GrKNFS*LA*g5r^o*M7|+~Q82G+97EL}w3a;fdiMyIkxa4_Z48+@_7vG(XHppEE*qHiX&LF(OIPFSO7Yg}z zs$Fh=x@m{MfG~~&6(`Zo8<6=nQYlu6oihJ;lp_GR-Fk}x7B!r{Ws6>UM=!@P;mW&z zj19rvaX1mQSvCNs7S*Y=?)*LweCZvn&!CuH$s|q-5p6)E*kI<@LpeMw!=UIGQ zrrVU9FmOOj!Wf5C+A#sY!YtgH$)o7r3pU7aD@<(fXAP$PaUOZNHBsby*{j}+6QY@v z?x{$9pLrJ(&$PK0$;nb(8|@)lwgKVBYVcC|l&AG^nBCJ_^)%O7Pv$LckqJ<2$Ix?- z@CU%mA-JZ1^Z_XE%z9C$>jTV)UUQ>KYPsQ{3e05oaVqLhn+oTI&ZT^Etfred=CqVU)35N9 zYZ84(7?m_U0jgI{k$XkpF=iCe14wN#-_hHkjtRw$f(u`mcYT#^6aznw01IDl%uIs| za!=ww-zX4R#JVYr@(31^2!_)ybUbWTw%usWY3cQO&Z*uSiweky0H@x3 z&1u7iNdjvyfd-(g2zVwDOP2xG0H7W^06KKT|HB&(y@A2B{7It3J?kRC8e#Ci^ez-V zd^p?U6CZ=Cdi3_jc`R&gxFW%DGbn-EO;XgCvNzZJ!j6}?`jE~o%O8uN^}fxt5{RAc zn!gizAah40aU})3uIEAOp@4OFi~WvN@Oq`Js1@S|#aFt2IL+PC2wZG)Jx0nR(z}I# z8CsgNYk)-a?<704|1pzQI+uWFpX8by{^!AdA7j7vxVuiFxbs-pcz}~NEuvA`-BQ=o zECVHFtwO8CE2r)%t(@=;Ear>mS504D8E?pAooa*|h0(Xs3K$*G?X3cNE?OfrW3 zXm3We>!mNft32ZDzguGK3fV;-vT&lqrd(JYss`ONcka8=oy7BnS4VaFk?2_KSnrvk z?ASWbxDPIAg%<)VdS_>+e1D#p`T6#Om^eQ|=ChD+gS{#(&mM2pDzh)1p2`9)1)#JdNNR$s+;}3@WwmQ;|c3Y z4)dN^@zx)SV|!U_RPk-I8a<#F1|DKYX;ckKM86}F!{qh@T>yW<8a*R;N+nmFl8^RPa+_j&{ih{FxWbl~dBPFV8XJW8HK9&EjEE5X|80BEelxcF&(JJ0$nb z2_!+x$N*Ds3#oz}UDv>8ELxtwy3;d-lv?#2vCy)SYbrnu)J|h8pvCuHb2z4^Eyq8g ze|o5=xht!8(@B9}aF+vmvpz7}p~-yBRNCm34E>*P^|3ZSo%CRwEDecnAd)riCqAng z8N6TUYxN(5zxV)L`eU|wh_gy&Y2JtHIZ_gnZ-Iqu8nSo~CO-aRTCXocq0NH%mgKGA zr(NQxMr3Mw^~oD>mknKLGYxpj8@%#rCDVEnB9fMx-7$Ea+CN~=T0qOb@^v%NEC|GuL-}s*&!AcdR2ltI{rKA-Com&^@eG|KZl*)2hAws7nwNLacbs^ldt-a zt2NN}+)EX!PF-IH5w%4PI=ti^M5K@2#4n2XLqoQxvpDSbq4yak9)%6N3QWr4kOV|iG-L2Xz2GX`r6>K*Mt?@ z6_%yUPJ9hCvL7az&;b`n<&lo)1pce+xK82G%0n;u5dYM@EYatq*AvM_3aNO9;lZWl ziR;8`@QitOx=wJ3`6Y?e8><;+%bp3+L)E$q#cxqaP0T47yeD!WWfgQxI*vo?Ozx`jURg=3eBA)iMmGkw1sMDi0) z7hlusTb^R8RuA)pU_r%t4C%c0!RxU!nS5y*m39@})t?`ZNX$C-eVT(sjy_hlmIZ%va7wZm26q4(PoL(5R$61Nf3yF9~ zwE45=-Y&*f$ux7Rd6}>AF`kwO=BE|{e!KM8f|rt1YG0T+pc-{N@E}t7Ma2I_79Had za)IPyx3C{4N6+kTHd8ONY8R)Fh<1W$;3mYam3?^1gqXgmuW2G(-XG(|f3c=Xf$gJ- z1P^n#Yu-)8LWF*P_>Z3fA;4o-Hy~~C$DIXw=+{{Q$ihQs5C1@ z*rMpCF)rFS4Rc}V*ErQ_YpaVl$*2ps{!AhD^1xY>pRH(P#&$30m{S=XLhbzW>M|34 zaSQdsfvXanOZ20+zM&Y(jnEYu{c*#mRDl_{9-n{w0TAe8JMAtWzw|O13`+@o6dc@2_4%m@l zM}}zyFr_MW_w`j}@rx?f_2A|)Gk$Uc$!(I(FQld0SLc>mXm1lIv;e?!;+xhXl9kyycT8@wzX4aX;H<`~qe#?4xUk zl}LEj&;NHcZnqgFts$|BubDzy6L47W(04p)B-}gu4Nr-l^;5varkre={e0U!2lOy= zz5}P0!y8VxE8?$`czws*e78JYkT?&jjg2ev!wIY~x*HIBeppe`niBz;{)>*qR_%Ey zv}07-Jp~m6Q(`c#@0I~!Qo{F2oMQN6&CYFwtEY;)9qUgPih!5*QYSF-Kmo=(h7=z& zGObT+4Cx!{PRn;f_ZmTbn6AK0;h_Q&aUTU-UW6Zumf~VY!zV?*LTc6raoVy@bgTtX zY&q2b`aQD~x;TPgJQeWk2s^#!2tH_o`in}>^&vKEmqGjdCYpSV9#_C^11WrzQEdNV zxaMRV3K{VoNZrLqcjq_H?sV@Ju7-HW!tb%04GpdAdq*nI_NAMoJly5t?dIy)c~mK@ zcWOcI>g=SWK7KJNU~PXET`SoIG*Pu|!$ZCLTNjqKCMOm^2k7v3BxB`X)Ec;vjR`IW z$Cwd3rN3ACXNs0QG$p|=jZeHFGi&z*+ac=beMjkXDQ&~Uy`o#MJn|z60AN4giZ(gV zjo6@(B6}la<>)HS`8^nPM{;`)-A-oaOYSzo?x zj<8w#`99b;b5HFMJ-Fz>&uLVd*(07`F|f>yjceIrpd^>-{$KOLTipPK^p1D1K>52hS+=I59Nwvo(t|@9x0Y?DoS3D zvj*fJM`n6(Z?0VvUA)lJKWps>uh3gMKup702UWICU6{L!t`2xH;UAXXYC7b_YD&-E zQLWG=kF)v1pSj+3OWY%Eap;rKLIpUwYG;J$he05wg?P!!*DtfMrFt=yyxk@KnI^p6 zDiLr()nn_*5$iWditG{H3@?vRk#uDKG`%3{DT6LCGX@@T<6|4QM4H7fGa4B{=C|qa z4j6P$+ZBtLk$hE1`nq0vo0{Fh7SFp8>v&24znIHAQHNH~6lU^RAV)bw?@Tvqpn3qJ zfXp$~hZr@yxm1Bmrfn6_eIn1yZ~YQ!J}nu7v!a_6xNF-8TD~Fq-%ha!xBBU?g=eNM zy}zlMd7Ux8N#?3My~b@fAaiqQ9`@j4Bc6*#j&fN9qn1P*FEMDBb`_0#ox3|WsJe?^ zF}V~chpRi6jFg)M<4Ov4X;;$tMIOl0!yaHU`1PP|=H^`hc`vBKMQ%B*yGO2MC?3ZNd~2=b1E&o zGWyaZjr9h=5{PeH@sgvL@f6vk^PExh^0w2Y{?8slaF-JqWrn%I3*HG$gE>;ngz~1k zm|W>WwGz(XQfBl6rA?_^1G{bzqe6+U z^1g^YIL94~`L|h%szAXoh>WddRv$ba)oTN0$H9IJd@IZQ0l2s|*fJLT&6t+rpaaVs zW#-h?IaA`}CHn1M1Hu<_&IFuJh-;nx3~i^<3fjDyZZJwrNUK_!>C@AkJv`oUejoGh zUhw)si6m&cUr*(&W?T+U{S=9g@69KIBYl~0&Max)>5DCvcuB_)$$(Q<5ZKfUzc`;e zX5!VbHMzMQYE=q{43$MR_V3P(XKy1-?VDMol72=Ng3MqcbUPTg+ZLVuE|YMWt#4Fl z=3{c6YwEQvpg+S8uOzYMoy#dxcs8FgC5hI*6(Z*HaE&)ho&IOnr2YY3P^JUL4I&Ak zo01;Y_pTYLU}lUH!AQ^C16%Ce9=Gb1(U^vJPR=T;gI;8LC# zxGh#;hdO8C()A6<5;Lsy0P6e_%`&T@zUmxrk{50BH8}!zNjUDa?yoHfWrd$h zz}(t=2Ps5#ws5=MbeDQ;ht4Oboui}?xgRaPs$`6nB4(zAIlKN0bokbPNrghYOr_nq z4s)km;nw<%E63V=)5dt`QDJw3+ouv)|_b za90F-y0TcC6NPp`s7;0xj0>7T%35EJUDHo5dAQey$)~{cwQ~o!$R}F~EwGjM)(?8T zvPwsM zPYPVzZYm@hG8U$g)EQHD8`!aRZa2ck{d$Fq$phdJ)Qau~i*U!4GGncVv(NpvdpY)L z$NNLsR8kF;;Dn|&y;%Ec>~7XRW4@0gVAQjj&Wjz9Y}8WNarmEC?$e}TCOr6x2yxvO z8@yx*Zf(`|S9pPn9BWZ0ZBWy$D?`vEQy%mwfw>QX`vA+N_wn_Fq8wPIp|%!#yhKmC;xPR ze6?gVf^~8hnc#pEcBS>EIi!mh+BA)|om1`58=%#(Saq6W#c_x5UCFf9O_}bd9C&9l zo^g1Vwfx@*$;_QU39g{l>Q!KDO=Ef8BjTstX%|Z0d;FBAo5wZk z9B9vbZ08{68&&1qeIc3i=?7g5tVD8m<8E%wJE0tz!hVNAQE^%_aM#ZO#<<;{k2XdS zMnt{s6Gu3A=brnN%X19etnG(tMHY{orcAn=S`NzaS5GKapwqVnc%Ytqx@B@yz37nr zSkQOlL1N}BaCgxN(AX_6`%H-hi&1 zx8r6{)=4ziygErR2e(;PI!;p#+F$JKPX6v?oIAE)P6yLdlgL=dmIo)R{q30{h52JU zoxtr;R7q=E=-*|m*3Y`?Sh%HBozBxFJ}O7$0BeET5d%(>Hqj-fI)Y&^lWGRSLO-DB z>4MaFe3!g`)nsZYC`qY)l|6kI+xNq1ipOMsBi$u?@Dw8lZhV`EdE#!!+^JqR>j`oC zM?crVf*4Hvmq}J<-MFF)X-W8%6ay>%A9}8ocO(Bw37Zs=ijw#Tk*mSzd^T?+-QM#Z zQFj$)N-H~BFC%FDmdht{C!^DHvqz-b)a0Wa6{lOw44G)n8xS6)dhV zM%lm1XY{_wvxFBrML3uyXXnS=)2D7nm+}_+n)TYE3$*U_=6F#qZZf*RxIVLsSSah` za)~M9%uPZ@TH#8TpwgO$Ov~Zbq8X&Wfc8^)EMYZ&{jMp316TbLl56nxhIi6EdY)#E z5;}ie&Dm!?=Mnk6ncyjx_gJi4CgU+hkFnnvzi3C{^^h%fD=7Bl9FkiV^3-cP;wrh( z4W?1>QTBO7^=%SeHYUdRy#}^>6|RJf7tkC!ou`vx!v7q1$u>Z(wGgdd)Pj)1EX2fI z%b#CsNSX;LS}9-pd+z!zHO1t;a+XD;aHda0@}9AG%MX9k`+s=JaNH-cVxHB6z!9S6 zZjsh=q2Db;dWJ$v=hVo&L-_`M&S(Uu%?(Cy_{YTNR=`9@sS=K;KqoFYg~j)aB_9YZ z2Jt3K7r{%gQwxJHFS^ggB{Oq z_{x<(J!cmkT)QaX*LtDk(4RICNqHxpV#q zT=3<1o38Ed4AFAh_5tMf*`BcHdBlN4}%_>4O-h<>M0S3*KNB=0f({p-#tsPdY8?zJ=?f| z7j-;`kyf`MmQQbf+g3WL zu>v5mX`pjFk#I2CK394&CLNhr=b8duGz^foe_;RYbo^@cD=E&E+|p**1#sQLjY>=E zfz(8v;aYm*oTur#Xwg;20E2HWP~xTH0yP+Y;@|x<;eHgxb>00f0)rP#OY?>vS1m-= zK>e?-v{L#fM}*o0ysX1<@gv`&zFiyCMH8dNEW2K>1?%nils-ac`9lw<4 zK`wvqr5c~?UzJ^6GZ%jR^>?3dMX9?ke(?^Tokgplg~v%v2ff4L7Dk+&zN=TkRnqQB zBp>j&t^;%@>5Gf;NtGr}7xI=T64m&B2+1C+EFpO^bxYztms9qqGzu-}4aj9=&^vUv_3OO8+VtA& z`KRO3ZMPEZw(F#f8UK8G+GeQrSM0pqnC;V*j)K@1I1lAO%1gUQ*VvpB2J+h$!d)j_ zJ|biDBleu39O6@pgH)2kyPs_;J)gQ$ZBF1N9g?EJ*%|mg86}0g)^-V>rS{d7SU3vv zw9X$lGPJZqNtXa@?I04Y!R-sDIw-|E{k#1+$FBTJ(tO!e#Ff}z&uF>&@rv7f&%(;) zspEeZrexm3DyH2Is4DAcO+^>)sM|(o^p*3&l|nmlRc ziPP82Z&z5&icj7N)VD#sD?#66nM%uR7R-C0qhx7=UXyOVst}(ql5hRvMZnp@2HEA& zZqTY9MYyQ6?SshCxat8{71zmV;jA#6mCqVUmCaI}Hw+g)ukAQ4VBK%kLSci6QQ+OT zqG;TtiOQDcPDsSA9c(rj#nOWSJ7E=FmP3o9Wt zaDo;c?<(sUmTx0r-t`EFPmPYkfeV0{?uywlCsJDqNr}-~1sAuUNcg5AG#IzD+pK(f z1?Sx9@)3NS1s}YULnQZVj65?SjPxU86t70D>odOdr>L}7N>xGKU6x&#uaVK)T7J|+ zJylR=WEK1EQ-S(;_KqR1ofC0Tia^B97bUyBw;K9?taCs;$GCpuT@9@Y4i3+DkG=h# zf9|%Ugduj+2@as-#*qa4mDaQi#F;bhO+7A4cc;}(o;u5YqILVyxt|xu zcb8tQ_z~PW?o^rmV{xe9#;?Nvi>dE`YHHcufA?zeNf0k82`EJcsUbv=BK0C7B2^J- z0YXRV9jVuYQj{Vfz1l!}=)D|i(ov9JLhl5m6Uu*b?|c9ETUp3*kuzsz&&-~^zy0k! ze;5|wWLBWv`elcX@nbJ-r!w>9Pm7xd>+4>#f%3lRCJ$|8Ww*)Cvl{^xG6Su)XM`2E zt!c-mOeFmDzk(;){Z=_Qjix!2l||z;05*#gUL!{6a59LtHB?Z(nazXw>ISk|xwsDk73>MN}zVcB?@a#GO}#kqGz!8$GFb3E3pNOM(eb_0A1>sctU(0;bo zr?=2FA*!XC_PCAE%5z?fF^BegcvJ5To>&?pl?4(|qibA)v2j&P%b^b!OBtNuJPsN# z=id<70@fpyO*+#EdD9Ycu-0W7&I17M0oF=-3f+z1e`jY}O%V2Lt98wjNa2qZYf;{m zo6>6cZL6(2dDEuc3fFYgtVgy=ADuz5#~ISi8M!J#dS>AH$BUP<(G3?4hmOCB?3v+5e|Jfkz9_CyeE>>mOChRRoOm9o$J+c zPxktMA_VE(L5O}o;KV6Z{2Vj(?^_$sQkJxyp_9r+2y?$z1(HrmbeDF(P~kH8LW(}fKmJve)X(QHE_ zNt-y1IO&*!;*~6X6{nB7;)~KQJAP&_9Ti{v8~oebogkoX+R1!ge!B)HaL)zN@w)L? zQ&(8b!NP^sPJ}iNd-__qnP2DYhY^ICuZpd;ZrAN(k#X z$`9jvXv2~|uio?lc1L3*40rS^$^mDr;=;z~iM_YZ)wg7i2>pme?hkCei2PJGenlFK zE6L#}`hSw|CnV|-g?^WEk|TX~g6XwJHP-mlvb1pcjE`%zrH*O>QAISaod|oOK>$?% zPFx-XNaNLUs$BEh87?^Z9$E3jS3o4AG<6=FYKn;1j#S!-r6p*$JpUbX?m?qpUT@#s z-3mlLb}s{PLSjUe(id1W-QXlz)>NsCj#-mJ31B1}4kDrw)WUn7UYj(lPv9uI6E|b{ z!fOU%HNXKbS!yJ*zn$=-a5`@!Y$Pu{X8UQ-Sqt0sK6{Debns3ZqejH$Yxgipg28(C zPjXl9*TdG>pt_>p-4l~=M^VnOY%+em8x+)t(@cjENat=0A#c$iM66DsLnv+@eS$KP z#i$_pX@)4utzKy=5mB^?%Ab?9s3vSgMm~6-y%IchZmeL(@T7Qw-m5Q1ec5#)lW~Fr zjd|%Ye=i(`?x^~jI()%#oJJUoG75RjJb@q|=7ZVat&?|Li=WSv(QOKURa`GY*g9XdJ^hc%+r!@HdbLG$un@`&y0 zkfxTVrVHTkgsMH;FhN|U=8$;VFO|yJK$cpo-6W{@}KXY z21j|>?xB!tfi-<)c7$reM&!#x z-;fkTy7X^6!0ydk*4E3`jj;YoWX*bvb8eJZ1cMF+T0$bgr~x6|ORJWGOfUl0s|5OR zM30f)faXx^G}O7KU9$i43E=*YjAicCj-`~2^sXJ~9Z`Pn@E;G`s#i^%Bu&&+Vn+|- zeHs&wt#@p@@u4P87xj#~U2bpu!EAHLNH@AMas4sTcr3#7!h8&CMUJEsWlz`W)0%0i zt0HZwt2=y)>|u_^sQlqPl#}&F{0j5^3gic30#o?jMe}0PB!Eq&%slVW z>!LATBDP};BrSmLUD}hfR9li$T)f)!u z8Y#}WDwd7j79^XHrs{lu8h@U$rL+lnuY;y!FkxZPh^123NdMZwlAnPy3_NYiFf^v^ zYxWL9**C(npfPD3@5f(b?>^Mr$xX~t7%~rd)2pF6czRu4k` z$h3O+hrQL>J-Y`eZTFKXq)b70xeYQu3EAI92%Pv@ACZ2Nk`ICZvmHOKByD&|dHY#P zD6ZvR*JV6(9$R@kl+$zFyY*jn=Ub*LqV^nwo5>3fPeY}Xw~cyKEl@n*hEV1JfNVIx#@KSZt&*?v?>*I)4#p$bRJmFQ ze(hD`i4V|*x6wHfuv%Tf3&~@zO4?c{kf6Q_?GEA+duE+r{noNH$ggd3vH*9t;Fjd% zq>RkXBI9UUwHfH7J*CWKGU7}|f^W4u=kCYb@7|O@H8LpM^X}r~!spx-roL{yT)Z|AK1za4R2QKWN$slhEx&9R zH~hNY;pIMP@x8ZxI+IiiwQ?c#_3Mu%Cym-88)p%7cf@q*7_}CT&}eVqu<~KcnJ;a1 zHrLH(k(B45SC3ZwPD*mlj8^Ivgh{PfmFTl7-d~)vY+M_UzYkzSQZaU~Ebq?fEf<^% zE1F3nJ@6md$s4R&Qz*U$>*fc*;z&}j5kIDmLK5AfiU7oJ3+2X(UqGr$V1pQS5rPP` zgx7Lq-~9z4A42UT{A(HzdHKz!(cfUbpk?*$a#(dL-SL%QULFN_ocP#?6JuHF(ZIrF|T}qjCv2H0EvdIHO27Q;az7! zDIgX3QuQ`~+@f~nm!D;i(#0iOY>MQ>JxpEZt{KMBrw3+M5H zK;>GkWelvXA%`u;ffth?e-I{lR6bB(#QFH$Tfpr7{UGQ}73l*dXhMNTGMkh=522X> z7VXcEN>4nONuSND-fkbU1&uU-*oWkScH_r-5Jkk3{xYs0?LL<-ul_%8%9!$C+KT(rnxZ z&WP@1j=Z|M+*k}c$y6;~y&WMa6PF%1yA*Bcu!Z~qZoi@03x}hD z%?~JnDZ}!$8c9s){x?KLQZce9D(C$-^r)@hZG$*pUwApbYyOCiaRuvd{||j0U@Xpv zR7$;!3AP-dex82R5D8$C{`$bU`;?77+b&8;O#O!Qv3EO=8hI8vN%0Q+?^m))@_trm zWIJlfpOSAmp2U5P-?STHyOA-f7#=u~#>)K| zwmZ*B#pUY}XKpZM#L(p{#+O&#VY!#8&ef|_nY;2dcl0s)hT=9ui@C%x8_n7tdGX;F zYET5sO_pwJ+WznIeySaICDYIxI?2fw7H8w}uL8<6@u2HJX$#RHO8DgLS%Ij3i=MlX zqZh#`r2~?l^xQvfYhP|TW$qy6(9-%pWKrDV9VJuqVVUS6EooOT4k-~&C2_p?kRIK#xeYBS4wO^0Bb)E_TGe_fa9n%Yv ze}4uEUaUz%31z6ToPP(8)w9k&f=kV)Ik-I1z&qa0hh)v~0Sqj=Vb}ejjtV$ZPEcLf z-Wyfb{Fe(rohOin+}vtIVg##S%bjxxs z*oIRsRB#K>b2hENyXG>XF@i4fAr>!70A+u=KWJK21h^E>pDRaBNTzbGs%dM$Ym)u4 zdj0b3_m=~tCjf=|r1~YT6P&3;RmZ|0k!jZD%bTq`Zr_abQr}lS=$@0AZ;iB_5)VnGF8z{ zmlJ%CB6^(Z?c|Bu=#b;; z*Pu_I0mcS2S1W=n#FW4l`qZ#SJm)fhCq4lnaiES0eqEbJ{>|>I19kZ~0%4y(?{xwFZWT|Q3hc4% zF1%}DPHg}9*~(?Cz43F`EKvNS<%O@ee|Ltp9|28YEOe7Pf^LNUSmU*k8yB*&8*{H2 z$K3}T+jJl(+YA>5PUak3<-O0=@4orS0_>c}fO{af@LN|mdxq+%jM-VJW{ zCMlHzjeinNHCVzHp;*TI!!)M@(q9Gf$FdCh0nR8e8QTemQx(+s5r986(Vv%v^oYMK z5ArHV1*z4nDcR5ofIJbv1H(H!MjuvR(>N&5F$ce^Z}?HtH{IaA5cJDhRhx)ygJH?Y=19_STW-KMNZQoN~*HEK=$mrH)fp zJVsVLW0ntE%7l+>Jieft0}a+?Vt-A>)f{HR!A zv!*e=h0_LMc$gZ9Pmpk25DvqsXtBp2)#jlahJaDkh1hk1hZK<(bw~5*P+&I3{1F`T zi9AClluws8+}=|G&O_1$6c}lL)Hb-`p+Xkg zo9|Ag@cXK@`#!4KjA{8%2+KxHOD|DmSh`)OlrKEbb7%XJ<1|ix;PZv`q4;ZLdf;+q zZ^*{csLlf#LD_WfD$)?e4((GVP=j|;J1YDt?(@%R-C?I&OrE*7V#mbyL17>J1Q0S{ z-}s32xV!?f|4_v5U4u&RUPO-hFcaP%*NFxc-EGIOq2)&o! z$XUBNM6N9-Wrv{g)yS@!pj<`MA+&6~YyW8<;THf|$oPg=brskWL>e|t9`EE>wEO$DL(lJM*d;GTgTulPHTV?l6F+H2#;Uk-~UJCEa=A9D#T_n)3A0@fNo zI;17Zx^ljfBjdfZYQE(CnZNM3+gy~Rqv`o}RbS>vgHz6+{`^kvo!9QX*H20*h6d|( zpe)_-y9bT4U8L0J>4s}$sLtm`;7Vyr+wk^jtVg+TLhv#D?M=%5b%Q@aQJsV1$Aw6& zN5{{Xe!jVjObSy}Lb6OR;^f$X`$mQJWd)sI@P;rfJUq3OMfM{Qs_T(7$n;c+y9$Lc&|;pKeQoyRcWvdQ|OU~+%1!8@61B0316t1bQCE8h}#Z3joV z2fT)55@R-)PEisJ&haeHIfGTizoW)HLDD&8!fZWu`gphKYu{AW7&dc%F!#ga?HC_^ zYr9v&PJ&C^V&$HuaZ>o z7HPqqR;$IZ$+uT!?3NN&BzQN_lo#ERx{kkotjTxbL@XFN?x_fh`W=lqovk4KY%i1m zfTsMtqpt0#o3H9p@D52_DIlF~pZ`H+ zHlZQxHsh$PYJ`2Pr{4MM@Wkzjy6G9HE_(83BoI|Lj0i`d56LrsSGu2#-#xT4L{0=>$(l zh=3KU2(Rq7zah?xsPeqJu#x}u^ZvQ;rUzTAy<0!joN^2^Jw_|i>rS-EP|KTB*z4#V zBA}N`%|wC3uxha1YX59PJhXNrd2DXF(^T% zqY*0TLbeTcq~jBsY=d=*Qx^GVY|S*#CF<_*oAX@T-Se7WB=P=hXm5Ko=C;9ZSR9DW zBFiZ!G@)oIF3RD^*Mp#N^NGrCk>sa4xi0X8+r-K7yRtXOsWo24>X*(m;5zOX(DOwq z4W686?oM4j{qH}n66)uByWF0BdM4@Fov4}dW>4B*r!`%6$O^7Jd7^w-Fi}?{E0qD+ z_KZ6cB0hR>9ur4V>H8+!#hNLm!LTeDTyXUjLb`}B=Kpia>B00~$*EH{#H-T?zz=c0 zwHs(s4H(#56yn57dzfMBu*&cMKy<+M~n$Q6J_NR zljcZdo3H(PXMLHk{jU~*FS+cdc+K?LvgqW-9Krj>a3{v2?>c%bD}1o7f}=Ox3mbaL zh>fsU$LuFr_=MeYeri^)7Y#_Q*?(G}`c2RlnKhUF;b+E3vI3r>{^~spb?WtIk^9=& zP%C*N0^UVwD|zhV<^3)c8B@8}U!gO_B)`r%{E5~dU+8O`;ic^DknSh?wto31af;Q; z2|~TCB^i%2`U3Ki&L7A%J2`)Pi6=})6R(bD z&#(wCfM|h9Wqh`!{v!u&x?{0rdqq(Txaw%)wMRJm-p|b^s?}d@U&thu2^$jW$)7CX zXEh7TmX(egdKz08oh`vP<3IY#`sum#^)-INX_ea+ulEYiB(p4WpvvCwb7o_{5W&P1 zkhFEz9X5lcI}w3V@X-0zNT`aiUiW-=QllbmrF*v~y6AjkE+f+L0EIy>cnS7ti!FCv z#|Hj3ckwbL#-4pkBf3Z_>o1Meo7d?~=_iOT_OR0(CF@Q&_=-2-e5L1;P*L~0)!{)Y z%(IJEzdj$O{smx}R@=e=S2 zTb7YXA;TUnW^e3sjhIWLEdD2*HD?0b5ZMu)7D(EkhR*3gW_TUqX*qeA==|e@v-m>T z?|pU33UL3IhPD2dO8zn;p{Or}SPf_Fus%KGx9a#JmoZ&CkB@`8+6%5$T=i*ecarm8 zOlfC})*ARV2iC$4tN3H=;Q5JXpJ%JiWcMcs3m^kJU%$9xl#nj@M!fGbYMxGiLg5wJ zVwKURLv5@Jcw?5?kDIUT5&KD}R}b>00^Wy^*%k)s7apu)o(6rNLUV-GJ~ zk$ximo$bUe?*r+*Gt5@5cLkX^uy@6_f9<-VQ|b37*#dhJPUW>EwHyEKp|z^yJ}(=q z|B1lfPD>l2ii4)1c07F}UBud*K~Q4EiXT(1KKAz-0K=g$u(v{W?4L;h8QpOiBj$@C ztDkn>`TV$i&E{h+k%YbR-){nw8nZ`HqIDAxf8tluj?k}ZG&Zsq^>7}sDP}}%Wd;6s z225aK)AhR5y0Y^XX#p^3k-xgaR&U--^2u*6usr|SE15+zP~Q0NsY@HuP3jR} zAtYvR!bj^U_DK7#m?KL|{=o8fBNT$>1fNelnEMaU6q2Uwqs$0QCh?`wY*zT(+LI_ zw>(6n8o_8Tp+M8(124$0jS}ldp0;X9h0d*nq;H z{4=@6RCTIX8AD$$I27+s(I;{`9QGRyA5Z++xVKswn51~q%Wv&3Bmml zd(UZ*wZpYuvdp%JpI1x2KSKICRFfKl{?C`~;6Q^6Vnq|p~bc@Eh6lDxm~Ti-HhM_&cOb2NQm4`b~-gV}_`&go8&V zLIHdKp$>S?OOLq7s@BXM%1O5NDQA}5lc+=(tp-Lc@ft^;PCsQEE^N3y`2)ICaa92b zM8Y3IUi|AMQa8CdSpVFbJv^c9scMva@{>|K9djgMdtNx43G94;!FbC~^@Klqw!u{a zWdB88A6Hm!XyQI-uDEdqQ?4I@d^7_!ja1SJ)<#EGdx4e@gpfP^7gcN?)vvw%+IaN4 z@O&vLqZw%-ug(T$uxcKDgV)iES4#nXf zRvfZGyt`cp|2xooq3t%B5Bm51C2sqqH1e~0D^0;w1)osFas*^CuA0wh`fQ5lay4KB zfqHDMh=MfsiZmWho-(m<3@wVKV;cU$kpQ|ykF@A-R$k!>FP{jyduqJ5Hj_-ANxdR? z9~*=?`i3xH%aslhON1(DoHK;poJKzC6Vq8Yb}}-FKJE4-T4}gUxqx)WS?(aHAnl}r zFn*Cgcf)O@TDL6vLn=@-ecC#>+OY1+H_0+KjOWs+GkG1&@{z#fql#Fz`h(5{NW2O$ zT@V4?n<+7l3mIPtMudYJ3rMyRXgA^)sJo(YLafUq_zs*NYt(uBq03IL;oygGX;M)T zZK}>Xpf~$88d<_CHy_3ORiwo!z^n<(`m;wrsM`GGq<*9f=&45TKo z=VgR@9daG*qWA12Bwe%GgJEi;XRP_VKi07C8Ap?!=aM>>Zq%B<;WH425BLLqeX}Bs z$x!9q)|T7I=b=BdrRryr>3}?x1me1MZaJ8=#;?h6<}%;-Mlp8(qcokq>3wEIRvbU98}0^|2dWwI<jWBZTQ{i z-1uA>G0;Axw=x3J;JLMaE(_HD*_JUCP8ZZVT*|7P9QZ*>^xI`_NT6NB-pCJ|Iecnl_>2Mx!AMT>NX`RH@<$8~Wm zTDk<2cnr-^%|P&X0iBNRRUHjkeRKHprH<|}pm!CL+o4_EsFzXibLT>EEcl3nUl~xL|2QueyYqO zciLuhau~Fdfb!crF|5_)-Wa@Pg7G-OVD$-ymCNu4iYe3Cia>XL`X1qDR6Mii7s&QE|ad(Mw$>`dO zKEGQ;LLz;Q0A!6tuh=o$5aRhHUw-aalBywpv%*>>(t-#TI8wNa2z^a@LTraOlz-KK zs^fa^zpALFy+L0=%7>xwssbU5M+{!0DS0C3OU)>0VKjn3SqeiZsUh02Q)2(3pmMr1 z{Axr1+1*l)_of(QM;(LY1>jalM1X|~Dc|#Y8R(WNtl;l2|L+&~)XfKMabHq@n!(?y z*&JUYx`hmhJ%rK6OG5`x^7BUN=&=J#_AdQXRGhE+Mc#f^x&Q&4IjAhta4|x9BTkXJ zV;`ebY>R5mo>_cb5jk^~W_O8`ZS{IHl+lgY6hSzj%_^?+D61uSZOr|tLsTh|d})n* z{mfoM#6-@RND6tZLA-Vo$X*l3erZV+oTFyL0l~)dRcP`!MTL!7-{22q3IKIKEHFq< zDGFyCN0bDfl1lBKwLKiJE1U4G+Q_@Nm`He%Dz^cBJGr>q3CF&ku+S$ zVV~YKw%Bid3}80q3kaeaeq~}W9V~7Q+W#i9v%py!X8WhM9!^LT^o;|3t8Z)^+F%n5 zQ3W@R^o$jMHhVmz#4`E}DGC#=R-)+aXpmhG5SyApuGE$K9K#eIsiwYtq1^_@eEdmv z;VpxI&91>Yy8#0W22)UO6%+-kj2gtI@khyKlCNJFy@hA*{z1eEzPTcN@dP#6FX-xZQr4f#pzJ|Pa515foa59L>zY=bLOdQ+PCrgj! z;Bwnkl{}Xp#3omsr$r+G&>IPy&qwcKQHS>N z2;l}%j#ff>EIwBvFzWm4nW!%Jt4u6woNhvXGZM_mT7fUt>prKEk;pZ`wUR+Lh0Lbx z+NPKM=r2eoUR7X~MXLnf+q%)KsTc|SJh0)4=fv;}>)6Fc$Fm50(Irl$?bLx2$sr$) zQ~&kOoUfc0!L9d70l72EG z&ZIsCwouJC#2a4L_vB2%za_vBeZE5ZwipkwKXLJNTam#v_vcQ(I-A^xf=NFa5Jo_f zp2^5@J2^XnMO!|d6<6ps^_fPfyA@TZjEU>K%o(S%c2ml0TKz&Oq zLYXe+dzxQnT2Aau;QJ`pK85E$ZL#R#64|67fd*F3Em(B_#zy8>YmSSLi-dm-AG+h) z^IupWojxZbu8}|A`!)vq>1wYtkpw%zFWf1=epF&@EuISnQLW{RC>w77?pFdBj8($* z$gQg2DkC+U=8IkO776|GQ%mn1gaZl6VjHcQX((b4q_ZCPx5d9?Eiic6uX|R2 zOTfdZfQRs0D)b}I>uHx}dd|5MUUgw^w9U`yh;u6)yB<{M!%2 ztJ?}F%r#P4lO8e*#@YQ99foC&qN7)`N#z5)H5s<>79Y|%?8)%-H|tMK&2(W_M7+1f z9GwX**rJbsk$PB6YTh;yabB;aU2 zx`bjWNb}KNBk92J%^dK5tyU8Y2uWScf_r;3$OM{m!-oIH>xZ7NT;U+k-u})Fy?DC-R84sb|~iYtP^s4 zCTqC9A%I#5zs&i+Zw7;#OjR&*e z;LHGDBL9iC0=KEK;*y%l8@Bnzb&(^C7I0z*to}G_0)yLg7CEXYk9FUz&rz+kB$P@s z3Sv%TmNJ*yRC6_bVVs>^K}S=NHYq*ilyvn%BNW($XqsL#Re*K{sRv6J!qWD-lnHE> zWi5WQB_LPE#0idYpM7`#t;BOI&*6j9WIvH}Q|G8(Eg=Z?6(!QSFzN3woL3BO)xm!A zfX~u5b3%Q=&hWyT^XKYUR1-NBaj^kcd$Z(*CQ2ossM*YlU^2YM!G$hfCxpM)SPp(g zBz<>=uU1hE&VPHchztq&FBbsx|C3Lna4AcCf}&KvfK>6eqn9ePlU$W&t>HhgL-6mJ z&NEQ!7^Mw&=5ITqCu#DW;O#g%d&v*^f>u(iRw{#rMh+mu2lRq>$)?V^itqXl61E8>6x11jESlMh4Kz#aT!(?P@Dka{wFSa{SK-P(CM_4&g7{|5ho0 zn+si#W{ceupfG6mT}O_ybGYsbqPKi=NRrIn>oP#OFX2%vNuok}8|zlE8Mr;#?B6e+ zS{J8nd%!gQU_*GKI+`(Y`>{y2m(VUH*6G>y^K63`arqj=a()Yi$HU>}cYQWacCB=kWw(t{Y3~-n{ z$_lifh9eMI+VO=WY*z8cKxlLk)SePpkGXU zcBN^zlIN;`!>826Tx$XG;+Ii6V3?ku{NT+GB=|H9a z(AMWX9P&tDnS&|>kdIq%+2Y~jt&7^0d}^0>1>){LocW-h5DFp!3dvs~UBTijDN2!p zIrpS1>|04a4bLk`MLs`|P3=DV+Rz}q{MSMMQTsh zYkfa>hI!j~nbxtjwK&1Iup&$uKX0f>7m*U4*F^AY=X6nU`a~wn!F!JWx6MA$`&~BMIY<<&U&7+K+a$mZxD0kfRAxUHGD^7I;S z{RQAeT>)CG7$K`a)HXh>vs{uZ5XTOt^lt#r0=9bW(!k%!+1pOf)qjf4l(@CO;XSmR z>2p}?Yt+56- z1`k*~HQUct=Ep5N15e@o#1fhO)}7f8;pO(QccJ}Ds+(#IGXOS$5Wzv{5{rQ|(NCFY z?vAtDD@5HbK%{y+`#o*P@x${*`zh%x0fk%0du95>@1qQJz@mRG5sctyAG;GNcZnV= zX(~CDq|+l;vy!qr7>r0&(01DKKAKDZcF=MWd60-KjX{TKc^8V9=MBGOIEwmHwx(Ca z{K9w#RY5dByReQR^I1d&8l{r%cGb?I6*Kiw*Fkipb`LV?EwcGP(`Hh!XjYx!(cvokrj7HX^%K95 z9aAS9~Gz8@=2Q_+se;*kQSz>juoRn z-E_5{uil+XD`Fj^MD>}$k9#?kRe`_`+>pm5cl3ppYRvAwZtYudAg{C;xXlD3Y;SI_ zNLzM~*U8v~fk=D|GCf9a^G)UZ!_!9<#*yT$d$& zA5^}UMboX}8v*F7_rAW-(`AT0nv;EhY@-Vb7vcDq<>8-E$Bj{f`j&d~_151btgMlu zkB9|nTFVDClil5^uhsYcPF^}=bmWN=@D&1TG5IJWwnWO-6qbSP#gM(kwF-hdlrvhnvf!L#?cW;cv53sH!XCvk;o=F3Yo#-SPM zcl40~vH_ks#U$$j#2NPXz2xUxt18&RtQnq60*xf`YDv!Bv;Sh))6}|OvHRm+$GSM- zT&AcH6~Pq4Ck|%HQ!`#=smt!^T~dX)h$K@J=o3>}LUns8U48viClg8u;@;Eir%)_j7!LR5`|}@l)=NgRr*GoEsex6fhdP?4 zUoW5c9H7j-N02osZ8tb1RBS%TO`lEG>ES>oR5An#SWO)4?rsP_2@mGB-D;j3N8x|z z1T3mxJ?_&11N^?gXTlUYoOh7fpG|Mw-mK_e$JdP%CHvv~Li86g9$2J>>~yq12C2Kd zyB3At(xFKabdobQsA1>7e+KMNl;&H>g%X5UO=D}l%A}cD=i;Zj;akhCEX~l|K0+Rq z^xgBd`ZQBgwPSe(B33%){rnqzkIwbY1c+g(9_oAa^y~?F%9m*icwA@eZyX zZURYLXMNrhK_g&yIM@vh6}C8eBWrhjq<6|w#Z3*Uy>@%z@KUnk3XP=>?n-u*GV=1= zg^|i0>?M_2ua*dM2`OCl2zxnM41#SjvIaBIDf^|AXE^2O@-0x`*ZPTF`l+!d zi54g<=1dWhG%?ttJZe53dF|yXF=f93l9*1<17~^7KMPYoM~*f^lV4kewp^sYAruWG zI3_Az7sb7xF7CtL+cXFyoo^X}oT)YMAXGSeUx=@MM>S=_3RZk#l$Dy&6yfE3wOzD` zU_tYB4CppnYvs;!TNm`l2d^p}-S#>$c!r%#t_f$;#q=JV-mXPVpRalTDMB#%hgb+A z)AWyJoYi(8lzYv;HR&+_RdwTXy2zPJNpyG(lcgMgg6;4Jub*?l5Vt6vfEG* z^u^50FCXu!Q3E&Y`X+LdQ=DYB(V48>*(dx8Rr}`#b7Kd!k);82VGrz{F~Vj}`-=mD zs6!es(X#xI-13z`FR9*k_IA?d-?5){WfM8H@koi`Z@BL}A;=|nak0AJy%7H6dh4NZ zW0v-y(+WW-kW**f3{|YQqXH93r<$)w^-h{3uuc3EQS0AtgTuM4>N94c7dxnVGZnJo z*wC@wI@xqiPpGwrb25e{YK`fupemxS2a>hMh@XlKXH8k04Sz*-4N0*rkeY{Uu0PC$ z&iRYyclTD3T5=Dh*JV|Eh5LLl-z%pUhsO`y0Qe}OvmL$`F=y#D=^AF zMYOO0p@=yP1M{BVsq^LtW4F=6ohl$q;8O{GybRIwihgf)Q?QGrL;cDhVT zpk4ZJR?CIlPDT#vPg?n|@2iDfio53}~qcaaM?{5dS+aLah z%zKXMz9uP~dWOmgc!kImk<*`=yY-Xvu>e{H-^pgDk7H0GZqHtBS#0+Xp6)W)U41<* zt|nGSDC!~zZ3RBROZZ`K{9{?j_s9e$7m#}2e%69h-W$0(#V^TzJ{4M1IN9G_yjbwq zy?Lr2Xa6a1>MxJ$A4DML*4o5ie#P`|-S?bKXb| zz>u;JTBkmwJIk5=!5#gMy&&y2`rV^=&m7x8LAK_9)}V|X?38k!fzA$O?OTGZb(f1| z0$k@eUC>&uB)DDVJ>?6wyt_VbUeh;K#dHPZ1RpfZ=ny?IKjr|l49jf7sl{Zd$GEd> z!jsV%pr1LSddQMzS2n_)s(c*r2-u?HaY)p4DOGHF&T9t$Dji}OLP@PNnw3qaq_`ImJeqF9#_(ieYv*SJ}{ zo(cSAy&VBAp5#U!da*BYt94wVyJ8XHlK!qbjZ~()?*0U8CG2hnD*V=uMik)JZBQXT zZ`15AH9{jX^$_<`tvk59wf&n-0@71Fy!?f6QZpYrt~?yEi4e4jNhl3{1a26S3Pot= z3WCnN)wP?dVfS8$m^VAY6H&ULk^@d-k^%4l%DQMyVLaH7mHI}wp4gb%TM0soKeiFb z^XXN(>(Z}2$!6ZDP}{lcZYRf6UVu0nbvFb3GKFD~vtq3pJ`2TkqnD8h4+6$D)`b8q z!V`7QL@rfe!Db@Dsp4yPE%_UbwJLcdXJ+ILoq-c_JTcs9B4X;}v5hS9S#~?!)|vA& zFAeyG9<3`2?8QYOcXl|s=0Kf$+1_wwDxV{tM&>EvW2 zjUKkViOpq2QR>ITYH!1HV-3gp>&#=TE@I$73BeOB;R%o&Q+_0z+)3q=%FSO|S+)(g z05p&^OAx@zNR|54Z1`ga(&H{DTASiW-Ez64m@W|Hb@6V1SMVa+u_5xf3*-<_%o(R5 zW!yZ{Edl?}vWT?2d1+E1in^bD`yM;k!&MLjQ77O`FTXuz_+F zBPz-6h}eZ_I4)~lafYQ+76Vr>ejVErR$a|{hyB{prp4(W!En_ zft+|En`i~0G#25P>m=8k{G3kOXa@4ch+ppE<)_WMrWcUq!TzJGfA0bI14*H>h~S+5 zKXZsGEepWR<9%!I+wsPmvbB{4dB3!!tt}f34@! zR1oQx^^|vFTNfF#n_b&`8KJPOV+)r^H}1e!QK$95#n2%5(DbgOW$^LRIwbCNxDBtbq$cNsrSK2Uu+rohd%-#j>{f7e9 zm-boAe|8~0zgv<<+&!7=zvS{1POX&JDXn^=aAZCij3}Wu+Bkk(eDO}EzQ!m^#}gRh z{z{ly?&iJkmd*#>eWrkL%SMjUzklxQB&bz<*+^qz5LC(kP$RH+C3FV*zMgzj6Zn9* z)d3FcpVpstm{bI~xi`_eT}m8PLaF0arSHFGhT{x{9U? zOnrM!VDLHSksrnx!=&If2R&uUK1`@Rxk#~)6S*0$t@}_z1ob#~pT~Ft`iXvd+-a%d z;EWVC!hUE!r^;3*Smn zA#^&-rNEV1qIrJ}yw?6l#5?f2CFPGR;69!(6=!z3aRx=Tn_@ut8W0dRsH;ZGo%= zxW5!5O}4=F1^cW@SrfA5?|_-W@P3eGs12&rk(m6nVXRYP2Q?C-kpUmQSA5EdJ=(T# z%ihJpG2t;EsvthPH~$HPH11n92l&axN^IL}sLe*smgl`&DRD$v`VBPF$+`&tKf2xn zD2lB89$wdNPzFH}XHW!G41hxr1eEBYh@wcwAqWGAArpYhUYxzJm)I+_Zr$Qj24eKjvhXoO$N}9I2$2d zq2HzeE8>@PuusF?`6XCvt&s@)m!U5+@tknGljR0oLh$)3Kew*;mfH=T3xSR=urnKu zw|O+a<^ZU=()MfId?1AsR;iGQstEUkV^(aQL1ovB3H!jB;bK|)tMjJy*t@)W!xZ!L zAsDTozcFflPAa>UjgSlfM6a|Vuz@9EDssle=X;xEW&$KBYKV-r^UG>>X@m)+Q`g$f z!zy24v)!;c+~!-_5xL}V8Q1-Sg9cfqOn}?9+i{G*NAedqg}1W1>+@pKfkN9u1vw;j zV@sv2Y8&t6F6mK;Lx=N#mI%a~8Dwpq4Q}N%?g4WopECD1MutCdT_@fn5-Q9YkQ%%Q z%GBe?HSnH33rw!-0Rj5cjj^QsE>0&PY9723Dn02B4HPopWQ(YVI+W2oESMaCkIquq z6V6@Qa^Wa$QmY%YJlOxDqx!`NFFt+*=9^CDZF$=$Ea7^*vqTQZTEvF$)OJsI&9(4C zy1+yvB>al>Uzi$|5Py+$^NqbR(rem4`ecYv6z2w+dQ>8O7vvjeOze+O?f<#bhE4WO zaRQaM-_DCj1#EDq)tIi5DJ0Rm#M3?_`_jl{8^l8CV5Ch5Bso$OBuFN=+%1;{RF2$* zAbdRk>2qd;xvGZiAT4f)Wa-Ry1!HdSMui}Wgrpuk9yhR zxbOn-0rrXG*CwZQS}b|o#!^K4dR~5z&@G90dIy16d;8&-C_TLyxpjMtVoKA^aqMBD zWp{&7OR}gE`UDj&6(1)|W7wYNrNK<@r??3B0`a>anZqz)OXQZ*1C} zj0Iu^su?ZJ5o;gYpb*TVaht8be|8T&`~pEaySWJ&I#2DB23;+9!kVzO`9B0ztdY%u zjqDzrK~`Jg2(k%!uG3*LkWroH}IqF%GVqKpCC~UO&MGm1Pb$z zoeWy$WVPYHvIP3Vysp%amEEl)hjVqS*YbXd-A6cF@4GU=7@W;%=~%qKfkxNH!YN4_^dw;AstUyjvne zYc=OfF5a@eMzkxW8^K5ij>9&B83O<*tOb99M{576W4p2XtA#~Vg%{+q!Knc6L5jU3 zL2=c+_;p`F=YiW_p5?jYGfufyMPT}~zSSAbI3PC!Ge*D-ycYnxxyZO5kKGEEIh3RS zniW-agD9L2Q{cYiu`Smp@(j2v3bcpw9=u|}^KCA&a2Ks9;8E*V0)TY&05oY6KpMEO9dEn&|swR*>1TyrK`PSXf!Tz-hQju2PZwz?Q}7l8WM54|DTk>`vu$wH)5C8=+%utS`-0GJYcL9qZ3 zj-nZrVCUA8A$%RdYKp}-54dmnygT1T6tYzlV`9hfB_t*Z9nP9q?=yF0rM*2mrqIVK z;pP}`)m%$b&@OpZdc>-v`NRFh&1^e^5xtMbV&A^&V?CMld}fwPyBF?ncP>q*?bgeZ z<$g;N%Q#VT>&ve66?}Y)oGCVVEm=IW^e&^8$N4dyDI6GbXsVdjID%s1Phu6U(_~jB zXMN6av==st-r<{e9{bd|O|NBL7QJlle;0$#hNZ)9Ach_Av?J0ZlT`b`5g)oUo$}p> z1jZq%cB3W2gs>4=&DjWyq(deiMO2U1k93TYSr&b-)U$zTQe(UG9zx9O-*hnjbo}uW z^N%J94hHhBtxe=W0XASMr;UW0-{H?HnXU)I#YOTM=%(Kd3~vFhlnCSkLlc;&E_m$i z>Z9oM5&9KXyuc3p-6iEuRc@da^aq0`tqvypx$G&i>a@xZxh*^R%;K9L(1~5+H|qz^ zT)@XNMz486w`=<0WHso&JcfTXnN2M2nS|3uTi$olJ?NmInJLoTn(2I9(|1?O)(d+| zJZbGvq~uq9IUyUtQ?Hb{Z-6lkdUCd&LdsY(10!%x|MqB=ZUIBP6Fxn%k9{Pt$dzOF zNBp_9&1sP!xArjM6{i;kH*!8QqCb5OFj$G9%G=Dc@E#PyQri!e!=?$M0LrKG?jMyd zRnRrC1HZ{ooVa!!5Hz=oz$|hV;E~I!#n1i7?LzAatFYB8KkPv}9&g z*3VkkaQ1>;-4Nw#=O#FveoxZ=>whS;E^>4B`QBiri`2I3*LWj} z&GzDLx={q4L~Gn^K3Ggj41xYgnj}QDAgnOa`KGVPd3Yh85}*p1GIUaJUpR_h=)B(; z+3&;pk24O%j(136}K75VdyrB4EjxBX(dWK-}7MoglCVvaTosRBOt zFB@DC20H24D`*oMPFBLFcF`$elTQZcU<0Nn#g1|4*rkE@H$oq^R0DAo-^~mdT^FKMIt%7aA0OE#GwW7`J>JW+7q>&KW%E+w>uPwu|+8401cIEoR^esrfyxI zSc<*CA49%|5i_+Y-gEV$$I4Mmt-#t->{-qh8+_7aQyWdlW#gZ+RFD z@8Dr`Geg#h8x^!WA)r>Iwt|R!h7~o9>jx?^I^2yp_QQ!fzE-;-!5es<55ch-@_R}K zi3Z-4$##O6*8^)_X?%m4TL!%bDUmKq>^5vUdXPQ<(Ko(Ud45ada zz+|Q#ioDLgJEI)0-^# z>7J<4OWVUK-&P>BlCM3@+>lVL&z<8B#lEVz-H&A~JLVmKk5}`2QCbE$5le}eyO?ti z1xTm(L&f(-*Fw%^&vaDY46dn9RsPJCdJU3a@ecb`xBT|hrb|9S3pKz%Z30}V{h_$w zoc#E63;pmlt-q7;MCHRa%rlk^+}_bCk(kEiC|%w3HiZbTnZ-jsm9SUrTSw$I6ua+b zAU&fIa`D&xBn$adybqr1>%}H+UY=QJM`>>`Ua9>QQe&xBg=*5^atPC{RJr3wC2sik zD5!{o)+Y(2{bAJYv4UwWI z=|@cH4BM`*%>^k-@A&;GJOtR*tO?>CKyT#+o@vGXEAac zGn_`sH?J^Alp)cC)yb0J#a!T!Vs2e^Ue(Ltxn8;w*z*AOBZ+4-1UpZuBXaJBW^#?- z4X-GLqENV!!VRiMr+C~BZbUKh^XL{Mt1eCp$A`q3V}t#xp@(Nh5tJ{Wg-7c|fzXeu zEWR>nyvCfp)_Fg!8zW0$!r=FHSv8uhP7*=ORU{;O={Yj3?)>y_xsM;ddi8(5z9bMI zMVWjxT#V zzD3A`4|2&y0z^tEN&yih2xCX}RGubX?@BrEcslN8@Xq>zvNZKh)LiUjj(SY5)FzBzeJq<)f;$&>5J{UX%;HNrj?jgyU`jVG?UITmZa%o**JQB zsDgxmm_rQHX=O`z=PgwOIXBhFmSHvSOt*<+Ejgb2TfUb;H3xCgXu7ls&@Q;C9rRlg z-LG*HZI|YFJ2J{GR z@t%B*3t;HXYG9of{{C6u z^|vpm-fa0(y%_)-+##&^LXleJ#Xx}mY2hEpsd%pag;tN^XSV~HQ5;lS2anTZB%0{v zOQ%4h2+Sw6kOcsXhETNDll|XXPb4jqig*tP8X^w7JJEfZg5DM2o8|sX=O!l_7=A;6 z{`w=E5*R*w{;kpnw3N3-w}vN^9Yt^cb7v!Trmoh*k3R_BTMXKvvyB zQi5x{=2Q1|#Fp;7D3(>0Xm^c~4@E3@fhrm(B*AzAhcIaIuMCR=^y0TyuT^PD6uXYV z>{|J{AZL!o+uy-|Eu2=l+M?Fn7M&|j^LJL?$P2WWX-0Xv-KrD!-@t-ZHGk~haGky@ zc6&CUp|s6F`D5smqB+H5!tD#UV4;ZGlQN5&7%`8R{^J|-lU52Evb$6p|59JDgS{_) z!7TEx`V0>rb6p|)7sE^+!sH%lJ)+D;e~j-Y?{{I0m<@Y6d3@^lWHp>u45LB&BM|P= zLU+54FL3Q6MMEjdZPEKPP1Kv@d%`r3&`#RSpxp|~W=?Eyei- zkG)v|`PrmB**`TBwcdR-x^UM~{HjSV#NPRE!L-lMuumoT%elS38pap<%o8#H#V(U- zAjdrrU3+p5>$5EzCUJ4?JID`p?zx}FnTGEiEC}W@&m1u&`b~)C>%N=`?!fneEkJ9y z(Qyqb0(EAqK-rLyc9YGD}_9O<{r^^_IDhgS6 zHFNofK*S)#0V@Gv(?!ycjfaBK8wt(9Rs-K?)1tb^7j>L;xU@2b3h z{7@TXb2{&O>GAQ-)t8lHmZK~RDT1fM~5Z_aE%p*X$Su^H81M zT1ehC^6jl9jxTuu>=`8Qktd}=$kgQgBS{vt4*56u33X*cQxJ9&4Cz!XHbSbk7LqkY zTxHlgiRod|o|4p6cr01eBpbMY2^gW66wQzP&{OfN0)q11k~lWZq3rMN=(B~yH zQD`&}cQ#wSuPKN!Q~gOnYf}8@rdxRmze0@2!oDq;iCQit?C=|3?ezSXAcaK>PE3Cp z=cP-sKA3r+bQ@bAW;C zRDyqWleOq6N(CB%fPv?*uFBgVj2*k*t$zv=HY^Xj;xk0|NA;A=(-h+H8pc2z4<^NCfK%Mna@sw?f@u~ADS%ffaB|kkHD$u7nMJ0A zndLu+1^7E7t{#%ysoA38RSkb7Q&vOSOa~Of;y!A#x(gdI`JsO*_4kWVNIu!r(Awa> z(UKdcP2twI*UU{{#YBnbKZ0%e<84>kJeq8WS%J4kFkR!Aqml=O+;0~PZIO`v((rWZ z9Y99=yS;{Hj2CcVuS9oBfYTg`(zF0e)R&#})q+t>aJr%EZ)@nWJZt?a!PGqR^Qn-& z?`xs0{qqB-KV7Bgc!1$|OPZFun|25wwBn9#bJtS2p|#YJXe)7}*#Nv-8LaEPcjkX! z4OsI;QmEx1yb&K++EWs9jfl@84@Vsb7%=>-N{*Okb4jv}K{2Rjiun=sO{D9)SH&%B z4W4e(=NJV(KD^ua+p|JgykE$q!Zz^7{yKsy8rZVv7#J9#iuSz^a5L(R%8Vhq`zrUe zX1m?J+3>~!qZoS~o81@H_zvum+zQt82uWvX>SG=Ip(LxMWRal;>!oL5m1SV62x5} zB376u_itS_9>B++^qT_2vKG~&G?~6H#8lE$gxDMghwG~R8kiaOuf){4_}F?~U+m0# z2A#l4rPCFIuhEv+Ht4sFpQP*s*pkk+UqsF+y?1$Izo#^RX=LJ%mBBZ(v-4!Hi2M|? zVwPiE!-7!UOqmdeW%a_iRMI6b9e$-;&n-r{;e_Xrq>#&D$s<36u)j)!JJ+iGw`VOV z(>HhLNI8BrbtPy0;+hC$T9tO!-hWbiKj(*I4&m7rQPgBd2jzuJ8busA!qITBvmMr9 zW6KYhgrTZcu?*@e!^M^R1Dv#V3EO)fSO5M~QqzGOj6D-+m-zcFzXabUgY$K-73AR2 zJ263J4eh~a8V`g77C^wT$iuRhgglcbrpkS{JitD&tgH5jdE*B_|7hF+3cK9!7(XwJ zKAlSxE~M@MzJ@NI#`x(HRrt!T8@7D@%B7=zhakZ7{TJ`H^UY)YG6*!Am-NzgR6drhS`ki% zJWjls&k{1OldiA+@tv+U5`e&tyrWK>8TM^#JJ-LDAN38_PR}c$iQz#Ec1FKBX%3Dg z3N5;(jM?d%TK7BhB|bfX(LR(6v;;&N9nt;P z%muQ(9?ha2thT|J{y)AfVBMZ@AYAMNOp!hij2Dne#)y%Ds$qX(CkZ9Wdf^2(f~G4r ziTN3>HQRLgx>y;MR|6gRZL|VFy`8UK^Con>f9Rp=c`_-4F44i;zGPmr6FAV)VFcb$ z{jkB2^7M7eN%CtlXM*y-N0|w-FUx547s_%|s2;`0puM#i2s*YQA{x7KO5j+TcslzR z&K~Yg%(q13Q9!4oX<3t9zrGujd+y|(s?Bw9ES#+$d*KXP1WLmuC^~7Tkh*dT17TpZ z(aGN5(Su3KrV2AmlMr{Gj5|phb1$Svb!J~}7{|1QPjtiE{z)`gx(p8b_HY^yW)Q>H zi(}7NX4%jG2T;oR%m?$iB@C)bD)M6eUHiuxM7&&5e&9B&ITwv4^+=a+a6G) z{X0qv06A>Zvr9}M>d05#jd#nu)GWK}b?o1?f6t&EbVNMFJXa=e2@q|MyQ01`rS6Y1 zsAq%;3rz#R5jHZf-Q0$`;<>hqZsQ}!XFdhJvg;jHHf`eAA9#pew-f06Oh(Bjlto%K z_!&JTddmOC%YSHi4Bbun&x}d}#@Q5H(*I_4X-0~T@uw^Ib~8XS)NlWlqBwAKv+iA3 zDY=JRo00Us(DovS!XVve0kj?r!!6M z08COb1NdRfWxbG2e;5!A=XLl{Y=p8+AQiOp(647;fYsfHuj%byFcpFNT&yn z0|7D$lhIN|Bc#j2m-StwhP#hV{P5kGlF@4!v3g{zlD?M5?;D`uC0LFO=CkZYgVQ)= z_i9wPygPU{D!fk=o^MVT>4BmN(PCi?Hbwh!%;QcnR z`g4)Ss9g>&q1M~zi_^&Fgs0B0!}N*=Hp;J++|A$le;SC`CdB&g?8(sIzb-mC@!)>U z{97U$P$eC8zuSmd|7Pifym|&f1Y{#zMO3T?riRiA@lP2_Ta}oxC*rKC~le7 zQwjS|q-?z#zuW)J5po5)?L9dujHL-dFdrRk+e8z|&pn?TAVg9;XJDXW@wtdq{c63EV4g`~)MQ4xlf-FUt1-bD)XN`~|B|$R?xH}b zZ18%}DJl)?TtrH0ga5@K0f1}BJCOfYq1Wn^8c}83&N7AP{fWmI{&T-B^iC7Ri=e)l zV$H}~BQYXVgpt)0t0g%X)JdxM8Jv4QipF!1P2Yo?lsenL#8_~YSg$&t3O)P&pE46H zsPZJunrx{>MY_puQ|L8N@ki1*RLbfH`Xh0N??=6KG5yZ4{SIS`m&Dbtm1lB}e;bhW z2O?5hWafbQ0${q@uJjaA7AK`k>ZdPT?^Ud6JnzeNu8ye8djKDyAoa8GJCiT%a(sT3 z0lDx!?s>5T!Tvaq2zvp3I7SXfA!Xem#SLhOF>7pncIuR$WZk~L5;HxAGy6qDL5xAb zOaUOk4C-!E7S|Ui!+g%UOkqPM?}lV)m#3aV87eR{j^ieScqLfDifLO6xC&2%e3TC# ze5!0Sdq8Ye09XYP&#Ih>SXFZL{T&m79~6JGv6UKo4g!fhAVTy8g1Ku-nC{(O>9+xZCae(R19FE2tkvIw3H?=Jsr+9Kudl2meBC?z7OH#Z z8*9aJntrjaZ-m7d5xH?<^MdyJ=kwdQq!H;KiFVd}@y^qaUe76B>-&}UxboRGp3$#x z!&@EOif+BgWTC~(}w}aFf)3hzd$a@K#ZO(!Vp=LW-kE_FJKV^Gv@>@ zSU}>DuHewKx$o>e-B&*(0OqM6hq|UQbtUFywD8L8Jl3kur=`T+VPKyxv3Z6;z@JR5 z`1ysEt+x&yP}mQqCy07x7N=u3Tk*m{|R{Iyc`f>o<1QY04vo}N;z~)9)JBm6G94%fXsTUbaA z6;q%PlsOm>G&4V|brudKOfcE*|6Id3*bSRZ$Dw$o8=L&TTFwB2_MWVGpO=nn#%Q?e zvJoK#M=X*J+4I+MLth?fl`)+wZ_dao8j%R*hd8Je?4_*UAq?L>^Y$e0wv0`AdP=h^ zHc49u4_y7Kd?8jR3&MF5f+q9fU$yW;t08Y8c70wZx91+18uwm;fzZ4Cs(vAoMK05OMKdYe(*m2w49ny3~&Idl+D6ffi_lhrX#N}zC6cuIF!)b&H* zQ?lK8A2v*shOZ10dr@^?^q<}W-d{uKfPfFfL;P_2B<6LSBD>&DY_h~dpkD&akPfjs z2zn@MS*x*>(}1|%B!7lmXGci~R=*Rh+fa8$bT_~2hzMhUQCh7Sw9@($!x)ZLf(TYy zh)0g_uJ5)M3#BVe*qBw19b=Q#o_+S|lw$G$~Y0;mOG-@YtWb8so z9=n*BkN<}^!jGB=#1CfQvTsd1=e6h7VA8IaDS{T$M8XSZDYfBcZf#prt9nTA4(4@V z`7_8gP+3EFif|Jcgi8E!yhy0Rdd|r79^@w4tI#0LfH9C|3F|j6&B5}*@o!A$9}V}K zbGHqiu~mWI@#3tQXC|~&#-@JU&;*Dyf$`$sJ+Bm68xRt*2T!bPDi;Svm^6n5Km`oL zwId7AaPPr#Lf7f_sLi+nM}^x}Zu}SvHBX;A;?^sJop2vnIhr$unb}Dm;m3FCxD-r@ zx6_RK1ON{r>wt{z8}1mFtq?8D8$YjBI4LPiK)#8Z{_Ho}xABn6ZnsmD%pAJHKT_8fy=n1&g82p^7Ol1KT}oHZz6e4m)4|_3w@F zZkxd0UdFoIq2aB|SAczIy~M0#aO~P2F{3fPQth~I3LbY}h zPRooTWgUDh%s5lnr(>#~8O_(7o8-p@AYU-Zril8Hx|V(EbAlYQ>lL#hJ1hM7LZ?r zU>4mU1Lo)Cp9~@nto27F{L6ec+Z%xZ<~zEH%wEBI_R07H-Y1Xu5ASmpJd!h}Rkrk6 z<6R-bUXVXPnF}D_sUUTB^c?@4B+X0Hp2-0aoZ+)i$xX8@vzHSKPqxEmu*N#oqnDoj zbE$yn{7rhRyEl-!QlAlo1gtgxps{>a@t3OqE3*JhQYGvk&#lsY=ntAfxAxw|XyU>D z1ZXM$n6@xsR&RYPH4e^X;KodbIAazB6m~yG7CH%nerx(8jFsbN!>HA;+ zZ)p1_3fp;^6iu2kQ^L@ak#K@t*H=zr^9ajUpgJM|5Et4vsOnA3c3MubtME{rc~*wj zisb!sdUt)|Zmt*nCE)(Zb?k)8Zx}?Alhw}2a=0;+@L)BHUty+t^lXx_BCLM^%yx+X zoY))*1#qw46zr)#;evXpqWY`fD2RZQeDH|Q&Tw8cqu~)Kg85%70M$?$+j{bqS6kts zPYbfnMYu>wfIPQ#U^FF|?)V_c61u!B{PfqkFN`?77JiQD3;(@6V!QI?+(FJxhE>MM zPY`vyeWGN9iM6P>k`KU;%HsdS_z)D=9l>d6T4|{*7c$(fEiGr48vtDm+7gbV7wb$_}-{xZ))#d)vABeBUs1(l1dXK}Go1yL3^J6$~rX&VVGlBC6 zlS0u?0|u$Ls=#Ppr6YZJBapTNw~G5`(p_pEAKNi{(S&?Gn* zRn##@Uz?ImQ6zpR`) z%~5a(urcynXSP8?6J+A{7Xy&K4uEp5QR|fPbbc2s@8#QO9#6AxhH6PL3f3Z42Ta`A zq9YV~UmkH(sHP2O4*{Of7gc7@Vb@n)5T8pVLk*zr%rt~mh?Pl9V$Q~k;AM|!yZ|T? zP1;0B;xy>rQD5Mf=edFX5QSxWWM9W_!_zo?f&VQlC*fIK$n9g!a&2$oWV9-%eeGvdE4bkh7yK}Y7RZ_V!G zaTCIL?*IYK)l)&C4v71k^KBnLI?Zoa<8VVjo z0^3TE*awXOh~f+Gd3~v#N?`mS;OC!3WyXGB>bWXaG#)UjyxMtN{@}>(<{-Bm2nvEn zB!}Vm0X00^H2b(47HFGSRd$bH*IiW!bBTte-fnf}b-weT{{;a|zxFc!`v9(Vvf3|T z3kV}A*Oa8$#JBH_icp&mW0(@qcC=1%`0sABIXU0qkbp(G5B9fL+k&PaOnz2=60T={ z6@P`pxt!|l{MP&I4NyGt2faY_?{`FI*3DgS$WB#lJ8S93&i{T}h~_*r{xj+1bzxxM z#+m)y5N|f0R}KM&|97;_ieUo4*Lf@~tY$Ox(gBNoZ;6+{o(}4uq(3NU9~u3GCfTC- zocA(xZ=B#glm7-P4LS*C4?q_6(5Y36kiJnFbrEfA%QQok5X%}x-o$J>8B`T^MZ0ge zs&UFWt&*b&H#$;p^8saKHPw_JGyb2qw#Us8K_yoBsG-H{EXDR6hF@YByPq^UT*AL2 zvtw#crmE*a&kS6QL2{p0DBrAV-~R2Ee~0O7q4y37jvL&Tw%#(iN~_NPd5;rNDMoEt zg0?l1-kDQkb~168QSi-rmR-p|g72J6k?8KbnSHnL{S@+ZcSi|eZPHiHHF+e}`y2ch zIx2wN8UTh2#U8G)_r-f^KrvA|IU@AayGbpdGol{4>0yE~pMSg(?zePh>9M&w_!V{l zTA7xJw*WAPo=_IDF4z7anQ>lf7W&DMA|08aZGx;Xr##uI*(I;%ypVgu zqFA!89Xr|G^ceC1)9nk_%chNTivfe9zrhO#$LEF8lgD4hOM43WNbTfG163TKA5)5I zZIsN^v%bO=xCb_b1svgc82ufPkno!Tl~ma)=osB%~qoG4ibgW4)AEB?p*;7I8TAJ~Q~Bc7k_(8<*L7_u&A z+@m?fQYnDlQDHmXZ@(@3nyJDhdj6f^GUv{T3QG<(J*hD6J_VdnUz;Xfeu887j0eyS zEs9y#`ZYBQFdDEz+fJG_D+z@DIHWP0DZJv}gw?x(M3~B#CDIdr{Rr$GKk;#1OOe+) z#hh0ALq3}f@t@7*t-{{+LiadY#NcfrKrDylg@}T}qi>;yI~gn*vJZSHtAx8*S{APM z4|oWmYOl^u@T8=iD)?mRdOUmD5piDISGwrN?W%}O(;W=~0DBae`!hVt;&rP>)9rt< z<_2#uhxoF5c068kGi1z*0ksvXmGJ7#fh0_09Q6mb7sv_04u@W?PzObe$bi?9vJp6! znOdjF;5S2|JUnoz?|OnoU4q>{NIaW7iI)H%fo9QG4g>%A_u9Z^oH+Z5LP|dXT`V@p zen*WBt7ON2pt@jNYZq401p>V}xD*B5rKfQCICrZH1g~(_gZdKK;A_13zR<&Y=}{Y0 z*teZ+Iga}!f{Qp~WqT(pFYSSq=>C-g?{6l&Xu4jbrQtCce1<-H{mG6&;Fe$q1ec${ z6(v~njDFM}?T6Po!28H(95Qi@<_ln@FZ8_bR#Mw3Kmd zTYH3V#^>RsVv1VX;K*kP5h@$dEAJA{#R~?JE5{$4^r@bykuGSf#=sTd+IW zohVVC^={h!=YxWeAlY!tcwc#xI@l{|PY8ouw1VSM0IhDk--~z1cH5 zzyY`j%Hs*bFL!TQ_mM#riW?(_kGF)59YnYV{Xy!e=8FsUV`l*Aed6qKPy%MB!q?V4 z^8V(#ga|Qq%a9pDT=1&8m)nwmu)+5W_$$nF-`v4sOQGU{Z=nl#Pp-Ro;BY0L?|GLN zeqIkrZPlKe`I0?m+PIb1i+tBvk}ch8aKF{ZQQQ>PvYo7|ggYig?LBMKXxgjxetaa@8P_@#KkC(}Yq?yc-8g7&KG@z2bRt*hz8b=SzQZ@md}zL(Qg6 zg#EyE+@wXWap27Aq^>u>Imod)7aA(Kw(`yE)EVshqF(da-9SLy05>(9-1~~w0QJW? z8RUG|N;)z7_XsQ>mr0yzYT#c!oUqt;x2TXMhZ*noORss?dA!@FIoJRVkipceJAF%1 zCw<(wF^1=>BSQKF>)aciyFT~@s-cOUk_XSW$*SSqX7y(8L(0HDv&T2Tqe+VYm% z1y)D$JVN>1nA^QuoPzZ10-=_3&xZ6KEC5Fb#F3Eoovz4mW!hV|nt9_ows)GBb{4=R zNObWavwpzX=gXLn4RILBkMb;5UX;qTvp48vx$toEY?&^M@YXg`MOJA(#!in8Hz)oBcyPiB;*yESVnULpk{KZwLgD1CT(TQ z+8C*78>yvd{;J?Psb^kyQZB{~gz{fq+>RENfLcBx%>u+_#`=!?Hj5Zn-FCKB+d1I1A2uzo4=CiFO8qXKC!|SAR0_&a9Ztb)NfR=4y?b zDZR}%Mm)&6EyH2L9?62Cjo=WqiiHrF!7||R-7CT6v(=CGC53c=Ax!hP;wEVbxcw*? z5ypK(k`3RQ>2+k0Zs$^0!O08DCOR)MmBVtrreTsld#rL_%7)=<1?jU$_HkT6*LxIy z01NVsTG~2`SKRY&=&6uN4FUt5zU~XBlQgEk0b7*X=Nq{3NcI+eCN&1{RP8|9cmh?0 zG`6z?ZSMdO@P!hZ+QuK3t6CT3Lh7%e0NK$^Dk?T_2VWv#ABPHy5Og zLBIe?Vx)X&*^6Kdoqr5<4!?{dnFOvzi3k(bF69Vk97pS$pu43vPMkiGuTG0cC^V@O zy~iVFIb^5KEIkNz6PHUYHx^{UmNsCCAXTngsL*d93iHHRb@mZ0;@2>V`aE+HQw#PD z8Um-1@cH-W`u}FhY{TPohj#rOHhHar>Xrm_6IONhHz4i?-xiO;U{sP>mfmaJL&GB! zphwq06?g2TU;EX3)E0Rq_osH`glnek)J1TJ0phFWzL(*o_!j;gX8;I^Xc!dOklVD+ zpI+toA^|xb6(EC%r$o7}GHkTzFYG^n0AaKtjx}7w*xW$#^C$oXM#g0gbUSKesx)i; zBHq-+-t$$9&3vr_YQ*Q)G@Z7zM%)KF#{2n{p0%B+(LfXF$^iZU#uk$$FKorRE)~6( zeYfWtFrpbfk-HXE`w%jDMVHtO_X#E~y%`=SseqB{=p5?{DkG4Afm5iGr0F|s-(4t` zsa1U0BB(=w($`8_$)(D-7MG82XmeM*Wi2|FO;zStu5od--;b>=0LGET+4vK}X(vLb zRwW-mrR{LCXoDL9#Mr>Cv0e0rDRH)-Y$B%HCL}a(G5c)#@^#h*cWm}XlmI`E0)OXO zR!e?xvXQ*(+{l{$Z&(D>`b2-YRu*HEMB3PJ3rifmpMh31?5`;18>~eOub&(pbwG&|wK^j9o#kjLwBB_JCL2f7_S2 ziEUXt;N?a%9q6$!P?x<1N-U3$=0R;PJ&(@*g~#(01k~c+Q%$mHDfCQ|a}a2p6v8}l zNTI)VL8MgTcfg01!$|81jM^xiH_Rp#Pm)yvct$JXkD?|8tjYM$G{cLi`Cp?Nu;8&w zyQVubcmeBqTh+^)vu;0_i!aeyVGbJskjgImB&22EzNB#jq<`Q3SQ(eDKDLD#M)RT- zs1`e>PzguFpOi9JA%#sAtu>PFFBp3l~UX>99tY0 z27QFeBY>{tX*$^FPdOk8tiYQ7*QQd#R!`So)D_PXI+-XBqEP2kxLZ!Rq0x~beSNn0 z6S=QTKvG8~l)t)!o0iuF0uyxVan(Q@13}AThEkvi;(Eg&Ovw@%qxlL`%Mz2tn{O;I zYR4=AASdlCCIWsrghDEv2Dx$6aNa>`THPgqjDk#ugQYRrA|@XqE(u2i6OnBy<48EuKW|C-@iamEC{L`0A*3yKx~f5QEl{K9Ys35B3Y(;j z%ZW;AqrU|)RiG{z-4@7{*3lyuXzg_R>#=KABeFu1(=3>J=Ied^jRU|7adSiOzb%Rt z@?zuMz*+&UvF+@HZ4-n|#I4I)ug`~Ago!E)9|Kw%P@~=A)8VDyJf5dTOFaW+e0mUK z)(bNSJVC*Mr$8vZZy87vi#$?lxUH1rBJy_V=<{#F3^q1|uCU{3zYf-E&R@O(POCz8 zhFp1HAN@oP#Mo%f(oNTW+tqf~7IglZy4New6m}ASzDEr^_Jh&A%QoH(^+)-xAwE+sRlCl>8|JyN)ZXSa`JR`7E`d^Eq zn)lj5z&5W+gkW%jXa@e5Xx9Yj2QXR+@=z-tw>;N*JC#34Vu>(x=Bja}{+f2Z1tuck z^Rn|u574Z=A*RHJ>ob~p{)d+Pbr!-zMFDnq>&bMd6j`3;dF#bHOPPnU6ab;YGBPPN79TPVNcFDG(L! z16ZNq*^V6%>O3%K|(vb9j^54IA(WNN61;&z+^~qgecS~XwUn3-4QKLqvuqyT_Ch4VBIZ&lKp=a?!%2M4W>nYG^T z#N0{Q{4q!s-72*PKG}UW!3w^_Sq}%Kh61ztjUR!RRD+%HY<)J!Wk&^g%F=22ipOpwKP&1wCn#k7 z^BF-geE^i@q2O^~@6L_&IDPe#(E>kHJq6B8pkEP9*rN4&LOF?rT4z%yfQOZ?-G)v} z4O3HXk*JAAMB+G0G#}3Mvg$8B*~aIXAIvAVhITKb9|;J=5&?J7?VD;!Gtu>(BrL5R zE^_*q8R5n(;mA=9SEG0vAjJDOh!@lEffH)r3Z%+wY6*~hxmYxo1|cs1il8j< zzGa(KAnbzL-lmu$$;L>5w!6UwKP{f4ZREgv-$89c!b)D&$Wu4{aAyZ`_Eyqmo_0sI z?c30FQ6MegbSgt8X(`NEjMtlupDpD*)%eW_D&GU${M*wYrG6|ke)3dfK>*WuT~!f( zXmT*=)FaRmG^dC52mt(92({$E)O_%tKoq<$lE#~n(7!1m-E*T9EH(e@Jr6$V>v*@m zv4ddJqJO=uiPKll{QkaAJ*4*m;hNF zdQRbXw}rEzD;O;dMxQR2-08?Lz1pNt`>XAdvuqu*+^Zb%_*OLLzklmBJk>4Sq`>`Dajo)ZBmxpz?or0~o9{`fnSjqNPC~D?pnW z+jKqA&Hy+w|1F1h`oCGdH1tcMnuBebBCS8cjc7CA&yD_n|EYoRXt3ake`r$$++g)B zhT*8mrXojJ;uc)ul{GC{J$3R!2RM9jICiJza#I?^AIcX!BaWbIIcdbRvlSd8Xvu9W zJ~!my^@<+oNEKJztbs@ zN%27Lmi7f~{GXb5)<+x@&}=wuW&$7hU&qHNhiQfR0_Oa@@_p(1 zb7gRs@rOU*QK8sYSK=n+^qnix`T|5&P~uDN zy1Bm$4#nrs1tZyP51<#A&v5z?2ZVYX8B$NbfDy(&`n=1&oX7qZON zHimQ`D|J_B7lt$6P4mhrrwudm^|S6SJ5QlC|_JNH7r6Uh9*12*vp#!T)K@SQmVC zP-fw=JO`+A6Ljw?hsQ-;RC(^^=OGa^46~q#%luNRH3Q(x(yc`uj9(zvRsTP4dkhy5 z!9S{buuAoLP75sht3lW94Ai1yx32Mh&QK10z3%tz_+zOWKjXZr>-)x#^7@>TO`vMI zh*K11{0vt^hUl%Rt$Q;JOb)+c$b5le$!HcLIvQL$9;K7yaMgxDC^NXTtan!GV^WYt zPEhJI1yy@iKUvt7q(DNxTC~03W^l3MzmkjZ^uMbK&X!E8y@y0c zr;RNQ3@}e^%=dRFt)2Sa*|?HW&)&$qCWH5K14FKXg%wZ1Q&P!qF)j@SL7i5Y@8Fji zA$6VE?$Ljaha7U>{AV%T4>B+>pbCkmb51F2g#(*J5`g(-f?;2QA;P#*!}Q8x{s6_x z=hv2n53=1Gc7_7y7LWY&dI1g0E8!wE4p#C1N_Rk}#S0`KbzNthcpV)>Qp3EoB)Iqz zY_x2R%hHeV`OI0o$+-VnMWEB~`2_#D`54~abUs+^bf2NM*))34`gAu;RNNC_l@<6s z)jil)$4oFKoI=o%Al2eM*R^8rs-+SL_V(M6~Z{XD{GZIYV zUQ{aEUz#TvrFyWcVS0WTK7{eVW8|GuyRH@zjAiA-ytGFC$p9l6jFCur&x5zC7V9r6 z3skq}YTF`Bj|H}R%1K)hNe%;U1sw~&XNR7YLHc{JtKKkqA*s6NK-joAR&K!$iR()W z<9TyOR?mPbSP}+R5sVB^J&n?P-kl^ZFL16+Rg;dcLIyjj-&6Lxt>yxqMzhUZr|;64 zyf~xZ3=i3=mamtuj6Ke7ixO7HT4|*nz7MIM(0RTl%Kc2r>G*R@F7r zw0%JPK3$gEPxo;Hm3#>a=>uG}FTJipy$IjXxuTjofsmy*R!<%Y#vU(O<-d|(3?^aD z#V?8&7j=_|(w8Qipy3t!@EO7U#obG8Mm_|}DK-bfcld zqqaW&>Co)S@Gg(q*2{RFc6Fg=P)!yt+ei8B$%@*2lY-#mmT$E)vtTBgU)1Q$`tag` z?YELE_uJJr4)J3?UW;+hdRKjVXFMf?AY&U7e}U@hik*!y;6&rKkrXfWnY;n!_a%Ra zl)*-zoBhSRu4j>jT=q{g^XV%iDg0(rqDs7C!3c#r-pc}%(Tz0WHYn6{C53Z$%O|33 z&IPeyFCp+nC`DS8q)@SKMQ$N$S>K ztkm3*Gm=HdcTx)|x%D}3F-)&E#KORVT;LnwAHiV6(9u7hFu~8CooKo6Lq5&yhPX5#m0|omUy~0T68CCOANhZzy=7QbQ5QCB9fO0Sf&)s3Vt@>xh%`8gfL64DJ)dQik51eK6dDFJ0@hV)1(DbhI#f^>)EyU(CL&vU)skMFy_KL(uGXUE#> zzSq6hKB;u|7mo<*NKUwwX01wR#J?x_Y<<+CK4Cc1Z&8k9E@b@HwlpTZGpe$=!MLXc ziED0uQQ9REavWc&DcG9ReFS$^5ezH#{gqHx{)NkcEnztTWf?ubp$24S4g0W_M^FJI^Rd9(pvxfAcZX=`+ka{T41|GxbAqK@DLi@d;NNQ0^8q@WiET5O6f{cC4T@tqV3=sLPcDHkv}c8NlIj7&|^sFF5Uzg zpr_uTy<-CECPi1t;0+L1u}^)s23$oEykhEWM&j-Rc*XyW*7%TvJHtyuLi~-B;EXe+y1(fmARwn#Ds#=eP=*i}e>9xQctv9b942U@0hnmuZq)B_Zqdwj=dvtKRu#*y z_}0g-E|Qq^uKw4{$hOoNvI1EDIhi%c`^yw^6=CClz3t_5cxdl)%(TT>;w-NFLa8mu zcj+AgCMZ~YPd-C!$*25FblO4v8jYt=D&v3O{0!F20?x6`Ln6G(ab3SE98!@pp|9HYjx}}UE{?vp2pr1FjhOXnI0I*& zs6}r4>%m0UDsV`Iw4R{ip?|-xL;mxH4@eWaRI=*d5B!or`>gN?TYZ0q^}+zcqM>!9 z`(}prF6kC!k-c-LUL5Dm?M5yem(FcsBCKXS*pIoJ>*K`>O0ZJNYQQ#Ro3!tLMph9{ z`vnZq(ae~|tL=vRQz!j*1Gf%L!S$Y334_(tfZ?&oAY4HA=$rF}HY2?WhXa^qEB1?Q z{jXLeR6`PckQ;o8iI4jgOG>D#0Q8Nhx_i%#qjCqhGR}ScUi^sd%6~T--0)3}l0){O z&MYREAA8R#@1Z4gHsT8sn^@7Sa8vg5>NbN}KnVV8_Gc2MusT!Ua>bKvc3 z@8!G(m_j>k&?`rN8}J_*Du3j6??(b}ZWeT1vsLt_8^fVv|J{YXAa)*k(74O`qRiO0 zS;3@nzn-n(N8f@`Q7e+#po-dKn8(qdK`->s7#r!*&T};z@JYaBsd^FiJ3h8XiI35aMT3 z47@c*|9oS=LZ`kTM2g;d;N)mjJgP5kH~hYQhHmoFDS-uV%wF|>fpk_KI~cyqmy8N6 zEHnHt@S(-^;N#gB-qHYI3ZtrB}v^?z#yLRrPx zi<;mk1bft02c29o#j)_62{s60Xr9yi);0bu1!8rt@e`=*$D{JNQYsHHrY_4TK7)~= z^iBJE^+wmpNl2EkaZ^YRRMs+wZ=2L#+V?^3=`P@!U}hEA6}?le zGmQ$%)4!wM8ueweJjeB2j3kh%2JgRcCf@nl(%Fo}rqz+IJstcrn%MFJbyrnmyEVtM}_GlRlO{B#P9&(my>!PFBNL zzWGo4DP##MIb>)0e>N*(;GpCG+#f`;$<2c8p2%c5W<1h-BO|&{f3);Ump1lrViZ(t zC71JER|vgf}gt{&K)pS>^T^2S$=iX-~F7YA34XhWm#ieF+n8xf*aT5Y<*UT(g#I&Z!u@# zuL%_ieNiQ&6M{-LTDDpubYqHH3NCQ8XGE;GN_(}HTBYA_NAcWpWMAPv)uTGX;GBpe znEUUB7Z40w5otU$Y-m-DC!^G>6QetEosEd&H;qq%Ju3M6%NAYGZZKQu4p>Dc#Q)(+ z3|Y6{FN}=R%mZ@7h`=}h5D$uD`{ix;@Yj=&J}byObc&Z~e@Uz#^D9{JouKM|qLxj* z;91O?VjdW%xKJ6VI-&L)O5KF3Rw4|Y$mWdfM0QPu^D-O|VzzhK_^%Hl?NK{kVko4) z!Mh3NWn22)yDh2iCR+9`CY_e8d-pEgGvg)Nw2;8$dufbL8&N>6qX8NNg(M&ih>r8d zA9r!f3p)$w{w79vY1Mmk9A?EoLdvuzX6&~{gDOSrc#s(qtq3W=Ry~kLMFwr$Bt{mS zAHb_Wzby!K=+SEwX;{yIkdUqWYtI#>JEE{`FvBifbv@L$K8HZ+s&M1IWpEIC%43WW zJ3?S?WU$zn{E0Q*tNcww==tH3m>YC9h*o$JfZ1cW13@T5b|;facksCpp^R@AP-s zq0L;+=BxVCV-|nEsuMakt(CY-D3j}oAz{}3N0m4?KcC_XiDd1>8!uR)t=mw0y~ESG zHcQtn)vF1VLZnZBDov0|{^32~a5Je#^a$lK!Y7a@8|=jVW(HJ!70zu%u6Hgn+2KuH z{f`~Yx_kWC?(iODbhclX|9-+dMN7hHs%n5x-4W>L&kGsTkFu)1=Cvwq&(^Of$}YPP z6|QVqpGt>Vt3k1PGd|PKx!XKUp_NdGXH6`QL+*vX$7j4Eh4zN18p`vzk5m8HT7tv9 zrp|oaM<73`$*7O!Xsr}Hvxj*R~D?8n> z@NLhl`8 z0K3`2Uk4Tu^m2XUPhvpy`~22q3HY(E#NqXq&hDks#w#kk+Lww`y@JOBQqGrpVmnN0 zCDdeP0P1&Ecx985@8dL_jm=P5Q4QyB^1}){a3soOB5`LN z_B(jHT|_@3(B0VX6nrP(Igc6oz4(OXwMRwuE_KhzijK=BaQ0<0;Djc| zoo?B(*-?lRIg3prR?299wNi0K~?6&+0xPU9@X>)(L?zuexCzp77&B#<47#FJ46TwmxR!^28`?G<~2gZ(qS&aa4d zFmH9H(3*@0)9*gd1v_Lx?+>cF5w6RuWey_eY6mHNyvOQ}su`7vhD|F;<1AW|9Bwi? zZFI;aO`xatjI2E%(f1b;D5+i%6?==;yGmQy1bYs2Tr*a?^$eB)$30)(Idfyl@F*0l zt?Gg|y>P!)nVTq`-hf;?U+N+LOI!7q`Zlv?P*)j`R6jBj`Q(HEZ@2?)CPI+p+;Vgf zmvZy*xN0C++mj4p{X0~Mlrc$mDOQKnwfWKEr9nAYYxvKgfCFQedRHpTL{7j(zSjA3 zo-bYtu{O$*PMweuds;BszQ^M*tLPvAhvhmH>)4%p&2i7&bu0*9IZ&i&VuV3Eu%^bO zS*w0^a;BsN{Mz2@k!J1pgN8)CQ;rh5Zn!wlzT&?R==%%KKXs_ITdc6Get;AYD;?ZM zS3&_+sKkp0PH#T!8_VT9@`Dd<_ABDso(j&haQm_#V4Cd>fmXly@!JG@ zm9Rj_EP@#F38_^vQQVS6_~BWm7{Yo0$MOl(B;ov6e~ArOAdZV&&8ZDbmdGE-=A{hl`nnkX%U)O%m+A^uc6klc-zsE_y>TROTeclRpY`LzF@bTS z0w7xN`$zwSDu!{Xhmh``4D9M2nJ z(|yQV(akQ;rJPUr1-D@9A-9deWb}MLB5lDd;&9x(U^}3-G8`Quhuc2 z>BPn_h4I^tDS_HDQ)WaEi-;K6WG8LlrG0Ao>hhv+5*)GEIGEv;AKlNG7pl|t z8szl-|-u?qH1#=LUz z3oi`-CvWk?h+wI2Hoo7%x-60~@FZMJ#=BNTKE;}$$x1@~Gs#BUTN&$>EdrIj4k$o= zSs&Sav#n)qMaEtiW&45zPIt`S<6qCu;%gjk{B6+;2PkomC}dMerwHuy9vg{78|tS8Y8zvr%O=TjXqE0(5;f<>=R`^OtQ{ zvg?o)%~RK#j(JXHJ~MXTbHi`ITjPakd(NEjk2Bw*L$7xxELV43DTr@)Wrnk0f7+z$ zrXFp%;IWQcOsb%+ML#du9(#wU9Dt%0m&drx>mz>PuGi*5Pw{GTbqZm${_(_K8`WM4)gSYH%g^(QDgRhYZ9D#V?6)axP6o$ zm-jeX14|9>b7M>JkIm$+;gU48;ug6l5$>*$yNzS1Xrc(G!MyFh3HtjsLmrN!{6U40 z@1+hQy;lP!2}p00NKw_b{MPrZes7^+ad@bA8~7f8=721u7V;xg^vX}EWN4RdG0yPh zel(oL0$}#1ML*9Jos@_&6$;rx*wojOm+%-BZ?1w(pIN6ma1zM`}!N z6sI2657wa^aC-5wJlJ@+h+O=kHI^KAU{O#ZD=Sgt#Z3yC(*%_?0q>*}XH+sT8%YJN z32z$2hZY|o+I-DEmHhaP)5+(rTKXt7t2)Up#HxE>#eg9vEcb{W`Aky^#&KZ)*(RE# z>NtBr6$F+Uz%KTOABpzVcTzi&i;C{-vLPg%w@j3u4sVVia1s%vO7C z%AK9CY&63ie6G{IFi=W<_~t!GPS!J_XVseyg4u@7Zd$3Rn6yI;wyGRr!Pg->@uAMo zU0^+&6`G)io?)G_5T$tDYb#;_B}`l10^J@01#1a60mh;zr19`yEx>!{l&aTcTbu=m zzn&x(K+#H2a;RlOgTu!C-|W}9fTLOy$9qN#1bvV=EucJmQb8WXxxYlBBDX4^{X-X2 zLJ2;PuDm82V9(*~2b5VJlrUA4t5Kg$JEMEHSvLf8z%dp(Li?=RcIZhuw-K@$hyG>0Bpc&u|0glzOE{LDc(&EITVN{-bgtAmp}j=@{%@w78W-6| zG{5}2ovERJpUP-T*}{-5@?^_7)SgJ$y%T4FW@ZssKmHbCUjK$l$S57%tUjUU18JQG zPo0nDAyOFOW8<4blQ^R&*s8(cb!~T87>FR$BGuK_4_CH*9X>034|+Jz^(?vZV2${u z5tiBF*Q=sUv2G?qJ>`?Pta)a+mPtc}?ZayfcwXyuCJL0nD9)a%iJ`+QjdwVC%Y|v% z9uLb;O10{Mq!hc}P9;KGs&chgmW*jf=o<^2t*4o5O>ABF@Bvl_ko}K7;Xh!09m20u z`+s=;{~OuUqYLzS!8$2G_e=f|2Y+xkhWo%}f7w{fZ_CPoI*h*TBE69bPs_a>?jx?$ z)XwfI_ikXgPPAi`1;hx}$pdjOqxgNC%eb2A9=TONt&hl+Rq;a3!bG#uEO1-78*X8$ zeT>a6{vUzq{S!gVGY0x|cgb32kog6_moH!DA~}l5$!;+~tBhGJUN!xL!kd30eRG{0 zEocHDgvuUthU)ux^W%BDyUD1M08!;>DMNn2`=r(R>{!~-VnA49@O3wp9J}RV)T>^} z1uPtq8_F(%BHw?|p}X>-RC~RnQzG@?UPX!{8el!A-Iq6bTa>6LczHXDg$DMUDjr=Ae|RC(GcIQ(FK0i zXVfYBADKJ+m95Z^_2bnW(w23@^GzkJ?uxfw{l^H{3o5Gf_KN4zqaw|IVFqX?%hQ$R z$-%zQc(zvzl2lqef5jgJi6Z&^NHELum3hYX7{f?;HHF;05!jG&bFe>|L&O;9HY2*+ohatpN}fG=R$!5KY0{*)M5}fFxL9Z2S{V+A0|sAkV4z zfuy=cquh4=wp^^|lr8h?d0vLkAUKlv4b`7WM=FQW`fDVgLEfB|n_3v`y+R5_Ox^l+9a2FgZk{t85+xM|G?8fH`<4&XEt82`22S;k1 z(zqfwaZ$I_+#=lKAe8rZiCr9#NcRCXH3O$@om(Gr0=0nK!)Inwcb?0sIv=)iiwsYt z9h*;8tN91mJCCyVO?;nxW>VcUw`F2(PyUOEp6xFq$yx2lkk8w(Pkn_q%$@D@+;n^( zpt`*I_}TK)*v|?Nya=CHai^m$O+Dh3KHK>T;hD-Cu8NKMmA~-`(o5x0Z+W}x(n|V! zs+(G9DhcTIlZ1O7NmZ%gu^!W8C>n;*gSx;Fh-rB*!q2E%Q-akf#q+{UU+>-{O!;iO!Uwqf_xMGf&_FTccRQz^jyLS{E^Wh` zTJKTp_1ZpaaOlwSh+L4NqoK0plnEE*XNey^G4Mu*@i)Aw8f7WUBo>qWk> za~y6ya2XyNQ8(kxKlEm{Epg!IM!aJ0!`Oziv-kU~%9C0@Aq=j)iW>%TeX9m4C)mQ9 zPij+&bG5W>Tw>1Pc@3TRR06f#Sr4{b+$BCBMF&Gf<%OXIJ!5lA1LNZl=T@g@MSib> zv!Geb_;>}t8L@s3cwQKxKUuDt5nePX!gKFlOXcNHbzcSB{PohV4e{oLGTAO$19-3B zwcd?*Ub#j+a^mrW!LwVGj0rnkr7h;)oXWL&dH6GQG<@@e?MlOBGt`sOB~*}Cj%tp! zaUHFA62GJpdRD=h`*Q`0pkQ)KeW|evkT;p`n++OD1 zHwNZED9-#tgJzr!NaV_iCB{AWs%JCT^7&1S5XpSV>m_l*)2s8KM@!f0u&vj}^`Ouv z5@lG9tG#2zRuw+>h8Cwezu}bCHeE&2E@IScS~ITT03UhDCCE(#&nBl!3D_c<@J!-L z;8UhA>9mE{wI!nhiRyuQjyx7uM_#4Vsxx=(khQe(1&6UmzaDAx)AJp_-61yVSuE$t z#aujA?lMu5w8Xj21OPNXK3~zRTUeO0^7;HXgQfg#eal`D)l$Af=t9azV_rGk)SBR9 zIF=PNK~!C$b~VsCcL>Gu)W}!u5}V5P$+mj#yYRC2NN_-ufzFJ%B9A@amBDtA>44 zvL3waT*e0AZq>-#veT|7?QYn)$GMl9C3TJ_ljLHjU9q9)N-R_{3Y`<$_Pf6DmY60c zNCI)0EA}YPyCR1y$)K!7DQ;oIxd$N~qkO&Efs0F`cIXK1$mZJ#lo+b+)r+uZt?|8C z+8K|)Tsu7RH{Mk53B%o&P^4q&tPR7-{i8#l@U4EJLThtI&ZtTc0tGz7a;4E;9)+_J-#BxB?J5!`X^Kkz*AjO9u`)bj%%)0iwd9I z9(HZ)0i7i|4du&}x#X&t;@ra#)^5NgR3L^fjNmjK$I>b3U2%o#DV&4R)_q#q1@E9y z&dvG5flDQFPyG@FV9k?D%1Xp~E%A8W&RG1f{5*S$qD%|UH0`yP+SPt3OfUsFbXUP& zrV}>9zQJnsIZk~IT(Za8J5-9_ZD|3a#RjDGMlsZMXYZrEhl#?`P>shs54SHYc}{)d z9SAzzcRw4P07)3$1(nUQ)^LFqhxT& zDBt-f?`>O4rWBK3{=?;3xXk%*To~Ro3aV}&^Y(%G zqoJ;laMGp=cc4DjU$~0>a4`MaAh+>gw$RsgFxv+Kl%XpK50_V`3*!= z+jzYp8L1K`5e7$C+oQB^mREo%rr8Nj0AJj0CtAxosn_LN8{-zwFW2K*iiN zn_h`cZv3!62m3{b2kmwjGsr(P$ea|iZd=U^Ni|?+zV(@fb4;MGOz$rPp%}O5*tut0%oPq0h3!6(jkGDxjM<$BzA^D!3$Qc8jp%cQ zO0ip7p_lbfo|2z?K@l)rJ6qN`OJvI58q|KST_Q+cB#KSDVWvp{+a_`Hhgdrgu>yll z9Cpqvw?7+61T}^6yt;(X15>~zNhn%8o%a_!GH!8xYC4?-)|07f6U!zy{Zc=3hgI`a zcFgoN3)tyTzA+!uNU|e{Dye$py-Sv=+KtH{=>o3rgda^T4%ST5IMSS`SVqiRdBhP` z77F>Mu<69rT-=fI#&dW0>yaU?LsKa{TmTZUSvJ46e+zXTOz;iuIzIII?PCGP$9Di_ z_7@G0J%bNq%r~nCj&^ukqPKx@$>EOc>FsSyqcP(w-uU?LqbZKn4lqZ}{@OiRt3wI6 z=bTA%WIOd!+U<)*$xPSeKoc71_r3Q?0P^jdMM=Pd&yEN{|kT# zFW|jPVh2++)ogTNhVX^WPl>{>p+U?1H?2Z@vPzUd-7@u;P@$Zp+dSbQWR&2T((_K^ z9~Yq_n3%Vyv^amdMsSBfXkjfUENcV=Xw{bJkQu|p4@>$z+xqg9|3bM4(&drST!{}} zDwr=T4WFUJOq=X7LWe~0Y#|JbUYgGzB98WFVIK@)0Lj54JAzSRbeF9?X)Ov16Wiig zC^5&Mdh#cJ$)P>gpzM8aax+FU2GS2WhE3h8##m&T1Y{MLrN7!LSjmNAH<{sLL4%}k z?Z#!|iSHGm2S%tRZ|L|@X8I7KLHJMs)*1Zo7bevev*VcazYkO>QlGd4zr2q&2;`pF z=YS_l(t$r6<9?)RRMgn6xM30}dRW@M8G&{(vs$5!@5pYxlXLb^@>cpZ2cbf1P|1q1 zzNy1uz5UndsF#?z1wiAN`2pr=25l<&E5Gl$&H?~v>dB>ffB#NHNwW-cGJ>y6J&W$c z;g24`wj&;ss>-bu8q~Km`#bL2Zo*x92XX75d z#;cl5r9BhkO$D0QcQRa8MG@UD4KtHNEH?=&+qaFrx))4G((3{@APis!pY<=~Ef2P9 zdQj{yWTr1T4Bdh#H$6NJu-@Nb`2Q>XyzayPi?xGM!lW_S{?WLKOR))J{0nWtj}mWW z#>C`!-`Jr*&Tl&HH!nXvdn=l~)^^)dshS~=+EJgs_lk%)9jJ>581At@EyB)XW7Iu> zyAcZ|mz>{?izvKJ^(@kIllccsV@QGG36oK8$hwt&VG!PB*AAQ|n#bOIEGO^bd#?qZ z9qqYHyD`Rs9t=Oqn!=kp8TFQ|TkZGz`ssxNs49@$h8wx~J#uQL`k2n6nxzdJ*ZYV< zI|Q;%SP5ue42Jby-*NMX?1`!$s^0nN>oF+j?CqHU8^op1Hrf#c?<0=a#Edt>%0+W7 z-cSaS67&fcc!K-(UfxIcE;bD?QlL|Y74L(L>b{L(&$tWOt5c!}aUK4(R_KY_cf}ho z_x;+;_NNn34|_C;gFz2CcJNc?8{6KJM@Xd$#fqPCDR0hPVa(pEwYUM}fI!FEYfbQ| zKCA{@2N~pdc%52!4)u`Hr^CK2u}CpU)^ryMJ0E7HQNGuSXi3$2bbcC&zoA=K- zstAtNE@p7eZVV{!l6(cdu-y`7vd?Kv%w;U?CXT~Xqf<}+7(|sj*!qg|@w?$POk%{QYMV+M%3wXsK7IM=*LxY= z(#F}=tXo`qr~ICI#T8d)@+xw0?f)YSp_Aj4W_;q^bNBtxv8Zb&=ikZ~JO+rd^^0Ns zy@HchEZI;$#~jbqB1Tw{{c!Uq*#m3mO_|^w65mT7e6l`SJDX|Dg`*sH$F^HRn1%1*De+=S%fK3>|6%G4#VF2I7yGHYR#1Q;AqUf(D;o zCOP_mKdhi={*drP9`{uHLg)9gtQf=Sv0Mq5;X-wx06?r!YOy-1g}W}@CX7C8)C=xP zH4q82I;rpx*{7r%@CE6LJ|H+^)kK{4IKXPT^3`E&$8*=r%F*w*^>ztX zL*wpV(wX}6OTFJlEY5YQ>A{QF%WdCrcTj2d?}MAFvuSn!s&P|sH=~y{b^aT$vhx%f zw#DC5VB;yegBPD{KlGE$_Eyc0_Zqmw5EY{rG4F=2WpL{lG2Yasti+1`R=?OgR6F@* z(Bu&`Zh6piU=jpy|1_coI>@=!9u>PX?|pE738hEUb2l1Fv2s{5y=Y1~H2}*JfHUnf zoAUjtu;DhiT!nRnhfrg7vv%*1UT;&lp~zgJnn^->^lYrIlwmXoU4Q3pOYozZl^}Ka6QfHtqeBNxIGP-n_mwNgPXriGmTcQtyIpQ z6{PPfvSG07r>-jJrPa~p{3Y@8HSh2)yqDa<-Mtb*bI6<$1Y0N1AKB&#BTK?Z+w^zi zNMw{?ira8QM>RKKJU8KLJ@Wj={sg?~>fOab_D}ndd`N2dgYx+v1V1UfZK+SFLW~6~ zdtXA*IeMe5xPqLvKbskt1NqOspP#pqetT-yHPu1?4(_{~aU5b?ECqC!%bZSr?B|6s z6+s)bSa2*+LWRA0-wwfc!84uDzI2P{6`smpiTm8@+iuU$Ny)o8bcZ8#Lh=hTGmh%^@DY436`UBPe;6QOrYQK- zIt-jhp^|OJe|@x34oRK;uI+5sG{ZKzz;{2-NcsvoS{w8B9aS4oaXJzW{dDEH>^9uu zzkQsw)|%kjJ(~$pFP+p<)vjM1oN<%d=_XyHswz&6F(Jo{AE|aMWetFmi-cZJR1s>0 z6(n<=N+W7La^`}~LIVB(`X9fMF2OC%)Lo;tnU1Acf9`5-5FdKGNe&n6f` zED}E>gWITYr~1Vui%w$2bHRAB(hd-fpR+grRP46`iOD*bicp1(Q_Xg52spMq?=3W1 z7=OWzVG$^Hk6Ne(asWS=cB>s}*ZXF7p3j^!P3GcAVV=FTLC7dyNx+z8JwO8J>dcGP zmQ;8CN~B$1$AcfpJSkM};div}b_6Ue9oChgH{7AHN3|t|bCO+F$B0WkF9OlgQI$IW z(pUT$WIN{DEGvs^oO>}BMVLS1wN>{nlCK>oEyW&I(QRQ!F#n_<3ix!FuIe1K1<+XEx4*fS;Czt40{1*M;CNdY4{&iDXOnBM2`SBhc183CE4h1v#a}h zvf1Fp1wjyrZhUEUJzCPg_gvS`IQ<7{j}dkq)sFTWubgrRv}zOy}r{k|0Es*?zw2GE_mbxh?O!jH?zk z@PR6HxA?p~?coRm9~xjYP`F|M>3@WN0EwBeA6hh<+^s%+R^9SMb7jXIkSLoF1{pjG zlx4$hys0;G$fkjk>F=FsP zDG%}zUX$x-VKxGa-R~aEXvRQIh?8y2O~Pv-u6SFuR7>=WWJ2gMA%#&99iam+pxK&) zZ4AnKomiZTE^d~wBk;#3>-Lo~4t_CS9DRM}M#yPCHFQ)!vAG;6dB02QOKb*tpQwDw z)<>5B3fD0`{OKX%!4{-N*7l6^nf3-`AN%n-KjVxK8JFeW5dDuWf#`GObCDPF+Nx4- zat~-L>v!%1g9swfeTZ8h(mzw!enGEsM7AwO^ZdpBJAGraH(YZlTJor+057k5&P9Ca zC&XTd@k5e9uH2hLKhtTlKZ*6VOZUZm>~+2#o!pf1&iG&3J?scF?~+5(ERv1w*;{?5 z#=cO<%W6MnaZi85%dAa|;2Z*P)TmLeZ8ZD>8LOK_|EF7n;oBlxL7^=hCt^1i`BP@w z3HN8yGTy~Z2rTR8e6)C@wHdUT!aZ~qxaN%&V9m9)0I&g^=dnFM2JpGxc_+`onnH%? zaWzzyb;fd2mK_LfhXLPQ?%eFb^;s*=TEEc_wKcQe&w{T-IzJ*|35-@Bs~Q9r+)w;U zqqRfEOKLWc{(^bw2*@ja)}OQsdXhoj48QcpvI#U!w1U&iE0AQ?(9tXZiBAg?8K5iJ zRk#53hroix38E+$Y}EkuMX1AAR|7CZEA^wYFuc4)up*-}xWJDfh#eglW8Lyj3CMqe zIvktS6i_LLW}|1bkp)i|lppuq3g^%?x>-XQYDdq8$H0~DVHopqqM3A0ACxJyN39P2 z+RIA}1aW5ytuuHRCO|Gqwy?GAfNpxBn35tfF%N=q(k6nfoY$^zfS#n$o+#QxLiy)) z!N~&xq1i#s8{J5tn8137daLy?5}=IEIUt*?s%K8@C0U}YmAU6{YBRRmvCm^kf>G@+ljq_6wiUI0?di1#ER%2Ri0KnHB-2-q|Ow!x!5a=0| z=j-Bh@K5js$NxWo^g4Zgf2}CDEf{%@Y18QloT%++;p*is;MO<%Rc7X2Je&Sld=w%% z{D0lhy)coVGWmLd>mG)>L7K)o&;Vzje(_at>pQ**f^Pt?VvrI;u4Gq7ugjivmutuu z$0BdN>_j{4%4JI!-%-btUH9OsyMDNM3+_)-157;QWQML<`)$Dqj{noJw}s0 zfOAnw4@B8mTT^J+xReJIyGk`beMkzs zeesnVr7(6qgzX{^dnyARDt6SzV~_v5@1$5i>sPYlm?}t3zvCqf^YWIKvlNg7*CX>> zb;zv4npz2Ryaswu{GU+%uW}H@a+qYthoT5SFYg_=q4PqOEeoS44}And?eDEpp$Bl% zw*(cL|Hj#`2Vn_+%1uso!|RfGKv@+_v-}ITpIMJKgX0Qo9ZyndJM0Nje^WI01&2XM zxIdmevcX|FqAW7*#$C68niglMmEmeTV=;<`c&&;olP znU{de;}K=S+|e&50U;=N4x3fd84%B6s0z_0e)Dg}Mv&S~2*;9(LDma7xxuQM5jNI6 zvk9&R3ZC>mGOV3uPx z;P8_T%ipm>7Zz8ZTNn2-JGJp7U-X@iIOR(cuDFS|H+A6G3A+iqb_;vClaC>s4&(SFemxq#(SCbL_KxoOxw><6mR_t}it?)Rylcf8jr#lZ zc@a>O9L#N(E$~HW5ioq=q(E=1A3qyUb${z&)qsbrA0+dEB*@#9nq3b*yQR+cyx+t4 zA(JLue825!fmi6V`85vOqt8N-K&=1ZyX>9^z33m|newZgiC?yL}1m_NiX! zjlE_g?R;~{j$^fsVYDf_h=X|Rcal5v^QJO->j^|<-c*!pybxEAH5QHf*7P#caVIK*f^Vc1}IZXOU^GjUP8e2Hi7(Z_j7$L5m4W;p5y zYsxpSQ$1Z=p<2J#ILaR`EuT$!O9tne^L?9Wc_wBYCcPi^bKP7)cM<+Ke(u=Vxn(6? zTeXmv`!}14hrBj1^b5iRDLj4_sD89>Hc8;b*AwEg9ftz4Uh99=oA1=A4^vdDDL8<6 zQGH0hPCe)0T@C^IgD{l_&K-U65?LusfDa@Ing()8e-2rJWnZOU-wOvlHts77seYKb zlt$!a+>6h(@Xf7CA;Bl+2K`}e;j_h@c;0A@oALKbn1jkM@a)+7NC5uwTAwT1&0wwb zdwVU!e$rI}6jS)TcK7Pb=uTaU@*-C6I~gY)LSCLl$9lZHh~Y^>>bQoJCe%Wj|AkeIIS&xoPATHSMDsLwsh;WwTgl zsj=SZ;zqbXojhN{{XT9kZFx(u|EsNfS;K5;v#)(*rV1Jrtq7tprLagcfcogY%*9R> zzKHTy=`k`)s(RD$&;ub{V@KcidhdC`47VaIn4eQT*15)vEexQxu)-?_TT{qa1;uB$ z+Lw&(fqEn#4l5G~0<0r>jwg5Rc~TVSVx^JSU5WH*tNMN0;VRYNgi)KGdE|pTZY%TH zzvOm3z6RYpK0qrRwLp_A5av|QpjuW9mRP~1|VMWCQDl)c3hwGTf*G2o zlM~)X1!RqtC7Ns!x7}b;QTe~932>0s3RJ`7YIlx1KtxOZ15b1FR%f2v$n9+zk!MFG zVwAU-%+K;y{J<;P>vXg%7kU)RajoRfhsZvib^%39GIN$Vjes!x;o?$j?5aPR;GD-@ z{FS{}rOElrd~iSVeyy7xdiS5-Vq{7b&9J|BoHw))`D8?3T9yymCQ@)4e^v1 z53A3+a49|?t=o}IbQM|jzvq}^5u4t;{A4n7cipwJ;0|T8U~o!aYg<})TjET8;m_V$ zOnbk&G;g2Zb!PE{C#yRwApqP>*AM9#{YV^9cn>6$<-{bM{et>*_>v1J7WDtY9(Cn3 z8Bj$!fsBbqt049}Qk7AsGH@iX3Ey<`EdhoP7n+FPr44RbZW?K!1so5btn4*G;TkJT zFBe!g5bROQLq)Y0dzvZ`>%$p9vg0nxYGH&P#)m#ef^pBK0v^3!>9kS_8)jEz0&?{Gtj?}Y1g7Vw`d(9Nf~nS-C$B!OBYon`KhM7*APCPeExf_o!+Q6W&V40 z^PK3D@!P{W6)Te>vrfhPXDJNBzR%$9>?~01oXgv_WsgXJRF%WpAvr~=|3WpDyXSp( zpRtt~+wz*4r9My!DEA>l(nu3a=NO}8F(lD;mlMyH^_RYI{e)O&%TMd5Mmg7ryt=^wE@03F4XG8oy4`RLqG7FTK#9}y2$18=-jvXbUKG}%DUH3 z6iQ3DnhD7qGOX77Chav=S%i!5F!hcbo{h`qHC1jIj(#}`yDL4`JdvnVpMi_LCN!gH z-rpvF_k2l>Q3eOj9pA2gv4aVu_>d@(vvc3pB+m;j*bf(nq>iqo-ues~slNJ(2&@pT z_!2!z-Mt~6dDf9T!4(ruxhoK#0OSYAOfpJ#_~=9^xDSyiem&OF&H|rS zmqneKZ!`5Qg)M-3F^93%F=UlF01dh&p;=)-?b_}Ee|Z(Q8Ox*R{|WLpSSNMW;$j~~ z`jv`)O?&7G`||>!z|R6dZKY$Ge2H^hDWGju-W%SAg@NHX{^F-7b1jb#)KYOEJKDw6&BtC!PJeXjs1=i5mF8Bc|IHnfXs`bj@bu(bC>I)xZkL- zMs=w?1{h+Z5?64m8k*0fnYhbM?|{qukYUL{H-GH%VBl=V?g}`?cx&AlxyG^pJXhh z{8qVqb61{F`EJ|8@R{j{{-NxZfpY3VwOCflQo2&dIaw^byT~lA;2tETJ=d(VYeaK* z@^GCJv<+Sa>67CZmlgI^nRgILdtD;8(P4{o4y~Be5ETMxoBfEBaBdKi_50mYPblY0 zy(vu9U>&{RL|>e7&v8)4dFP&Ff?<$U`T{Q8_jieW9M)f<2*S33d^8>tJ;XwO#>eU(N_Po=(tAf;U+ zdkxW>I2Lvt8&B5r)Mo~}fY2cuNX~})o$)^U^W486Iidk6A8BADq^U7nj8X@4Oolr!(8bFlFf@Pfh=Dg|BW@EzFkH`ZfiaY#45#lEdyuq?C;y= zBKDujhTx`cm5>zUqMMcfFzp+bU|)?T*vAkJ@kb2(%- zZ^xmv3<_-(WQ%D~+U)H~fQSI<3oV?q#|aR)&LN%M1P|dzFBl|o_&cBg(02HPQYx@N zYyM=kh)_0Se@LRZwW7XZA6auW}lo4WLxnUEadKNEV1F6qSH0%zXgg3XG>}hZ?0eG7_Kz zGGb~|MVc7yF~GY_j|oh>dP6F&;OyY79&QQ>RwpAfLEFK>NT92x+dws49c|$YmQ*{7 zhsj$&_cB)>=&VNMzIr{u;|jV)p8cqUN?JpOh-AUmaV~@TwPz25V%H1g3|=^r+l+8- z+mFMSAbdCcPfp9SV%m*kM7eYj$cjBTmgE_sFg6(=PoB;gJ4HEH75>i z@Bga+p)bIKpVd&YUKOBL=u!=O6^ei;xZAED;O6zf9=&bgVHn3`#lD_Gf&B)n9`{Cd zAe)w^VxN3j#@k=~Qd`A#kzk!7Iq`2632zTzPz8JLVOElp(XoLpolCDC=h(||Pz|I$h(_QehS(b&BibCh z?}CXlDZ4eJ3`x9lNuoC2~(IlNT& zFVcl0N5T3_|B2{>t^}%e(}&2zII?adMsG~<5&x6sqv?UwDnK{c5oXscdr1=m7^91Y z`13GI6}|D1>?q7I=N3|${q~!V&8-ur+BW&JSiuDHMrzFR!5mA$1%##49p&i*#VRO~ zIvNdFjzl%f)5s@mYpi_jh`BnU1kstJS5AN{p|zEzHd$8p!i_)d`;mji_ZG#;g2cU$ z&;#sL3Yt0&_(#)38%N-3*>uR#{$@Wc1W{=dYgQ$siK9ndE(3xpuxE2W0t~J=tOrsV zo*|SNGqmYlj4|p*7k8k0?a-oC*)#9FQguwKA?E)>-kV2L8NL0(8g8mvY0x<&5i-}JaRN{sq;T)-hH!vLqEGWhR z2j;p#5slr3pn(EHxY4Kwf|jT$rT=|g2Ce5=BxYd?=u553z}ty;%p!_z>3XtJMWD#x z%KS8XUSRw^ooANx@W!(W}c9qBz!yj}IbRlxhbysjxpUyf+w<7k=_$Gbfmp4{bcDCNu_o>7rItB;ch{A|qa z!vWS&e3%+DsMVdhV6+9sKZU$@N={oSE3T_aZ;`cPg)0O?*56Df%Tl?qr>sFn86Oc( zC^|L~H2M5Q{>w1oorPxX@}H)L`BN-5eX1w*f%|?>Zk!KC{b`GzUm}RhKd)|dt?$w0 zx1qSXTqx5@eR@Rs>V3-8^`M{LyxR|G1sV|K*q;%5%wEw$9~2@$=);yHXr?#-ExCT= zIm?-H(yPHJGs;EXg39PUk{6)GRI~?A~YgM0{fF%?*z{ zweQ0C3wH?DelZ7d1uX?0!FO;w`` zj1IsbUMSyARomUKs~u>USlZ3|QJ5|BY0k5>P0vqcCTU^k9s@w0F!##S_M4rrT@O*6 zW2dRe>+y5-f>QEYwJCT2%KbvxKrDui-)%|3x2HmxA7wVfC91B!wg~tcJ;73Bwn0bw ziRuHU*A{!u(v`KTd-f9X7DC?8y(b9Zs>t8+yHjt!9vr+)_9x&vM;tU^=VS1IMo0B#GUiaiGC9Jm%#+8q`)9(Hii?^N2Zo8BzXBc z;U}^tx<^N(Ke}D1AID@R+@kj0;SMFDlSwj*)_5fLlC^%(H)N^-T2WQEITVq;y?l}T z8}i!qF-s`?CH2G>PDI-h3Q+`TJp2>FsH1!6lU6awC7I~*=FKH3F*DGA`PEW z{C)(k_)(tWfm{$4lm!GaWRw4L`@lHWPLng>j#y~Nbqs4~h_D?#X~So^yBojbl(J8` zCFP<|`Qh3uZnXiVZ5=rXaAM1Hmt3`gw_$Lb?@OHA*C4#){Eqpwq-I?O z)PL>kGwIIuuGBV8o_TGumbI2}Jj$fzcVR7+b_8?yvGEqN7qs%yB}vYRAE&yO;A=yv z=weczZH_7;KUO*hcr1Pf2{7Js3`?TF0@pWSq% zkS;tgx$}$3kv6nZHmhq^ZH4b5PvAg$JpTtb+HYdsOf?+-j@U+L#j&}`+{2r$yJ&sh z2=n~jxx=c_5hs<52iO#|2hWC6Atx=*Z;e$CGZO|8Eg6JP;}8OOO$035@|mNt6H>sl_-dZZS+FtcGolN^T z*UO~jFMZFyP3KlPdG7MGj=;q`gpr>OKOCz%_b_B0KKeO-jJEQ;yK(L)xE%UDC#97- z#+MAhE0sv+L-EY!s#y>_!8!F>&d9GTuN~fs8fOT4E@83Izx1J|&u7F(aRqhuyg5Bn z@H<5|gy9oWePYpR3*dDQT>O*G-Q+)NPO#CxPmK{v!@T*bNd=yqKxk~^x)4sQ)x?Kw z8ssdVsFFV#MV#zOBQ;+LG?HyVI%{TJ^{?GqiXZ$_lU7Wt{XZf%s<19RAgKtOYz(Bx zItzj?uD=5vVZYWV^DD@M_c`Yyi{%-V0aihutg*b(gwBJeRTlXw{P+;oNzx&XCep8fid?INVfIrPztI9erz^GAy;Li9@GO zo)a_Z|0aucfD69Aa?!aq&N))Sb36&dS6idZjx*goy^K?RN{6dtaD#A;!2#q7H7w}~ z)_o}UDAr}bXl)7go@k_!vQVhVbV!0B^YuDIg56csvD@nW-k~$CASgrT!`E<+BPixg zFnJh&Bzi}p^H$%dGd(i#K(X)W-7_Cp;@7RtEpmPY&!4b z0D*4^X0!-e=#l6x8aF=^jEQ;}kGd0p0R&8+y6eSLwS&N8lD6j>IV0{BpQ`nn_x1qU zy05QB_D1%zXOAk@scEbruB5Lc{QB4g@ZDTtGrtT=)SLH?yDS^<{n3bF>Po}46w8V_ zNL*ZxvcZ+z|Dh_$^L6>9cpl{4dl7)Xda`MY!lz2-Z`{HQKH+*97+JBHGQNqvuL7(s zfGRpIK zQ_y7c*nY!grDR?BK8Na!mxiH(0>ZHy+YDSbFtcPnkeLKuaM(IS62own5 z1u%gmQz5HDKcg<=`#y`qwSbI}4sfyGsU=zraqhZh^Pcq9KGwI@oTQs>zWEje8>gWp zhD5ySVSE9IR+F|AEH|;yIp|>c4n&ejT`Z_W8Y{IXbGP*Dgda+BXf@*WAFiiA_u33| zv6yzL35EUHEQ6vQ0iccuR+f>L9Lh2`$tf0tMOjUWi!gb_i<(v*2vwX z=?Dtmrxznz0ZdK>0$2{!_U?XZPI1#@OKfBEnq#s2*qxduyyDRzLg!-uk^;7c1d1m} zngSP{6U?bWyi8L`@Vk`nt_*|47yr}gs-7+`yD)|nY!K}t{BX}pPbdJ;Hee-h%E(q1|&B+V8!=vHW3W?a0y>J?s@mb~dQ9lw6XRW9*nX7d5e zKY^Dx(&M_5oYG~pBda5w4souR;`GWM`2vdjRg)X1=bg`gw85aWQWTsW=(rHQ?0>TT z2PU!^s)CXyqRvPZQ}Pd_GC7A^JiWdgYI#gseZ|a-%DijSmjKE@FyLowO#FZV&&wx; zOiRWjbWHxTFivLTKr98_p7|H0@;8#=Kg16I@osFk_V-=={EqbQn1|W^jqGYKA{Fc{ z-mwGeF+uRvRcPIKgXX=#;#RdzDc0;zVM3*Rcn{vyldY(^PlY6d2B&aO_8)Zkx_F=( z#OwoNaKMMW%CRb^LUCeVFYJ5wG?kWSO}JACr$~QrSL*qXu*A;vBnCYcmO>@T_q)<18J+ki`v>3#VaG7b_JT%n z7{3Hk!)1x~C?u>>3Aid~fc?OyxRh$c8ug7v-5Gly`1929T8#%dCI7~SS#8G4{Jur* zbsGuU(fvaL_<0(?TZjj}j|+t@&Qqf3xjx<%q;1Hl5EK|Ut}YQ3@xT`#b%CI0`Dk4Z z#hrY?EpBB?-lIg3e9GzJADga~0rd(F#Y%|1@piJ`mjov1q!u{e>Gw@Y?^+gJbf_0- zue=T7Wx%H;3MDO2kNy|OH6?Mp8-QlgNZb>Vmmn{)HAUEAUlNNcg{toQ6&b975;pij zU)24eQSa$H6(m9K3ftzKzY+rz0rdVqyb!o>yVe~zQ!TR6alt4exm|ZV2)|(l7#Lcv z4Fz%!Eglp!HJqIIesb2V2D_^I`%zy7B=jGah##Hd?3k+D2<9K|ZV#`(Ps?to$MA-k zVYi@1ckgltyQaGylMv@iDOS?op9>UHUu5}qHQ%S3MBe?KU?8hbYlBFsY?AG9(?R4? zHWTe_{tlFv5+uJPck2&;e)z+-ssLFk^tEMS26m1>CHy1-524zmM3J6`Qlm z#1BP61q8wP^>(mi2ws%pANu>jBFh0_m;8qu6ML`lw%k{~>F{hO=3w*H^U2Od<<8x8 z$xX$!4zQ10$lXk+akmN`yJF$4sO4bhw?8GD)Dfiss3x@m)udc9)IONIa-Nl4xTW8v zQwi|*RHV_$&I@Cifwkzf>aF->uJV>!`r+HUD2~s&42oSGLD%j+Pj@w!3v@Ha2tAh+ z2*MSi{3Vu^&W{?3H9O_rNeCwy3w&8_>-7G`qEM*BZ%!@arFy zlb%h7M}%ve%G8`P#7kL8@1Y`W&rLotoYebjr|{U9GkNwI2N)ng&l2)+toX`0>hvY& zuid@hj2ssx4Rm*%T(xMVGCv+XkT#I-_AapC-fv^kvY356U;V!EVOXavdHbGg-}hub zy(eHlLb-t<76>yx-#D7#?e#c{+;i?Hk}=Y@@7Awam*Z(Sj+*iQe5f4mHdZFpCsS1w zSgG97Qum|PC6Hg_XSWiOD(qJ(F5IG@VSUY@zw_J02g)qyh*d-G-Xb&kEjGPe#3~B4 zn`stCdoIuT7Mc7>*gj{e@RbMLC=CK^JWfZN>*VYQgo3@$*sF)XL04$ObPA0Su`ZbB#}PZ~Bqd5!S=< zF$ITJ;5~AW3O;)?RZV$X_&qA*z$UpdfnH;I1-qH*8%8i@7IzJb?;risJBxA2T|$bv zxHj%hY^=LpDN^{tvQI6R?YMAK!<9oR_WVbhrnCL*v159ot4GyvY($f&I^_7 zMLQ~gtN%&Ws8W>GG5R{OS_t5DBC~1j8YsC%%(c6+NAH0M@UmWmd@N?U#UuP8w1!E( z0^84Q`5Ez5%=mZus`9K&KxcETa&btnQiEDjRe}<5)^q|dw!Rqlw@}Uw&jGFiS6LOp z1Q)mjxr$#TkI>_V>Ybms1@W*1XkwB>J0BBgj*iB2)jtvtcKjtQwcYcaX76m1VI)Xp z1>fhj|HiS8*(eQWdi;>d4ZiHS^Loxs zc42X8F3B7WN#$=y4I75j);BPGX42M{gu-ng|I=6NO!V?TjkZ=Zu(A!~@`G5nzjG_I z+bj3UnF~Ne?|@%|3q!+416_SrT)+fSLq$^y-M?-747rm z--0H`JpnY|$mION3UG+ql8GqCDFXzFK<|WZr8Og(#MU`}^8aOMR-^Mmb>CFN5??Vr|c3ubdfV>55tRECw5_ zEq>9l%JwpqIx*(F!7>(0osj6h`L||i%9szCET!^rP}f7k~L32Edtj-?eBkjk9Yo& z0#T!Y|KeWwa4k4|tOF(p&JsV!Bp|UJ5Jm2U{i#QA;lGf(XCFjERL7QEsZ-;!Ikf;G zlIG0ZnsO~zD^(1O{62T8lsk=Wk59TMVFL5U?!h23XHZL)bn z+vg0DBlb@RpyC86N@k8lKz6(46~BjOCerGj&Xo+8Mkj4^-px$QuL67|2llts&VtCS zSm2f*t39B)7nf$cL)w$nu=#}}#i6GT?yFY{9=CTE)0ows+=jt9a89kVO`XI^sQ{FC zrWwU8K)V6Sls<2+RTm!D(qj01hK|)qfmU?HK(4K~KrzOS9CuTgVx zY-y1d2EySJ8(VQcOUOqXLRNO-nZ7eU+Pmg4$)BR{o`K4a`I;Z9&11>%ei`n)N07IE zE5Pm1VLQN$wQ)O@R3v9qraRINyggEIjeJHZ^l`Xwt5@L)p#H8fAE z4#t(uAKNGXp7%oX4X}t#$9=>J;(Dbqzh}!INmoe6q*l&j`+hD;%+pe7!M)AvZMDk_ z8d=cBGY|Fwu;Yl2_>Ad}1Y|ecZU;OdUvir>3@JyM?gl_2p}&%;Mz_aKb1G5hLmu2i zVFa0wk_#?r?8KOy=eTeW^BJ)xuYPFYRAZu_XY~4nRAV!0_N8Un1f?*U3H@lh2%tR6 zeea(5*!8xyKe@k{ycO#ZBR*8LygaqKyexWA|HWi$Ar)X+7niTcE~c2mZpOeptdpP2BZu^2fRB-o5zvD}L(9YYS*sX#Gno)&g^LLKGo8 z6N(J~KWIdD!t?rHz9<5IOh6~1l_LMx${Y}!KJ*Xac(+smASXKIw#`Xb2u6h3$}j6* zCX{#h8IMLYU4DMjjaHZ=t|h9Wxd+BKwCPhYtI^)tr-pgN>(xd@9N+!(fF&mgCgB8c z;F9?LJ~o`^+c#Is@2*qI)Vm{HJ;(12N+~Ki6DWD_e*I@%H!A>m-+NN~DX**dS%4#= z7Cl1d)&jrmUW44Sx@7O8A<{GI z0Hw)z(A)4*eydX#Q$ zK(oc^u}spZF+N^htzqxrbVZPFMVvQpVEl$M-tpJ=LvKhgkKWM|4S?j-mrgVzYOyM- zQ#hVz5=h6zi|v@ddPIp}sKeH6J1MsCG5ToFGj@&-H#A)NPnusopaf(X>Uu2Q7!59k z0j;Q~$+t{yr$o#($CP^~gH*@O2nR86t+>%?s1S4Ns@q{k-;V~>Wvo!+FcYi_qs zZW}vK5pc+tRqxD9Gq&(k@)6J1w|qdD7GBz``5hU?2?8FJM(&g4ol7q8mG3SsD&J%z z3e%w!#UAsj^J9wklxAVzE(8eyPgRwiG5ow{1APi}8tB*hD1Y})(w)ZZ8GHLCe?$ua z6DeJbyfW+)u_3YwNb%=e1C7g+;17dEeCR>_a^6F}CrD-7`T>BW$b{`K4sTD}YL+CT3k6U8jk=PxH>w4@;54 z$F9~<%oM-t{CA?#1F$?e_+YBeQSu%^a~$;x3l0ms%j<6L(^7flKUJQ=tOic2@F_|y8m-O8p)q-lvku{k zZ+ptG5MWtLU6!eR?qrsoF1rB06v_C`4&;I{?uhG(Ua@3$d6}Qhs*)xUq&J5$?cGxTUQ3VqBgR$q}3awJZeWyT%%l6f0B#b+y=WTah}y*TU87dyQYUg?yo-=9tPlc zmO%KA%;SjvMAw8GQQkd*9JBzo=@9Br5Z`yC{@$&Cc{Y>KtzPDI-Q!@sw676!QBWYjV2&F(%N#3*RQXx1>;zkD!Xw ziLS-dJ8+JE#JWb1?Bv0h%{STLqVs||^+=3OKOmdd5fz5aP~MjS6H09V2KIx9&u$EH zLDx;B*uD$IKb1lG9OCT&I~LDJ$Br2gFaS+eY8?nzJ8`N}Nq@Qv3!g;u5bT%ay*thC z+*pQ$7h~4j&r*>0=|gT!H2V~SsQ#oBh^jLjrwrsDb-X`f9K#oX?8FQQ*BqDS`IK!G zR*=m^uN9%Hxp7U1f_NkGXI*CkpFk}CLe8p8C@B+(#rsHL=-PBSbQS1`K9u(bE2VLrt#=ic2^i}h2zbo z3;M`cgpG$TUe-fut|j$O8IuRV{UlzRNF_b_HctQ6Gy0;7Ei|2P+`v4&&N2J@AkK$Q zud89yRKxp0=kkWrSpc(jyT&)WALw&*$_U=5X_HivIcjM@Dbbl69K!C$g-;AVp^IFU z@V(u3eD7ggxB^)7k|G@>;2htT*_b{*Vvbqe+6`uzI0!`f1#Z>2IM852_39$S5A9le zpQ%V>({nLTwEVKD)OPUWn(pVq?o01dY5bga-+u6dIf&+?0^<{LmmI0NoC*w% zQQ79kL9yK*6dZNlQ37fwxroM;2Y7&zilaNJce(YfgMem-y%v|?`}q7$3ohWE zRT!EXCQQ%R@08rqX{{a5cZnau)YOej>73xhmj_Kr&uwQ3;u8D@2P z%XWHOEhfuY+~R9Yf!w7$YI}(9Yo?&==2X(??zi_jB;i9U+sw+TTfNZkCr$dc4Lqeh z`rfWx$COSLXecZ@KP8F83Z&Ck9MU78Vi2E=HoE6AAsO6lsu@!5ZhPPPS{uxI`kLR) zm{!bE$d|YT?0i@kf7rM|(wJ&RxgH=BY?&%*O<*AIrF{`AbNrscDP1&HCf|6Y zBtvVz4h|$tV8CwANoF4JMc59zRvhM1sf;_Wir?V@ZThMx7BazOq=I&D+aYoe?R%BWbBp^yUA*i}M?5WJrOvQ?0O`#ca=5=L z-X#arpZNff|3P|{xx17lvs5R#eSTu@rPbQub1ofTTPpI;y3Ixxo~+B>!5dG37VIeT z%*!8Xs*E2GT3!z83U?#vnp{ZeH->q!+rL6vKA-TE;X8E$+tCi~PSoMG&HQ3_DB|r% zS8i%qC?J*RvRBeN$VV?3!{gaq%l_!=*ch@gvGMliEu+SZ2TpZ`e|8@n<m#Q(l`X8m`phLbUwz;JgmHDAp2Z-w_x=hmc^GHEV@zzb{@s=D5Ehxofs6KOk;i*DO_)0JN)@L8!o`#{+EU|tTJ{W_zlWgr&;@he&@8=a^u?IB`&<?x_w(U?5=u`b*!i~vi^k$Xl&2FqcE3!^?J|7I2!f3j>lUu}m;H~C`3U0UbymuYp z^?d()qkXw_Y+|+eEXQmF^SD$Cpg}(FsDmviX6^y?1rcuS^$(-0T?47UX3Hn+%VBmY zTb|(lC7f3+Ee$ac1%aLM4jj{K+E5og_P+S}e!zr6xoY z>zp}Fn4=#3!vbXIlH_lR4Tr&pLXHd~)2i52*VemZoNbV$t|1uiMJ>iP%gW!ZkIAet z-kmBM84Gd5W`2Ep%0n}ME6T!a zxM(ZLP^z=P7h&kWJL$e5DZ=mYNp*k^Nww6Ty7BVO;%cgnojW&nmXDgWB7-hpu`#-1K%o$k^!hdA$%5nU0d(>%ae7L7CSJ9<^yvs(h23 zj!g_vJtoo)-*W2kg<#*33o0RfR(L^YUYRQB?ZZE2xp5ZSV)rJej1Qjy-!H|!J!i`a zXHk$v-qCt}U1Cm1{K1Ayd$3l^m$DLK>iX9{0-nw8^j4-w;_WX5l6bJDxIG!1-=oAj zAt78ni0>z@Whrd(;AE)0k@E2*UGnd0=D(#LjR5@@Ba6N4Z%gj4}-G0dQ9kK#i zZ!byYpzH;_s1;iS#Zb#U-yi%ZEChb4cq-*io5Ce7?uzLWxpW z-tZ3m4w}3SoA`EBv;p43c)^fvZr*_$-Z@jT=;~t^_OI1s@kq4qiws%+lYMEX^Md&E z%fWmbHu%FR~;))ci}zHg15cDxQ8 z(2KlI(bzzO`nA)y{Rw(EP{VCA3f_0Xhr5?R&Uzt?TwM02T_^fH+vOO3ai6V@ZE^b? z2tN#AvZCC*3VB=lPy6!BtBnmH_j^)uX=e4y3yKF_I#+J}>^wq}c=45S%K<)Yhcp{; z1PQu_I0f56c{~w(9-bN#);Dje^QWHy=faSbT++RljKy}+Q{JBYs4|%E(3Y1II?|t1 zY4ctsOWs9F_#w3^?2GQMrTne2d9 z_c$<<85rEXdhkbhM$3UzdGrvceO+AT+*NS{dq(eBRWM8vv71I011%T7X+bi4wb2a(Z=xa(=5f=FJO+kZyG=WTfg$F< zS2z&^EA!ND#3;MIDWGoH^eCh>C(Q2n`?a5JD5|ox+jOw24iAsK0eb?y`z)hiQ27Pr6t^)yoO(# z09z9SgUc^y0)%Y3yXSDDJ2e=Kq0>`i#L4dCVE=USK=)(@vL3d;5WhIOwPz%kwq^vh z27M$rZ77K!(H(Stw<<7(7^G6*E>Y|Y_Z%9y3!zpU?fhE~%nAkKq&41g=GvXVqp?s4 zDKSLsm!RCpe=p=-<36~x>|w>-S)zQD{vEtB|DZLctExhC;qJ=skukvzVFhi#y~s^L zN2LJoSWKL>6v5tjdT=hQ-{R9~H*zNdJj$~Ito~L+f4g@{p^S!b3sZ0rf z=4WtaT3kCcSMXbH1l=s-jYNImqWjDL>3EMeadWpD{{g`7dw#oY2c;PnpTJ$h!1t9GXDxBB&oiD#7BXFpfs69I zJGagK$v==2Y+;0UX-+Cy4rgyi;M{@#fpCD^jF(hv%EE8RjzS(pQqJNX2haWMREJ7v zMpsvz$@AB>+S4Pt>cYpRdkwbBmUbwTGt%6KLXE$82rqc9$&PslG1BBE zzc^SVpxwoR1*(IA_6n3-Y;T1cZ7x;IT67~>@GbK;!h7O|=?5oaddm#hf^7JMyis4s@{6<_ni&@RMva|;fq^(_GtcSJ=j3{&otQdd zmdE9_XoJO}-wz(m4cq>i52KXBJ_Qr|8{RGDau z4kI7BRg0o}KG_qNI5HfaHL*8DUM6%gJ@`?IngM8`sXlO0{Eay$^4;;nErZ~`YC+xx zD;4X`g)3`9N*98Y)NZXuQy~@IJ@+A8q`-T0Uk2;U5osTH!wa5izHvvuSeIO&yfn1! zG~>yo-N^`;ua)h0$j8$DHn6j7!J5*cE@9++R9AE<-yeQyc`52=5--}bG$irtcs~+k z@M>v-xIMQCN{HjnNr#J`TshyBl6J(Rrz;B_C(!n|m#7WC@)l)Qr&64`f;Zn)>2kE9 zROZq;SuT7g0W|_2$xSCyo&gG`8Q%TqOeIdLTN5Y4_R}XBnQ(V6_B?$OeT9O+vN?#3 zJphOTwy4NFnkr%+ALVuIT{x?l+<9ps8j>#Y| z>dFsE_1&PiW|nQB-KUlye@)Ni9gfR>uk{gB_8pTQB7CFZC!m?pb%Cm7RJ#A0U%#UA zqk4!;Al7jR?JDIpmfie1ion20o(*U2xuEHZz5;!g>Azo;((#B(2*Fwr-qIB?1Kww+ zd?Om=wh)M(snAX$_fh{Hu~4ZT;=mcnm#%`oLR=TuyMsNp# zL;Dt;hx#O7U!^}=ZdFOYG)*QLQo9D*Y|H=sG=#Z@H~sU#$?^ zEXjhcQo*xjn93xe|P+-`(L`$Q{z&QMBR!gw!qH4;qQdk zcmqhkSDnxIu(!upwOj@qlQQP>`tU5LxP{F0{b#|K);#3t zd(T&>xG-UBHYfYs-0S5RL27@lm-ZmKv0}Z^0e_`%V`p!HLI^t+3yR)7z_&E+Vg7?S z$QMZ4p*lgRvzhbhf@UD{j;DOe+td^N@ z1vM~@R)kN|!zCK-bZ@cmt5N!E=rN7Iuj}<+oxg+4^s0kT#(cOL&gUdvQD)l_M4XL@ z;PYL+>zT>Z^$S(Bdx(=I@rPlRw)s8eaXcp$ z&MMgOs)4B4^8A10@#jf}?OALTTl=8$@f4*(3k0K;X><=?_pr~Kj5!&mHs@S zXk{RWyIL954nWToRFWz1W2B$gUum<^VykU6R+NxP+K7-hj|nf@hJG%D&EbytyRn4W zsrS{|QWjR+yVmq$nT~GY@dG#I{|NS-M;Gy4S}s+!1wy4o{byjS;|8ku|L#{%1^r!6 z1zOer=YRdb{my@V^gr>PT`Tgqr#!{N=T!aS%?*s~NLpWDu%@WcZF&5TUYSYW^XetP zHV-p9JXb8I76f<6TW^*&4RTlG9b`c5Xa?+KWA8P&y&raODwK0q))%~)x64%g#7H`nE?y)Ku2x*!+RV4eXs1Z>rluf=lVTfye)r3n-dcU)%S$ zHk#s2PPk%SF-N&4+=h8`?By4-RI17y@5biFTsEx~kD1^H`NXT!oS^2PZkm zcBb-OD;DTXzrQtJz%TjWvZ*YBE?dW3ZpX>&1eia1QKDvE1 z^otcmwfZ8BZs#)K*`5Lh*oZ!!lglsmbtV+dDBirTzIOc2f-Tar{c$ck^ZI!E&7*&f zM^$`|p?<@!)D9_2-mlBCLz+!$6<3$fcS^_aHN;j~(anReSoW#jnd<}jd8Ap%{bv(K zvoWc}RplPZ5BgXMA#vTnns;<_ct>>%z6E<0n8}y|;(A5j!b0tAiAWCjm=F5c!~2Vw zeuH~Do^5S?;Fo3a#yY>J1V1o+%kV%WNbPV6hy6$34@md&)I^H;O%VrGY7K~Rpz8~@ z{=L|YOx|0&eMkB~a=71R&m0%U_6gGGR?J1W$M8I(>Fm+yQ+tvwn!eSz-EMpQKtEG1 z_Z1a%xIKRI_>&3kIlQ+icY7au8azuluNJ}8iv%aoO+QDRcMi=~wx@J5n21tN?(9(kGzn>#l%a5yWdMISqY9bR5RBJKFE;OwWvER?oO)?+#%@q(+ zDc&B?C&h$L4u)cuPvSni(1pcNcTM&RG;DYXHHsK|8KVyDqOUQJ-SXTAzDv-n2Np;OGsan_*?l}+)?;mZpsQAV> z6~7HUPPQWC&VHLGrn)wCSbxVHd{HTacA;!keJ%8s3Xd_L*TT-$OAhL68povaI9%ga zFQui&8IAn26_Cyg|cv<%YtiGffIH zc(yBM2l1AwChtOo&E2~d(c#jvrx1Ds2K9k&>ZSJWu+jaO)UZ(*)@eQuW=?RO0R_IE zFJsoQsR+-UCY{pJ7qu3OPJ|y;#MvA_z7wcchN=@U3KhfZ`;q?N#qyQV+iIxtG+qmz z%guEfJoV^&L5yC>1spmp7Zk8Bvo1qyAHYnMA;)Ex$y)j&X5z= zifb8Av%Z8M($^PlYlk4ZdKR5Peyyt8Buw`N=El9P=t<)E%AHFpH`xtdp~QS^?`0%}5k%jj&FO1U^rpX) zSi678Y#l^?31V@Qzp-!JQHAXhpi9;gPVIOFSDc=M!Wbp@h>!1xl>kq^M!~yu4($5~ z-#&AMcv#U9kM&cY+s|YvqWN59v`baq02 z-BFQpy(h(mR^g#I@LEHWMW;Kh@z=}c#gCYN_G|iDQsvI>i?Ew9W=NL zSBTDt|CN8D=XV@^de9xpH~#{MgsRTBLXL%Rre=csKOPoy)GfMb-@2fX?tY?MaT|lr zYeC%$Kky|G7sY*>+q+fCSBUNtU>4927JEv^j0oQG0+x6S*k3@yfg{-%($$wknD|Rny^;*2?f|u4r2@a;Ps(c@GpD0VO_H_uHPG##O2raZW$U=E&Eip`k3_cS&~6{>`&gYlFN=4y z4}KWhyNyV`u)X^8yEWa^yqeGY&Ky3^$DRs=iN@w3skwb`P=5HT1wP5) z>Mw;CCNe}T%3K(`-}aU{V6?HHh$!z#dC+NqABtceSji{t`#FXE{E#aruAlefyM=bk z9FRA#jtZ?jznZMla64tkQ67hrOVPTi@|WRfa7;H@Zn}qj0lT_-b@J_{kHvv|;V&b# z!^nk=&z8{I&%8L5o0K(O(UqD9!{XS(#lwelX|K@gs##83MW41FyT`APXW99q&jIjl zwo6Zi+EC77y%UJ3F;o-DR;j!1Z`t4P6~NwYj%|dP5)G_vu;!6F^Vg|OiB$mM8G9g7 zm%Ms3I=+bZ;Raa|Z%WmEWKFU2rs!UF8w9p>NJS44_FjZ-x`%eA)d*bH%E$crW;9?7 z?u^PlDPF zd?E^dr*y+@u9p3G;y*0F!+9K*HP(9vK}5U{ArI;nhrxf$jBhFj{SIa1q9HX8k)_l? zHtb>Io4MmZO=QHI-XbS#C=X4HKr$a!4>+c-5BRKlKli}+oMPBGHnEak5tF%+P$QLd zfLNQ|VZ;UEEMp&s#(Oz9P@MLyk~)HhyDDct3m?B}=RQz!*o~*6y!V@R|J6UsMgzh% zxsNU6Z{j?2<3y=1t9~n4f2w~=O#LGtAve+puJIGamI^^XU$X1})_rL1!Qh>4tJ2{E z1clSmnWN&?1r)p2Rm8&`ANy`6?8ciGu2+pRXEq2ATZ_Nfe|CP*sI>6G{LNQ|8T+q7 zapQ?<8LpBeX`K}w`R`P=Q?K_Sl{2BGJB70JoT?gHiJsch>XuI{6DobeRxp>h=91bv zLqF6HTI%Knl$S6>{%W_$`Zd)|~E z*Sp-?#s23?gM|0%+c$T1Iz?DnM!JULyAd6cr}Y_clU8dgCQiTpxy8^6G`Jij{VA#a z)YDIzG16GuvPVM$Hntmx_#9Lcy3b@R`rc~LjT-n?&xic?3V!!bofzEDI8(mIf%4~T z4MyPj;(=0V1#qyW*tSAO3rjcT@mfnR$HHSUlA=qxx}p~A7&m-)gl4t%upfu3dFW5S z!;ds%P*T;O?q3CvF{kMNU=hE1fZ?;>yNb=tAu;ML; z1_h0;Hil}(Xk#-f9x=DrS1Dktyqm(*ejeSUt!#b`=Qbx26&s&X)N>oL#Vv|Q1{Rgq zcYJZMr@XyEzK%~~aZ2k$-j1*mqv4tls{;6;x#2O(X>dNRmpD3aO);2xWj^d@v(V5R z71X=?^8q6vY}Ds^ms)}uvCe5N=!7M{vErG>j971%#LDqbF|2Iq3rzF5s{FV>uF+ru zWs*kt`sEG)jYN8l-RXAkkFX<**u^hDh50L|NM&MoGB4SZSk?4iWI6rL4*GJ)RkS|u zBk|IZ*(2jDPlJRjmnF~T5$n=^<>$wV6^r6c`;df&@7F!E2a%cM?%P7Bl2~)I)XO!Z z!_x~n?Z^7Ru{ZPSU2r)1;*z*^p~3ihtKU4CDZyr2IOwvDeEyx61M*5#Wa$|jXH^$o zT)3|y+pDMYho)L{e&r|e`2z{lR=fdTpo2dcequ%WaiX>WzWv!rNs_uKg{{)%yriZa z2lpXfR#rr7LVDX>qqRGF?_2HWY>1cC<=E6h2Y4e*?=uK@5=|r@T4IS;q3nKSYIgC( z{J9f$?I)60^I~C4H-eo~uc)SEQ`@iI4b~hNS3cvFCP)I=lw` zH^#F!-@oBBeyC_&%D&Xx>Uwt`{&P-Mm3gFd==g7c$NQ?c1XyJ*`QJQSqBXpl?7583 zrFr9roY5|BKP?hd{A4T)9%wr0vv5yE)|8sXwiPSao!c^isTXfaS|BS^K?U_WwGK|^{qaLgpi>2g@e{q6r` z%p(otDv#*axvp7_`n3|t)pH$o5fQBt3&%SJu!mPP!e00qmQdb@4`0>4yY&9ch4y4l zo0lr%%S`zsi3hWp(-q<)NS0ZQRljsW%CHMR`)G_z2P6>NlXSFpH0faP&Ym3W##aEv z(c0rzG=#{%rvV0>N~rpxS8Oh=po03f&%vJ1c_?qvim;&ERx2faFG;vJT$lNQ@@c=KL6E}T%Zk#NOUp5PR!gk=G!0fU*yhv| z{j=d)7TBmLs~>N|HLFk&KH|;3w zzW`<`2`+DDLBPhql^eGaYVrwwNhK3hCQg>7D2q8}z!h(aU@uHRRREXz{y)Th^1O_@q8U&K>_Y-Zto!?HCb9D+oIEX)siT>p+U);?I z0rCXfWzGfQgtAKw{lUc%h9-ZR8UspB$lKG0cmrFRq@zw}Ap7KN2=AK?8>?S4eF;fY zKT&{cB@=*-z~`#anni&No$KZ0q$`hyof$U#qR(&IA_J9m;Gy#q0uo7Is&N$s(Ow7=rCEj)<2gpUa0FY zpz1#^;)K_hNZ8+qx2gO6R5O=LXiJ>AYUz_qby~5cvJ?@7-))Nz?qKl28G1bHOYH<} zSdO1x2lrrJKv!2#jWx86lP-c`i!HqE<8IBBl(u#x~3UxN(n-t(bX8n5ilc(jjh~kC-m6j! zcmmfS*gcOStgYr!!;9ah&Y>>;-Z!klZW7%eb5@fUkaWTg1&%zn@GkeuQjG6{Qth3C z$p?3(;OAi6DN!7y%!@rl#^14??}E4D?9jbGlyw2(Tj_G!S@daeuo{4xxCVK=WXBF= z3SlQfV^>Xy;?|o-^^}#ZvH-K-IP?Ovr+g!>w}MG;2gPBRFQxw^#|DwcFX9sNEF+`P z305HyynY)hKLZaw5*5C)cm>z2KhfNfop+)0v!k=Me zH$~D`Sc#xn#&F-HbZr1FblDGHlWokbkIjWAkpKpd%l)Ij3WR_h= zdDhH%u$DL-hmkG1ir6y9KDXHyhhmw@roMt(Q<`cC5qCX+!=S51H+OXR*u%kg?I48z zMx#e_JR@3%kIqq$kFLa6GxkvY$x6E1G?bE>b~6^%u3UhzmA!!Jo*YQq~JD~qP2avPAFSN=~IV$Oa+Z?Dl$K3 zzYnm?m&1B#zEn`$?yBq;{0dBxKv2(>e+Sz*;jdZSTO`RD8EMl{D9-zX5U*Qwh8@Wm zY^xR-^%HiLab`a~nw;)Fv==+jX5@mn==qLR(z0pHgiPt{z$XQ(^Sof@D%+-xh0cCBNL!CJ7%^N$xoZG0qN>*3YJ6bqq zUoE3gA5xCoYDfha%7ZkQQ6pY8gB*g`w1fI3wfAst52%IDKk=#7Cieyd5H}-*7hkOu z_WS|gnz9DS83@4J-U^VaAhenNV>3FFqMK#Yg!~0~?%cDJREr?$`cVN)HPmLrg;Hqr zPv#vcu)J|Z;?V(>`tMJ(e`Gy zt;T}bN6v)K!oV6b@Q};0C6pc6)HiUeULsw`p;$=+SZ7BU8ZGf>uqFYlvEhtoWj}bp zrDvX$;_Mt0#`WNkQh27=A$<&bZ(F^zsQ)I!1@0@j&ob)Rd;5(8tZY)mzCJ@#7&=@K!de70(n-PZ$(jq2E0MiH@?Lz7O2mQW*< zNr~Nmbf5(vHo7~LnS7XWKY?h_AZ1fo`i{91KDGKP;*k&;>d{tT(mo7_gx1fMQ&TsNG?H^R#4Fzs*D|*114x(qE(L^{sx+$PSDwD zv$o_9yqCGz?+(n;t7VqMNPy%&*WlVV_$VYHLKdv6X(zNOjvX5rrS0e0>>!lBT|K-}jVq&5W%%|dzM47zRufIg?y z0IDglH}(MmOy$gix z^MO!S_lMXII&1yW`eg{Uk$Gj4*(6x`zLHiyH#KL z_SVcMa+)j^JCiEv`v)hh0A-3N#6^In!=I`3FC>6e`HLnTqrn6~(C}l^%^i<-UQ!ty zFhl{SUPbhcw50I?EJ>~%)a4ar>PH^D&xt>{+R!5$2+}$pWi(*e@0_-wys!Wf@lIQs zE*7u!S@T`BTTwCGh-tG_9y=F) zQIdrkp$DK4#IJLo%e{*|iJj-re~%pTyyZBl?@PQNz{L8H{nfYJN#L3JS1SLOtcTBK zelmya>YwH$_0=0)1VD7I5$U_YD95IjqqpRt*suH5%c~`1iO)Bg0g5C5N=<<}ixy%{(IBDYNVCWE}T+B8xSO7x$pKlpL_Scn#OU)g~KWz@c>|6fy zfj*4_bTG*>`Mvm-Q^bAX9vo`HF)2{iJH6D3j7#a?klf!owhus^>KiaoBj95!;F3AP z{QnL7elJ0M2r^hmF}{U?Vhc;@7sG&$f1JY|NZ$o!`NTY15MZOPBz?5AiZaUmZf*9Y z{%Se`U-{(<*$>*eiPnsHO__u&$@((}vRzgq7%H?3%;bfdytujw5$5YRpbHt^_CU@_ zts|T+LY=DJZE_R}wfj|YHCJ?10KW^yr71qTA8d2bfYWmkkQ=Xzc>?d-@l$UiiTZ2I z3Pc|ZV1UWG!QVP-!XGBJ;Y!e*f7-^pBmbHcx`h%4WjYrw>5}}~Yh`r8fO|-J&u)GC z2$UYVf;@%%z%iX8&o^|O3cz;T1`e$tzu0FueWz~$ol^6E+OK%D07SR}U5y}$(SxqC zx!}QpvCgpYd&CI7Z+cf!EZ|QxUGauOOlC{Dcji$`*~2beM*Se9o=cD81isRgz}sAS z1v($2z@9%*ypqu4j)3O=ZK%*R_!Trf{|FBhV7nSEZ17*i)do+++P>=+p!#3Yi_|>| ziYMY}|DPYzMS}@M)oEU!W(`Qv7KLuteYZb>SDK-}zjaW!@)J5kIdD^7wF#~}YTpiT ze`cbhQBd{y-yXR$66Vox0a^)lo&m+it~(6*p;4)=|LHIXVqjM2bKB?-E{zDda+;2S z#58&+ce)b|o=Uj=$5zKU@I-+kr{`4pPF?$NBW~BA%<$4`{mIPuewmMpguesp7YH&X zPUpC{u^B9iO{>V&=!#i@a=LV)kvQT13{T)Xl)rx_zoT5Eog;lN)^DTqq^g(F%*hs& z`7Mo~{5%yWmWYIDyGbO16bp6gc!ydYh^}l?1vvOX0=p-)eVMBCSvff7Y;8Ir&osdH z$=~s%icK@8t&v@239;O~UU?$4d^(JnO#Hs`FssV^i}L>t5+5im{`yC&xYF)N&zci1X`P0+i8ee{oE>@}j7N)UMLT(mR8 z&z>QI0lNi9cwyqhQD2D6gBigM-sXIy+d0|$BEKlRkai8!otfP(kCINJIWOpH56HA{ z>2sp_nnfjNEHV0gM3u8!@3YDTaCH3TtelU~S}UnGxw(B&gZ7_Ci>T4LhG+*fq8|{1 z!z4xhtP9L|=%+BrRC%rnv`chMW9lieXGpY4K-8FzdvbNJlFK(-%j3~V(;qE2M&x5l z13$c;)+SZGaiHx4>#H`PJv(m>z8n#GL%C}T|Ai2gY!H--q6hj6SiXP1ah_zdD);j+ z4G^A`4?dc@+7wA9el2k79#@e!iU8`!+8FQ!6mx|*&${BBdP-5&x)u>zQc9oU1b!P* zQ7mWm<6QW!t%y7531HwtTwvh<7JUOCmZwc2rU^(j2mXyd(4{2k7rEMO43uGA*yVLpX;QlQb@y`wLeA(#nbrfbXb0lrn1OyQ`RbJ&aye z{}&3n8hy3f{xXGp69h$`?cZv@r#}HSdhY?@04Mj+HgUdVG5h4rTO=M_ou+@qf%*~a zmpP?9`xJ^b8(l<&XIPvD%i>(P?W`V9-3^#6pseozUFkg7DFEK-FZCx8{q?*7#D$Z< ze-1uSX#3c-{!zj)^>(FT-0CcJkCs7pQ0~QnaRH*Q>;sn5w_yRLJ)z?0P4oi(h5-6_ zrli&UPJzp=X2TICm2`NNcRV8#)&p|ADfH%AVu|#O!r8pgnR3TG8m`njY(b9})8!IW z7-R@aKRwWD7~1+RbbFUAuv~jc715^;(yU3F*h}>s+J?68UUQ&)5>KmhY)qN?+2f$F z4J6|pF{8d6n0vjUs^9K-dgxwP!s*BEPp5{Zg|v?G3P*+mQy(_OlKB4-a>FlY-Irjh z$lT9cIrqJ+LxKZ*M{5ke4lcZb{5&QSs`@&{7t0&c9A9@)Qg!Yo1{JCc_RhPrK@lXf z)5&Z6V}8s+bfERK1OYPqZ6+tOeCu`p)CWGKJ9Lnl-iD!3y~g`O)zcfgnoL~i1|#{I zFEj=c7AGo%yt{j9KO=PHRMm50R|j!&*7NUag)igIDbDYYbfoPRvYwt5)w4m8cbQHb(DCgq zZKq>hFV4?ksVWo@mrN7}QA~Vv*V6sU4p`LJb_*8DDO1u}^G#29Uv2Q}WIOT`EW-8R z`k4Xuh2{#M0O5NIOE(l;KvVg>Sv>uxMUE?e&k=3j> zkR+g;$(~wY4bg)4#RCn%7j9PUPgUDmJFRV?235O~RHMt~7lB(01>=6#4CM1-1)H6E z)Eko<2N>bpRKq;I(gJho^_hGl_u}r%D($<|3D<*Lr$Y~b+Fq(eG#lbK5(nl)IREs2 zH<)_Pa@Y&v7$jdvup8Cr7H8{%ns%LY*0}}lsU}p9<{$)G*GF6fa-gg4K%=;{)4tY% zx@pm>IE=fsE3A_(n`PTfzrYn1cK-uM_1q7|W)0`H8Ac_%E@tjIytuU7o;A^+XkaJk z*7Nx0{Ca2`R0~;?=hT0|mF%kEw^%Q!<&ToE1uv2ZtjbA*{! zeHg#>cOF|oNHZF)!`P}MwZ)y--m*RH^?HfKletF_Y8e9yS$@KvNzncq(>>jCrzRbG zj}7yEw%vJON7cpkpT$bD-ARweP2*+SB48TTE#BLZMR$*!F%-!0T_j=+Y7bPMw4_In z9;G-hRa6AHCmY3qP+~zDnaCF=Q@hi@HhY9!%lRqPGVzFcqh4Q~1ej2^&M?b(BdOT_ zs3CjD_oRTrk5QAInnnl37B;Q5^31JjO-2>1AXf(s?`NMZS{Z%ZlL_VB z{*wlMG09Z|I0*3;i_bX@8jm&SEgZPj;lcH|8}V&`>=8Yn)s21v#JG)*XGe z(6$m{&V_8pEH)uCaFAh1Lb+zzsWf!Vm38bMw^6SCNaf?gvv_S){o)4D{knJ4X&Z@l zd%jl73IOsOUm&u5;KZI%<&O7Lb4UhP8k2+*2a35Brh-M@l^D{h`2L;!VPInSOP)^E zx01!9$@8}IZ}sV4`1D-|B*X3zU7nZR{EFpw8PNRCeq#BeuNeU_%B){HwP_{?>9$iN zGu_aq@N&O4O#N%p@l3Orb+zmn=k81OeP!sXP3#BoY4+9K^NJ|(5(loh+0h*76UV^& zT!Zee;99QMN6BhS)<=pwQ73+dY1a|==38P znvKH1i)|$0ojm^F+_!%j>zsar=Zy7T3SzI8)M{rK4^Mf2OIwPS>$IBaxgCz%Ffn+s z+FqI9w8HeS)78)%tMw1)2t}{j(<+PATTVYJa)#CMABrLopKuRjb*J%QC8 zSOjQ#3X>D}8}*Tl|Lyglk{qpUQhA;k8&fQk^ZvbCZAUq!WoUe4m8n;lfSY~et-Qz8 zb6;u#%6L`t{f(58SRs!}h^Gi-W0gCU;{IFw*xmGJrSj6S zyt00xqth+uY7}vyBYt3*uBpNqb8)gxeeidCoI^F1H9QLL*Glvi!YNlOuJ^T{pxr6~ z6mpHesIYrw?C07Hv5GUG+HXQMFLC&7Kb0ys)D#X-4ti8$&>tdBV~&h>NCaP$Pj^x% z$ap*Bjq1-`*>%`BpA9x++8CGh>|J3+Y7U{`u*v0YdC}2h(pTk-F+h|LsQu){EmE~S zhWB-Kl!`t#l0BS|S${AH@B0d~u?p z^x3q#l{IhXsYt)8zvKaqvKa;)~Va6zewJMUt701N!7BDDIHpP zg^PTF4BapAVa+zJ9857CqDdT;{9*F-6qWeUkKprs{U&#^+Jm>72tpFt7hgXffaX5l zPB{%cOF-=sE`U@EUvlA3uF6%HD(lYs;!N8I6=2UCR8|96V=!jc$Y({a?fE}d55f`b z|HB0U&`eYhgOSXh5zh+Bw86~?sV;t&y~Yw6D>(cp zv)+Ie!f$6deoX7fBN=O`dtO%%*?-#^KXN&PoE`YYBa^_AaH-+#&%J#ZO~IVC>%vvz z4_?%xZw4Xq(f|}YMlW;GFL@Hllxx)ahG`__7GImzlTxuLKwCBE24zhW>%7qy?T7x* zD00zmGhUKnn>=}U+E!Z44?g-cD+!ktl5c!y+Yf_5k0Zd+>3O|^LL$MHe>h5}B!iY| zuS>m9haN}8Ps_GVJGdw?E{s`7lrCp-CgR%`jFKSagUVeZracRQe;n?GT++OQsPV){KJ)`qJsCozl=12>lOj}yJYSNUgY;+avT3vfUz+)B7Z}Zxkv7B zoC(nfIL)k#;+-(BupMQh2kjugf^Z0lRVKguA&c3N5-0hC-a~H-@sbj~RMXb}c2LW$ z=o>B5K>+|TSUndGz3WqT*FW))LECKTafq(=x6Lwn+*}B;UJJ++;~VWR_7C9If(xHN z^(9o8mOG1q4|}MdwHsJkQ#~V3aSVSkAhw>WGwkUhZS4pHHg!RNh8`TrS|sO&F1dRX zIdI%XKWIe---$KI5;bS%u-dye)eTzt5_6V&6xH!!t0N8bL#s+6s{l?6b=V|jaNfn;3Es~8K>=+A>E{0GhZttoKmInYAo{@7grH{a+0K1Y zzJ#yk#t}nI&GztLB0z-$2@SG*(Z{taNW6#XWfYME6NJ>~y zdCtsiw&Bw%Y+SQQOi!DXx0jp32>Dz|yDPe3gfCQZoDF(<7I;?KjGc3Z_wkX{zNK`8 zvH$C!2q9%Of8^|kwtlPRA^4Cy<)#o-_}J?^nvjKw<)tBbLuFIr2zi2|%#W8Y-{;b- z*W6?Fw`A4M@gwAUT!88hu7ckvXACs>5cgpvP~T)8}1x{xB%W^>EE~-0dX;NHiEK$s|ye?TIPLOw4XvkEUCXv%;6$E#CBn5jQJNx)D)_$L^RdPhX5GpsvLIVt*lk z9o*cIC9^Ff4cB^p7mEt1U6zYyv;&zSSb~g{TIW%4M~FX|HBmoyUCgs07yy5yfc?y+ zuC>;`iDUz6=93_PYfb+bJM?%@<(sMYobRE8h#ZM3aQ^%-n3HoE2}TuijU7CFM14K18S#4Ia5S6k zcJ-V9+<`WUlIWKd#ARf`nPS-UJt-du%_qjAn?M?@nB7Q{RIP`O9~IwG}sdL4H}-5sm?B_wUc2-67wT!W$JnDf#6p z#-q7fJLWUSt5y7K=cIL7W8zs$cZ0hSO3!Hee*B1tBK(-P$IBL3a5kR-y3*s1jL zNoa+obyD#!*gESDn{`sQH-3~V=^0aMwP8WGH=c-TvfjD&RZONyceO+5McQ9BD;5iW z*Lw6ImlV=e~97^_~l_-1%Km+}T>|qoGpT3;l8Vr`Kz^HyCk~$dJ|Vfj0AJ)?27= z$aNI2+uI0aap^TUcOZl%kDWxSWgwk*z9d7Es`HI!YrNvTJrj2B^N}wHo~m#j#Q|WL zFNJhkI@6;8hfr+JiiLEI~` zH|biI8tTC+`O8{~@ekyJB3YIHQRm_!sMLVnFto#!PpOcY&qHMxcE)!$bfYMyGP6d8 zpfj>?4%ONH?BT3dPd$b_O~!R+e0c$%R)b=8{5N&3sAv+fhLt>Dg)@h8jmtwa0?fG1 z)=Ho}u~m7%MzJd4pfEbHwrTzgm~IpG@GoE28==IyVTCBB8uG)Wa-k~&1MdwCk*W_* z#B(oJpcAduQHWr0-VOP+SiOXSAMdhnfV;)c;QW^HURAF6e5 z_ci7sWju#-Q&*=ssZ4~uypnYT z#&$>pyKQI6vn}cma_|{fxy-58wH^Eu_0G(me}Wd5Rw_9jY%$0%_LX=1eWEfz zK0+Yzgh5aX)+^q{C_;AP%weeVD-S{`6KB0;Gc=ht9wY7VWm&$8vc)^_I>J;P0Ooif z#OaDYZjb?PZQOjCZ8yYjeXhc+n(0VQMFq9EVOa4i*R81T4JDi2w3}uHku`C zfZ-xsP>RI_zkJ!LVKTL#g4@}!#`y^oj<$q7DdrKx#-+j?R!6Kt^$(;` zGnCP;wkSTr&3M|QRSTX?t08C`@n|~C0}t9588oW3^viu74u6oYx`c8)db9T2x|G>{ z&1&r%G*{$QZZO10~&o$M@_6V81M)n1~zPm*n40b#Jljn&fqQ;?WMVi~HnYcykgiQ_0=!DyP&ieU71x*h4Qe8j0;SKkMmf6z8 z*!AGzHB`xldI@BP!Is6wy}*-UB-rv)4j@TZJUDM>y?9qsNbU%0GfcWC5=2vHpi-`H zN40>NUU%yT`O$siIb2WmbcgVZznEkXyfFF*{*t}wc7DjAIO6L)WqGYomTkG-K|b~4 z^CV|hsUrhV7Ls%4M&V@SNUM&phLX;R6x7y3f=if>aZ-n}=7&W6*8$@m?3@PRSwdWD zcc4%#6w(Dh%M4ibFfx|GrP-R;pSSEXD{KPgJ3{q67vj&ufcfwv3sKww;@GQ}pU!jZ z0(B=xKC_<1LxoP_00x~;_JttpU^1fbbP33@IpDdLP@|Ffb0>TkZBue1h(+TS5^q{b zyHfJL5U6}J9?Afy%dsE8%wgC}O2M;?&BdQkECYlSH^rYqTJO^jdi0vZj`P0EPt*l3 zg@e8PRfg}~8Vb3)Fl?2)6$92ll6by=GF{-n>wYaqVtjy^G=0}@Q^Z^;Y8>7{@=wub zkg||EAabuY=dfoDZM(U6_Fj3X)2cSyHTV(?5X_yE61YB9oA&^vm)W~W;B>Q`(azr@>x^HIR6qg1c#ghjeyd(JqPSSRW&*?ke_-H_ zd-B0g>hAEI&At1BEPGCPxoC}eI%Lxsjh&YDTQiTgh4XbI_tyh0C7yq4v{cqreH&M~U`xD5qpF`7%O6FTj!4%U$fcImP=A z@Zm`OAA?ML$`aR5U?%0A$%jvmO#>}H1(+doT_pxyDqtjWo6*C*aWNoKnWrU{`R-X_ ze_ONG7cD0|KjsUSo+@ffB-C);P8@(-*BF!gQYr=Y|fTQ2LMlpVD4Ui!qDm9^T z3czYsXJIRve&}g9Uac)U7j{zJeln9`ESa0_1P^SL%bDf$9 zCp*UAWd%OySY64qG~0%sE8hcU{;BI45SrSlP51r+xGI04e8?FfN}+{wSC@bZwouku zMDc1}dg*4b73)8tifX4npVdmJD{E7U3&D$5tL9!&o{>}=Y+7y}Rx&ysnFxBkuK-Jz z(_R}(EN2~9R>QD=Z{05#df8}+;6{TjG3>#vY(laE+I4|F*HA65>eOFE!S*0+|{Nd&ACs#_*P71 zlGP=2opUg@Qj6@nOp};_Gwi_0{e1YQzG#_VwdcRfr`_v=Z`Xx`b-j_|p(*qqB(8)%F^g$|iS`}p%bu%8`lzehAH2O9fJ2n=ZqX6o_1V)_Y8^BUG`DD)FzixgXvQcXUx5tFdaXPV z`YJ*8KtbwU#UJ5`{s>+l9?ELlEmrav2c1i-b5`+w>E_)0j>}6 z$mg)>h2e(jyPad#1tCMuYq}*vXKHS#vJD>(aCy9k?A1-zJPB^iLy$i&AW5!xBi5Vs zz;R#zm7D>3EDIGf-n4^+ELy2_--p}~qUP;h5E?X%ehne*S8Cl?bptlstlU!-}ByXIC@bsUyz`I2@6c1?SeG5;lRVLo5Cx+~6AWq8>m z9L%y6P!s_sXB5+0L^-iRrWR0+Mm1COD2x-{V+0f|1qmro5C<4(W#7ByVyEvRxOL`H zyjv`lID=%hy9n;?hstruEf$JFrkJDZr%ckDE4|8SJ)}!g*|k2Q{MsL zpc^{lO_niSP%JwnX}`Y=*g;i*9)7sW$17V0SE{t-%{FZ=^_mFj>H@!g;Q$k`)z41{?spv)E{1Hpo>kK3RYlW#KarFVi%MYPCX zui=DLhabAMOF@#TM04Kf>Yh`8#<~wPdF9YTH7z8bt?*)#sR&t8tx#0@uxayfNc}uY zp8)FS5?fk_bFW!Xspta>Flm7~DMFz-`_)8onfdssoKbl*H(V((PNZ%Nn%mXmfS0SH z5%kX8@yxD1bU7fZ@l6;hiP`wbeFphvYkUuIq!V1tiu@lzh7{yN(2*t1jE|mG>>Yp> zKj!Gbm7X8Bn<0wxGU6z>R(sjQZrSRkzm4_QYb^|(HhTvbbF3l>Sj&QfS@==fSdbtTD+ATa9K}7`iUubTL&BrG z*E<0TY&ZTxCqDNFb`Ii<_n5$_lr(}uR{#Y;UIV~; za%$*S(VXF!STU)QJGj1-ny#-kwUy#_Uvi-Kr~~W8Jyo1*anqc{mS(J+MuYn4f)`Et zN+)P>-{`s;;Qa`yz+KKHb@YSfu5?iSsV-BxPoT%saEJXY^VYFgxB~?@m2Hn-6#w&!&w0Tq#WH)=`ZMV(Ra|Be1$qp((a_=Ue8%P$3n8k6<5w z2Cx#FVzhkrwR={&JK$_RGu~P{-fM2&sik-bKs&%UU19Q2j{>iLpX#*tdtuXD>YdOr zX&Eag%6ZhRGk)ki%N+Y?DH0s!^*tgCQVahd*VX z+nYdV9W6sFKt`z(Ggs9Id7IONplA9}0G0vb@J}^!V2F1m;A7LgAJJoLz-b=96+|5n!so22-K;(}PaMr%#%gOpFh7RZshBt95e1 zQC7X!xxB0TodAt(4B{*_-!%&A6hm;6Xh3XEe?Z}AmdS0cx@i*Nf?RU|RSJMDe$-Pi znzvhR>XSEbC%-UpgS=hnz%*5vF8k7DdLLuwK=A+kokJ$bk<`SaN-bc(;54#3V*=M^KokdoA`-JvXE}6klqeBQS?#vUGnjef8kl(O`cuG zb*O0!<1}U^@@|ZhL~540gr_47q#HMMzOH#XjMi4-(-sZO-hK>_{3G~_G#Ca$mr5)9 z;bNZp19r9p`I1#4>uaqNWo}$1Tc<3t@GNaH!89Kk=2FjfPgW7(sVAPJM_z38y%gL3 z8^e#0XfyC;xc8&k_tS8|Vi3PRAU_0E9g~~R7Vxn zfZVTSfjqn@xSiLqR>xh3c?d;y+vYbRbKp?pO$DD7t$LJZAl-;C!RWh&Qjpq^uAY4m zl%?pARD_vSenH8Mi2CD#s={$TS=-){fZ;>6gP>8~X`8wd-NEv&fsy!3c1g#KcMu2s zr~h_u-1i;Natw10y@j!AV>%ss^jZzMdV}0Sk+L*r0A zCX}u)OfS{${NVaQkq&hpIXb2Y!DTzkka&)u&enD&%yZYS4Cro|1uajkE zO}|clADXGC9n=CErdjA|K*O%t@1VvVA_y_%c58lZ+44+HBg_@0c@Q-IVK!9j?r4@f zjA!a1+eS+lF-w=-uMbcU?bq8u!yHz358&(ZRZJ`0H6}a$mQ_Eqi>s0HWn(x4?H%ib z>_+j;e*i?|6!sUg8B-?PJB1hT(Y%h=S+Xwgdmxh$5zqo!jPNxzb8VOb)wpY%3rXg! zdMl_|GM_zZ{sPqsj^)j>D*l`YZiPblpI5poG#Q6>ObCQbdionfI46eJWP~?H8nx0= z>?d|ad0g<=Ggh6u;rram?m;&l@eiQKhby=KLTUNAzdL{#XFa%v*%aV1Nr7sC)dUw& zW+E(ikOR^8jIEny)PjcK_I01PpkrM!D<94o20!*zfEJxLQOfLHD>v=)03!NZUJO{; zwnZBLKnDVs=@4%M=*G+z<8RuO^)bvUnmX3y@=IoBY_=1@QL*5JrOsq3!k>#haV69l*2^M~Ky@!fAjT-mx*=2*8ToN}22Hb(2! zW8YEZ;Z_rQL$C8UR&?CoN%2qgG>?fG^6NX|4Ae|Z$7jEQgL>M)_jG|Z@n5N!5!$f> zC-qE)UN2V`7Mxp3E*fq1l!b7!`y-|tiFbibi_WxzE-w$av!2`0-fnWRe{)Cc#&^#3 z%gfuY8bpWdEWRmv6FRIE>(2!j3X}7_5Q{$sIBl~ZQw2LqL_Ahi*^EJPGjD`M2VCnk z8U|8(a>#n;!%|K0^cxjlI4u?*ZS?Eh2C^LuH3?O@1(&_1C%=!MY@F^|N`zIuvumre z$Z!C@)!p9; zBp-hHkmvj2-;NYb`G;}>V8$;y@{sEn7qsmFKJtGbH2l8fp3DcD!NP^2Be^G$R!AXO zwfB|}{nk19`Nc1QE=_N~!M(zzt&&|tTyR z-PbLVKD7?j@1}FS0aSr$c{cRGW*SaxG}wvOIo11wU{ef!I_KgO12%0?A_P~bVa zxXM`hu197wM?s{jvqH@4JjZokCz1FptO3`vOD^$DM$E(|lR)@zs5so0Cgi@}&0)}! zTTv+%!+>+^@>0f>ABj}51Wocz%AUl4Hdt}{WqTQfv0aZ?EmMTRyLHWuvEAd{INN*< z^3!`QheL}?C)+I};qY^w^EJ+$m@-blh(%8-#7aG({lnx!6O*+FJ9B(=ae3v;2LYMi z0+$xX<+{T@`!*_FjIR#K%jv++eEiJBIBY5?JReO6O>y1Tb}+%#{t9r78NF1p4xw^{{dPg;Atq9{@!MHXr=qZQaj38{L`&``2r~$=ITnLa4CxWd>j~c zi6U|7kciiG(jp3AbJP89h5VQEe9k zdmbM=46k4BdmxfJFSy^ANY+-isoIFC63J%|tCDGYOhk07!_KU^qeP`> z*|y^LyhqkGR^lHUV`g$ayHFP|fbKC4Jdh#}8Ll&jT?$)r;XfJDRRw4lue|L{&?&eX zD4_++A6spQ%ousA--k8*nCjBG^`*BdVFU3XFNp25c3*>B%C3=h$}F3DxG<1BsqqQn zD_dXG>%yhcox|8)zkZ%ar^MQ#}FYrMQw2F67S{ z7bG*X!Z}9Yx4x{+&4UEgF5U&DHHMm2{R!UxY^=^BN~|j!mnJ{pqWu!q2M0XV-6nqP zy#s$y=vk|2i+9TmySHTbw(Z~0=q)(h!5fiUHs@UMDtSk{xE&+D5F5Bx-K;!Ao@sYP$2z=+bF5*1GIVf>pl+}It8}g2)TCRids%NGD9cUdQMc67 z5v3xTN++}OijLlvcTnNH1`}J`BfZ|raq;QIs|wI_od+$4L2W!|zJn9SfnR=ia7Kjs(fzdG)2LH)~n|A4H zEB5y)8tO08Beh|oIYn}DgWlIT;(P5*MrL)FimtlKOR)CH*9YP@1q2(%8$&CV74|q1 zL<+Eu`6e>6t^A%oORfk;@B^R{|- zQF(b8m&)p#JE!iNJcAKSNkh-ve6(#EMg-~A z*98u}tkJPMo4c$?`$%0CIcGiR$SNbddWlQS(!-T{cCo(tntA&O&u9_3DC7BL_KHp0 zWoapAU)hc2@uJ*xOvr<>rUr%bOl_^`*4e9z@e%uM?8A5C1`oG!j+PYm-Df7k37oF2 zbhA#~Ra=O=?ppv)jIu^@mVjDIE^D>>q2RN7U>5kKTkebpGn(qO+*NUX_Vu3}@~G8L zP7fMVLndip#+zvcmpthfpBnHIl;0`ZUoILtCX1A}pQ9$_}an3tD+h4cVv2 znbI_Weh#?#3$a8F^UXDL!C*~Ge{}5KM7EQ2PnPmny{L9*r+Cz=dVa7-pgA6GDPGd> zH6dzK_he8TCC%P>xgf4;ELTHh*rq2{@vR>sUO|3OfNtANqR=kQ|o6vj%8Y%USz{`o{fI0tPz zTN~yxTxRZm0F)lGw;WV6b@7wah*-h9_)uF~y5n@#WXQd{pz96|yUl#jtuM^$n)HgZ z1maC6-3Jn7dL2K@+F#y2pSNtFuJJdAA@lWLh4;-LIqz(Wml`N$eUIdtlmpl&J~1Fu zLFv$``L<16`y<`tGDfR*kq)kb6*e$(`;FM3Mi)xpU`AU$D&~9b7ROq_dq-0|yD?qh zxiR(ZQp$B*q;4XNqIRScYl6^b}socKptRw>jWqwYmK`<2G!J zznx3JGR^O*ElYD-_^2Wu<0WI)h4OKW6B{^vD0=2PTb72X@sU`{8$O5uaAUfeGh`e< z$0M2{pnh{`J8;T)^rFJaZ;ehn4FyRlE`sQtI#CKgJ;}TZhf_sLbrtoDHFj+MntlB4 z_wMB$nUR-sW9ZHC{^jYIb?vgw%(GseUXEET%QG(%R(3L;yB@9$ z<^{>Dt*~OHnZM{BMg{Fps!`p%M)X7U)%D12?b1{eSojm$Ba)(JjGOMnyI1QpGOxgT z0TweuTCLdnNy#w*h{ts0wk+0}Xnv5a;xO)~D#w7FnVvf`9u%B!Y9QW@stBXr5??q` zvy$1_%asp^*dVWZmXOmuRssTG4w}*`IEj?y=%m+>;N9+*#@G@96!0y*H<%sxPnD&acK}w&&*g zb$jm3edBcF%l#Ou*>UL--?tyRZw@S_U0$AE`Qpw!r&ROVKu5^CrmV5syg5P4*UnED zxcpt_>h;o<$FE77m8YCx+&23)mz}%yeJOp7sMKxiU+Q=-{dG<4so0uFdmctsy>D0- z`tEI0?aJrZmNR|N`lG_VZmsjPSw^4l_FA5--uH>C`SFyQJIl{)whjOES8=JmuifSa zKMouzGIRZP_jtj{e_7RM<{bSlJkt@B9z2^h&+aX_&cAQcr=J(UP5--S=ka&H-o(zm z_CoYmXaBrYd-6>7zj$^sH|FlAe{<*sx6VsfMrwZY zTHsEA_cd=mOQwZh%eJ`JEN}ZO{dUFPpD(9Q30=DQNy(eWN!P14nTLM)He37m)myV8 z*Kdxm_;?(6cwyb{HT5r!)t@xmbN{AHICp(Ku=3SE-&CJ<>rnip$x;8V+bbbeT0@Ze jN9{i_5gz!z`ajcCyUy!-ta?C4HZpj+`njxgN@xNAsaFq& 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 zcmYIv1yoes7cbo{!VuCiNW;(rNOvop(n@!Obhk)%s7QBrH%Le~BHaz|&iCGW{{wdo z+*xbxoqP7#`xpB}s4B}~V~}FN!NFn6$x5oj!6D+q!6C$%BzwYiK zt>D}iNRbxK+S7hFB9wfOCu!3Umq;b?5dq!oXW>tE=auG*w42uX`{ycq19b*?8e_EM zn}ZJ(f;WeC^M;mLzT-L*UfFvWXr|G5`TrZ68ImH4h~NJ=JZ#iR@L&IL#Dx!s|L@)J z9+K~+C8hrV=%dZ&qIvtjL4p4jU+sV6Ec|Q~RlH zWOI|o+1Yuma^=Q%?dEKkuOqEQ^l3ltI=-WX-{mi!_suc#y1;}dPR?yFWBZSb-Mzg( z&8`Q0zFCwHRg_!8C!P}>KXK<>o9_RWdX9ZI?3vXvda_c{`M-~)&op@W)tT_96=c!l z(32vA*A{_l!dX*OQ#KJPK+nGIt0i=cr1i+werwPFd5`kQQ@g@7VWR-)p}p?%IKQ4tCQW*0}w&`=$_5$E_H? z^JDjp3|yaeM7Y+Mr<1+EQw2WPH937ZPcjch{#wrG+j8k+L}M0POVdVbgy5p~{cCH2 ztwvlNiJ9hHFr?nr9?D07iylZSl^3yvwsw&qpJ+*9oxbV$+~1`BHkf4~FPUzHt1#Kh z;5yBmq*Lcf3wGm=4~6o-p4~_Lh>b?qUY^!2Bt$PI-tFhzwyiz1$#`qOenEkdVrRcR z?p-|JbmXY`{?mYv?tHwR)3e|CTH&)(Al&M&p{Yd#x=Ep&5-6wbuth;S4aY)Tr^ZHu zW10;jy1nvp-nx@6h%jH0{o$Y=cYnW@V!PEykz!krEcxTSq^sUG`Cd1t-qv3WgjcZf zSMQ_{wkkID^3Nq7g=EmW?4Nh-&!^)22m@67?`PJ2d-iO^vyA+85tO}Kv5xvwrlY4< zpjqmxAavkJ{wkDu#qMUxPi_rA`|6kFng7el%TC&a4?{m_^={n#JgVb1O5bUSKJI$* zSt%9EJ5!r~Y!#DIrHtnSdkOb`dv0Q=e^>DI3v6Psane0F}C?YvgvrH_xm@q_IKH|h%Qmqx=@4IaXJ!>@Q-`d<& zEQdG5(VeO1&8pc#q_~_R{Wn49i)ms7XRUB9p`3w`2{1;?=OquZAUctncYM8$vMD=Y z^DTZ}-Ou@8$Vt#3_kyhJL&)O39bsT`cHcqMewPS z`avlvDTCFA)b3=Wr(bYS%iY_e$n0AahRhI>qXHR4&LUd3>Df16QyoNf@Z^_MB79^W zY%+*xblV+v<+AKJ@TT=~hn-PL!|!R{KP%^PD92~e&FFsm+wG5>dnO=Z;6AV8daPb# zyU#h6@%Wz+`*#Vg-6`8O?=zf3QH?Kl$6EhNv2WH@__8k5+js-3AT>z(sJ%do)0IUu>u-e zcUT{HjGlqW{B^=FbJCJwuxB7!B0TnldSdagiut$JqT^UVfl=jjR>+Q#qO7XXf#8j0 z^uVh`y8bKu=%F8cq_RvTI4BLXI`=Urdt-u8M@&hODKhOMY?sC+SDYVKe5w0M0@GQe7NY!rY_I2K^07e zB@wwCU(8h39H-39G9u0&3QApDJB8zC7MW=O~-r8{C6mLabu) zz*cXLFHJox8<`Jh?DccR18QNi0jcu}INY|tHHU+;1}ES+zi#NrQt{b* zMHVRuSEd=Yvtv#~MC9?Xv^M_onDcT$O)mutD2JOBcf`{Y|N9c$&ytT2Ph>$i{yeX;X$alPN(Z)K<@YK z=g#ix3PRxMR8{Z!3 ztZ4!ri8xv?o{g}*WOfO-h@;=Y5#HJc5M6x8dP2!pTO*%wXmg!GD zAA=Ijqb6b#+hR$4uVb{ij+tC+Eh`Wk@^aZFWCE`|vuWqsXuIpdkyrzcvWdYEC3JG) z0mtE{1O%;=3Yk)_wQjB*lz=M2@@n2_!oz7Qr(j8)ojSe=TNB7%=lffH-V^>kvi5<3 zI&%Lmv@tH1!pvh##6nb5V6`>`ZimE$ikMtR${Zu@BnJ6xsZ1cl+% zPc6qG`ftY38>L21Z~bq>{0H+S!uWk|Ip+19vE5fa_oSoS@B;UMQrx=r<^%|EyT%Qa z?1$w&5i2ZQh^k%todr-nvy}J5jzq4j;@~;BxqEK>Uv6@E#)(_kk$s*oa!}V9{Wcjr zW=jqGR@=OF3=DRHC?BahuJk(kJfOQ_z(t$3Vujl6e51d$9h#FvJ>oS>`&1r#Rj7)# z`^oIh+^!Q&{6sVxFQ*mKva>DB%|pI^eSO?=A`(k3&~5+NZ}0GM)LM2n*%$1>_KP&*!^v+tuVPbEYj3I4?hGR7U3v{<8lG4dXCCLQkU z6rzAo6GDo%3#O%tak6Tv9$bdzM~xmp)hg*v=<=y*dw~^@yL#u z|1?GUG!+W(xbs!(dah zeBd!4vqCTf6j*YuE^+~o~>~m0Tw(AN$4Fa?Y zBZh+XF2(#;S()PqYl8!DoYptA#ZaN8rl)UqW3q31PIyzmK7dkfEXx0L_G#hCUhl@M z%uLa7)U_9pdYeC^cY8*%T)K2BWDrUknS8j=jezt|`BFbV5%zIrCvKzRk!FzT~`1M&VA>Svw>tPI&p31hON4I4Iy) z)Q;CN6@Gb(56Aa%4-_Sn#f30UO5J5v67DQz(1yIrXoYY_OAcOLgRzi3i>p{rnMUFn zsIfvTSa*w(|BBNn!XHQ{av)131k_G?$|uC6(s9@so=`sBL z^86&7TuR0*B=k8le}SJ!DggjIC>$+rM_!Xnl=qWiyyf^vU*Jbop0`y*zOU%5-Ot5T zJ@)`{s53AwbOJ?8O-m!;CdZ+4%Y;FGY~w&G4xN-N*F%6bTu8rU@1+5#cuPp|Wo^`R z?eAK~+T*VML7ma#Cb50y&FW42JoM^^%2V;cIs1zolTw=@--Op(&FI70iyt>>OncGY zqq5V9R)>x9;Y;M*!o$m`&u)-CkIcz^rhw~hr^Lk3iV;^op){E(hHW%&KS(2a!rE6; z&vu;Lztb7lDv8YY^8O`_O;LB7VPZTpBb`M-k-UUqB3f?dH{E_=t8RK4i?U*NA%n`+ zxlu|gBt|KFk72^uRPl~vqI$H~(W;t-Qzs==4#F#!n97f%L_Wa4x7e#=lL+N>g}0DiTUDOwo?P-{3D}K^T=Sn|!o}w6@!x)bdrVOk$pyH6jtxK_c zO-X}iC16R(>0*ozz~&D(Cwpgc{*My%-YW-&H|cJz3lS3iUQi z;~uUFQ8^CCO$noRYhTzfQixPITlQ^KBInX)XOpyJLpqBsX2Ivlbl3?g`Gck`J6|~H zJoR@OwB6EhsSOIZ@{&W$TXt}u$nv^WbEW}vZ)_0AMi55cwxP=}WZn&@)L-QWlvFE` zjJp&kO=HrG4?9;UBZ>z(@_vlnCczDJ8b5wD3Ht5T6L#NKX?qng@#zO%QSjRV<9G5c zKDGhx$~&?H0})KdJsKfaLGc78bmFpjJ8d5QTUOCuT-mV%X(?5P2P?u%F0O@_??U{| z2&JG;B;TflobYCrgP%A|KK%#XdjSylOL_>gqubdBZcg+XoTN0G_c&ecg;mL6RB;2!KmcmiM!@JnP^-nD-qHn(} zVn6d;(_)b5cO1p$TZZeb$$2`gd7n$cKMtTj@3n{3us2%~uNZkL*jZVHZCV(i8|Z6O zH(MDysDA6H?K>Zx(3qiF?_54)gd1(khP_i3-C+X3RG6hd0Kw27c~@SOq-SZuaK~Ow1`kduTljoE`1>? z6G#2OpDt9Ts!$1wF;e3 zOM#>1^fU|=)*-S^|5(QOhS77}tWlajZT(K<$}5RK*3rP77Jl&>fn|hY%v2FxTs9bP zts;pC-7}E@Nkm%yyp@H`vNmtfX__vN0?GWZni?PjNU5ziv&l2*&zmF`o0&*XS|#q1 zP#}!d$zf~vt5U_Qb5Q^x_Kwg?c)wM#zTNuKXFpM6akiVeYq295@mj%=R@Sx(ioc3}N7c z7mC*pN@VFaL+-vFx`=NkQ?1~W%AlR%`08mAaMoOtCq@n+tK4-Hw|5$Iw@S5h3-#hm-@dLA%xE}+M~Ziwde2f<7fG|%-Vq6e2hvSU zElz$Ts4`qA17j$r6ex)$N`mMUy1Of8L072SDIeXuFsPji!C#{o+9=9?Sf_uHNK~w( zgM7j+42GbNB%&eJV@xtIMyg9Dz5<7w3%`3cfSzO(0mgEKqV6|=*DoVz!3s1k(rt#c zX#Xxzd=Jy(=(n4{6jz1Nj5yT>OZU)DXrySN5=wQwFAY(TG^q%i6YwmJ4e5E~zB(@I ze;uXGw=zz@cH_a;e5szuA;!qbr8HERSLe$d(n=jG*PP^^*riYtr-F-|y_cRYI;o+o~@*_MDl?W?RU@U&eoer`G_ zZ)v=m)6>z>G4b+BhXn+jzU%A$yKmq?*i$pSitumVbWRnpR_EHdNoaN zA{+NihK_FbfE!)*4uLWk%MQVBXlT!e!mUkIcyTmMO|7(y3<(Sg!q5OQ!XlG|q@?{o zJ4@0fwcpUV=95H1fpQHAWA1-9U!v(0zBl{>QLA?6@}QYGkXxE^Q^#?4gWq1b1PX2q zA!&f7q2^o^8uq{cx(Tvep^idyS+2dnOEerPJ8w71(_d|cwaVB8~#8vq{c zOjdgTjjt1dGP#kYyi}RtuGHlmL1+@Ekelu1@8<`Sk28nk9Qzdxdo9n2&UUv@QHLvy zAykFJv(z&xv-?Ni(IdmoRMI^g-%G+dm?+<_^#jn~!*(*A+cgLGpC3+MLXSGmzgE~l z{k~@g0uyXU8@*pZ`2>b3%Y56Cl&N6fqq_O?V!k%?G9H-v-MAUa3`pXW(v(K_nU(}y z%oHR#DQ77StpH)mfyrN5H+AMCM1Fw2mH=a3Nb9TKCp#hRKGXmhTZjh<2kEd|-N57( zi7=eAZ~k}R;y!VT9_jwpozb=n*qg0l`KD`N{NUQn&nQR0(vf>KF?mo{{riB{F}0T{ zDT1M3`C!F%06Z!}!y3Ick^QOhbym7%ZhKAmzd8YB<9*`vlse;#oTm3M?>&QgR`GY#eo; zI-9z#-e6`Rt;}+-XKygG)1N|#LT2@;C)LFRIs}SXY-a~ zh=cBo-t|L#iE2hR%_!E-!F`pFUO~Z_Y|CGUxsC+{;_Ugf^>ubHAFVB*s4}w-zEQf) zC??S0?|!@g&E~5?`?jdalMmUKg^ae~0-r-u%B4X$4=|8n?*OTb5zg&ob?kVhh4Qz> z$!go-QUh)PY}o=rmC>KU7LU1_?7FGrVdjcLAnEJhD1u)>`6&_B&qvtT2KR5b8AWw= z1Rt4iVWb+MOE|ecFNOd`@?W|aNz!s$ah>1bAD5_~(!IEw@XuzhXie<6%jhtHQi#62 zFxDYb@3Mk?T+W%aa;-FolOs%E5XibGO!+xwM6u3~qoJW;CKbHrIXXH@t#+BB?EE*D zo!g)R9f~YiVAt|nUurDO&ON=&dtBzT63Bu-Hbfmq7qi$x@OL1Jw3*Es&)8uKLyUBg zS6c|{>)0Y|$R{(MKu%}NQ-N5k|_@h*Vn1l_BXbkg;h~R z*t`?Amc<$p7-IaqXskL0`;O4_{na{&URQec$Ur zUgM4&9OeeMny>E^RXSBS$tZe)Qj9Af-c{(RGPWj-?Kuoq? zZ0Pe{3Ona}Uz`06FKoA?g)x9lYU>?rHM3>#*`p+IllLA_AVhIQL@-kC<@k$a)Q>uD z_M#&+DA)Wkg8~`1jW1Oy_ZdZ$)1}+!s)*@5o}D>zgXd z7c9{$Ijctg*(Y(cU6BMSpW22gil>+@)OXP#+l@#tbs5u3uE!JLD-)!Ad-x6g27R^Q ziaYNJo(@*F#7HCzS!@iWUlUgE{tvGy0DfxU{0_Fg2V&0iWyw%=G+)Qv*yzN>#ZRra zNKE$D_<|GO^?vG4?)NJrrwzkqRTg&$)XYhJF9I^v7YvHU?1k!jlCk4A%Mlm7v_@sqn=1zqa(3PNc*A8cLI-P4ONkS#gIvfYavy%Uz#-=Lq{1aFNcEE-nqsEP_T5AZ^%2UNzKAAdtroCc$kyK=+u z5Y{TVDU>V8Ba(>*VzX%?a0}}CuWZwg*j9d!cs+@Tzr|o8iDo<$@W+k99NBgZ)vK7= z7eo^4obJXbmwt4vI3<(w4{DP67m@fM2tqOU+bO zCpw|zEX+TS+AEXURZgOkk?zkelz)zN^t z)v;Oe{I7zd`Uqyc!W7uBM9+=y{nN9K?~~qlcwyDNf1O_tTdx62ZK1yWzz&3u z3q2`sIo^c1FdfIP<&B#dfG)oq)^@$(zBV=i_-1}9B0v%$1)RF)b(7a=?O8xhHhfr| zuXaB%eEu8v91h69P%zTbLX~Ojp*j0j9B|SD0Ie_f42T)#BvQrbjGT45gxZNT%->PX zSHc`2c`ModRc{~yo(a`+CrMK1>^|eTPE#Q&g`$IKNgvKxsADziZC0gAg`~(CwP_SgXfx?!x&#S@xMwwhx%Add3up~1Iq1aLoP%KhX<|=Kz^QG7R67(!~JVH@R zrT!3l(0nN3E|m3$BzW#uw&BOx=1@WeTP$k=Zc+c}u5$$JAN&FxgYAq4<00NRP8Tsb z1K+VG-0?yf1}Ym}BCmIK3VCm{l?WJ(k(ASoqdjHgv|vpNeGSUyl0LXw56{xJp{Q>` z!s;-v?%ah;d`i}FM&@&#lmk^ze=R>Wk@L`$vo%}c$CJJ1yV72m{J0SJ1nPKs=)g^` zu7pYal)vrl>|#qR+P!*us_fU=?Hf=1yD$wq0Tr#^{^i>K0{7(6I6BUcL5&?cXx`4shO8{T~v!NZl7 zZ!p9Gvu@=!OJ}oGAM%SYu8 z4swmv+bR_XzZxKtt%+VHbjdJ)(x>g$dv^KX;uqGQuE3Qc$;%c7(~JtZJyJy}U}9;0 zv*z{Nu?vwNG>t~3rFo~ztN>=#l%lYr^C%*@QU?GyF3OA9rY6ST*c{Nw}!oPgPO;KepKHz(hA z`{PFp-HAP5GdDdPxA2`a0kZ8vi~9*5q!^f*6!R%7Nc&FH&)Z$krvsx2vbEcOR1yN! z-R{vR!7SNS0`(hN~JSIOVj?l5-dN!FCmf3TyJ43-4v`%j=MRt^F*9J#i79kH>_) z)Nry5)JQBD(?Y^uEEUzh2b#%6I@;PFe+mW7k*-~kV1y&Aq=c)FG8z>$MZ*{!5?zr&ajO$*O`+0%reE|$c zKE#p|sLRPC?2U2tO$A4*RO>C>eL}x92&YD$2&7cvD=YcDSi*<-W zy(uDtT!boc1eh#e*uIVO*KeN@i{KQ{J)E@VKq!+wV^U)|5`M+JrRfPz&gVcYaA<`a zs6#8j_sp(pYz#O-{e9qCJ9qiui{X@>g);;;;{dHM;28E$Pe2qfnZeetlxeD2%=yVb z2FQWn2@+GMJUXY(5f(uRYkkhF3?_<%G6BU?Hh3ZUTN~jUR>4#8I|5@CHNON|Sqm#c zDxrd#`LzNqppb^$QmK;q=>An2JUGATAos}opfn~mA(O`<60md5IiiXH> z_E$D~kcy)5J00>fs$|pQFrwL7@gPcXiG2Pn+`M9^Q_CJPg#%d<(aB6GM2HAlbGhp} z@fSQEg~$mqkl+qRGY|);qES~yf2{Nh+!#i9a_HP0b8ckq@mL;Mpx77=cjW4FCg&=M zNQ(C1m;A#UG=$VbH2K$Ua3&Kv1dc3}FE0ng>suT^x`v6LJdXn}x0EpH@hpD2ykX5x zr~+_&Qgd=%V)ccvden;-s;pf}f2Z?A<40Fxm2A99OU~7l*dr(+G~o|zjzgzAQeu5a zTls|?3^r2>-KOG%LqJ+bWkq=sc{mYJWVNb#XkFo_@F?%BBK`ZDLs&S76NTPJf6bz< zVKi53xM*>@zn)aqB#A+weg5Oa?old~(NN3n(*%Sh230Z%zuc0VURIAwSV*Zx$J9cD zj2a0Ug%tzJNTuMcKd^T>4J|GGoXPK(Uf1=uo>s1gTvc)-T)F@#SsTmF<3+3AX^VPY zNAjJnbhEt5zI?bzwdNh1##$?_am%m`G*)orbn!ybxicEpy|8P~*1*1S-&v(R~f6blS#HN z9-cIMPZx+5S&qQb%P&EiwNp!^ybO(z3AQqpwpLrL&ty!5-K z)Un89i<+*vGQB_kC-9q%KtG3iR$?K#PWna@MIC^(_D09YCqLDNZxN1ES0?v(K)ci< zp*%1qOlJ~);`#fN5)hpEb;X0&#bBWN{wgo03C>-$;*OwkDw|qdU*H{9gDkRcLTHq^ zH=$h>Ef7-Hd=Ban_2w)hwM+s=PN0#9gMu4$J=}Bwou=DbINQQPrTu5eboVnVb4-s{ zEj8M!tlz~wWqI59o2YQT=~wGL!M;K!={;GpPdqufYLO5~$v=gWZoL{`Rr6nd7IfTYOs!N@BV3v3D&@4H zTd7_pQL&*Q+l#)I;|)i?l>mDox+M6lG@amD&iu|^P7|WMI*Vo=1@|S-<;x{lmX@qwt3rt5|hQ#bf~ zUG)*r|k;pF+_N7`BL~Pxo(VqEa z)UA@{qWR#i;hyTl`n6Dk)RBi>^@HO9ULH*EXq$1g)KK86TsCFAamf{vJFa!yoYP|e zB2#a(GPJn)Hbsk;y&p|qe?nXUUXYafm!R`fgY(}>_&Khj^F@q|-TDL~bj<|rQSRh| z!D&LvW@OJU5B|=n#NNW~?s&PFZmRFyY5&P*E8pkaj$JFfYf)hx%4hG$2R8Df*fuBg zB*^(4)_JOO`(u_gI*eK;<*RyC3`4!?hBk#<;^rOO zqLmALPgn4nM|g51e}tnA*^<-#4Qiov|8lVad4+UlwA@9eazV`A1HfMS2)cYxPX-!T zvi-(*8V&oWBYGs;s7skKS+WGXr=D)A-0lh6X6gGsGY(0cDrbxIv*x_KHMGQRakpoT zHN{G-6g5i>MJq@kv^j$8-?B}ocx1<%87ymtb=KoAXx9l|^>-NVHviXL+x31!5tgUF zW}@4AfnQg&oU~_%zFdgD)Elx#Nsuexm!QkwyxAB$E2u?`^W&#Or`41(4W9eGq$CSr zh!F7n*nMN<%K0s`Bj`+CQgjRukB@(2sU>reSVHu;7pj#@+9NESLunK}#<{cmi@q5K zR-QahmEYmr>GG7oG{Pngo`A2slBV>?4tKy7)Jl<{$Ai-sJGhO?Jc6 z#aO%w=_JO%p0`}q>$$QGr0VSJe$B?f9ly&@_@S!_#{W;?zB0o4aavN`TE>80cO!t@ zP3WSLn(}*Hf?=)He}JB>h8Rh?2hII7aP_bmV6-cGV zrUuhKY9=vecYL!DSvRG8p~~Kw`3E_BLMd0@E~aAUnj~?Zkdn=S2JxrkNg<|>3CbvE zS{z(Erzz4*)6tJ`Va4wW=xFY$fECm+5jN@az)qxfg4vYu(ws@)!VmW9#)CDq<_SaR737O&{o)F38qGb~bect5G+xPU$p5Y9XYSIO+*rZ*2m z61)xpCq?MOaQB6hPjN}*!! z6j;NOeW|^fptCyMhn?>M11|qS*9G8#HhkSf_<7S;ocl% z$^1`MzHRP67O4qo;6|+;IabMeh5@C?BAG}s#3FI8l42X8s6qZC{=n5G)H9U%brMwU z*XQ2rBtq)f(x15yBRI`K5aR$vV(kN0o9cYyd`uSVeMY9(YT1}B-4jtnNN#|3#Ryyl zCG&6tmITxJl`3JsO>G5$Ydj!7oM5{v+CMvzhZ)@$8Evk21^q|PN8$ks73es&-}qTt z?ltJlZ5kgy5UBmR8(MJCXjvCg6F9jYzau+BL*CyQ+cP?f<+&ceODz~_Pw5>U8|5O6{fj*hx(vJZ zduO6vy*z1CUu8p)rw2;lQXmB5|u} zo6$wx4t=b>&o+NrgTT?@uYi^;OD>X%c^B{jN3WWA>1^kSb22?3XblN*DmdSMGbk&zQ#7wTP3{g z0kceFAvRs6X+z2)!s&XZXz6CQYT1Z>+Tdz=CLL_eo`FIXZwN!i{=3A466EG%sx34O zYjWQrEi!2y2 zZs9~n6C1B1Mnm_770(ejmQq>>hhT8t>$}?<6XsE?@G6$Vgj}0W>XoLfx?`+5?#jgvu|Vmve|c1KJ~422I{ZDqZ4krhbK66? zd*5;IT;6)fly$!D|_w6&en{%WU z7nPhT24;6}(QzZh7n9n@DNikyCXNA1^S&`VAM7*@>8s0FN87cqz!#5~owS#6ZENe7O5-@Y)Hs};?y&}UNIq0c_i&cGX%hAasOqd4*uxoMic`uQ#_r-{T~cM6Mq1_Eo1eYtXHmgdh@Mc+0f-B zkP9g+XO>yM>{V9#L_!ayj};S$kz=TUqQSX?Uj5q`l~*u5U~3Z@zUGLn{sY@H@%%kR zSPqJ#N@KC0m(ONEdWF-|W#ZJJ7_TW$tq~;q>LYx#GL4srm7Ndmjk&X{v095>O zCuat5^m13=SinxFp8^=-i?I&JoZ<;ob6+Lzi6u@+cGs6xR>E}$oOZsYVtz+t{0CA4 z3dT%9WI)E4Obo5e)kK~6qK36Wply5V47&bagyDo;AILI5gb<7(8X%q*idgA9iCn$f zr-^f!BBsqRy#a>*82oxvybWaol#f?$2l($0&B4mTFRcN0)N~4iia`aHfxOY;m0ZDR z3bc}csGJ9-`B&b!RCqF!RJ5mbojs%px~~;Hebt2F;s5rDK|^%}e9=rS6^~xt`kXPG z9>m9pX{&zL$Pv|Ki>}T8@at>b*RTw9&`sr_m=0C?`dd8O_rKs#gZmTM%+RA#sAr7j z^p_BisCMvLz6aq^eI%#twC^sAD+-)$1of?Z?I84zRlPy=;*>?4W+E1_M$1+h!!U+| zjZ&37g;7CGwUBII+@DcDk}OoCsVU|H0u$z`xAn{!r4voB!u9U~+UK zrx{(8iRM%vX!h}*Xow=ia$YC@caUB--{ zjD9%voI(p83w1q)i7P^#ZJSpba}qmRIl&s|XQ&)%k>y7(jGE?vOBNSX(howo$#84P zUX_NN%Y&KXpMI&Thm)Il{*4XVnav#ptHPo$MzEfrqLJtqXmsAO^nfCa1bLAW zVd9xa%i>F6cp4g(%)Z-pz+PtBGaJ})}L8xBg(SpUs6z8FmPog0Le=2hEq z3ai$o|806408cr@E}n}CC5+5p-iiK3twF^#$@Uka5IZ{rAAw^h zwxN-=m~NN_1!;aJ?};dbB=#Gn4Z{-y%Zz` z&->p|+50U+SWQd`(NyB|9RC^6FyW=ZnShItk!R3Kroy4(_Ww9JNqT)hU6Ce% z#eQ-~H6!IkHX=rV!#~m+z!KyY( z&4^_t5Q>dEczJD>3Kli1?{~J7z}`dkQa(=Un%36nlZQiLd%m{kaB!>@Z#ve1ucnq3 zUW&0@{g_9kd}izq)HiejXJ(27M8O}wHm@-7A|?-VrZLpmpah9Db+e1(Je zfQOKo+xDtadR>@HrXRe^6wm8~Ka%~`S&}BQxaI*PXtprXr_Yoy4Kw*1pXRMQo~1?Z z44XTB6lW%By#6Ww^hLSkZ`)uZ?J^vxmM9kkt|e(f5nZ`z8Yx|zpN6zV7?X7EQT9x= z4uiJ1CSSndo}5Wp78))v78mn7iS}0Um+_1Qg%Z^#EAicbUqmN6IGAT{k`~ zCMLlj&HX|QgbbwH=y%6gx=si2udzZ87pCbkXj8nXlcrKxxs@`Tj(j%SpAHQ(J{B)g zQ}&I@2sq+9y7(o4V>zrx=UAP=JC)7N!RowQa=}L)zk?W(hJuw#MpDW$z>(2zEivkm zUw3#4k%1kI{PGFIMKed$wg)VfqK?91WnB)n(ls-ZpT$z>%xNx-W0vgnOlFF$H8n$f z)f7Q7Kj!}hPo-LsZ=kaIt9rD|Mjm zt0JU!;#}7*I#N!G>r*!+6S*)o`-s`XxUB`7mFkG3k`$eNmGFUA%LDUrkv#Vs0dk@P z>FE|8AHT@izjObTB8wRu=vLPE&nnoK*}}3|jfP$;vWu!$1xZ)3FgtEY#-%<>;xySZ zUW(RYnKWCgWN_ql)qCCrqHb9Xd6g7JXH6pIFZ2MW2F(BXKKRlq=M0? z@hiDdM#T5ASTGau2*_HITK%j!7I>rQsjh~*-{^J?c^e-g-FZHM0|k{$@=B1-Pus#n z%->6NSz#~Z)asgtYitI{n>2y3&&}S4s$3DnAxj64i>0mR3{T#EOF5A`)zU)mVXGt>(mhvBsj5f zrZ#v8rgYhZoc#!S3S}8%GpSKGwk&);h@btR`~>Y^uz$}P7)uwOscy$-IBgWnOT-4h zb(dnIlIxt??w03Q-u1EA07)-Xs(!(bX3 zNYe-Ul4wq2PyM>zO!kdQVGuncIg_@KYvjz$TF6}bSPeJJ4WU%Ji8t>Qoe3zeiY4qg z_J~~2i(K?{Dt2J^56=DgQ=?3$n=Ys!a{|%*$nrp=J?F>8wbT62mj1eY|2yVcv>m6- zZGAh;_G6g*&9k?X5BWWnraMKm*mdJ&?QlTMs z4P$K&Cq-*QN~M3gTnSAW!skEaKue@miLDIA2U1v<)IOyFrb9mmX$(hkr|RUsOZa9g zom>@b)R{-;zeQ4>4yl6GPAjEEy2fmU%wC{_2oK3-wHnzJYb?D7Xo$L5bq=p{!CtE) z2^A=#F>g#y*h3ama9saujneZgx*k7tw2*~`-SI)o&Qighxy9?%?#n(yGqFMFKL{Ez zip^qe#MTXEAKI5%))ep0qrBvqx-ni2G29e*k>o~X7+LD}uGV~(AoR*3(rjWlo`9YoQd^;_h19wRn-@vY+?+_a6VjKFY|*K@M_1ch;I~&TH|; zd5;$e{iY$u@VuPuph{#Q@9-1;hNn=QbirXzyw}}SBl!W2Phj;Ud$EC zptPKf?LUz_ccNcw!P*(P1NeO7_9glbfD<)=o*Ci zxaoGd=&MrI6veQCM!P6SiP^fP8o$^Z*Ko_#(lVsEU;(!k`n0v6g+J9Z$2;FiW8ZQj z!*I>=>1zBp$YMAWLJMy>wRI)RNN*{i1LY=zX?9*RH0I~eEXKvy9hjAj7CwZ#@I_zP zwt zY$o}q$b}0XfjXP&MUWQy$k4Cvd~uH{97F+)WB99}B6AO_^C9@~h|Abaq{bDmu360K z33NEawRDMk%_I)YhHe4~`0T_f1^P_Q0++|gca(iWD-L-AcDiP`YuA$3L_%RLeLJuc(jcvG8;c#AO&@lZ9pM#`K@8t|l=tK=` zCeOkg8Jq8h1rIT981C$>di}DVwW#(9`>-18Mlmj;sdmrywxCO9BM0xt{_P&YM8KgZ z$PkIY{DVO?i-R<78d)ll(<{Na$b9lF8>-*cxWwM(VL#ZQxBvOGw$>@TW>P`1+%gy><2X%Jkn<6`XK#F*Urj_=F9+Y zrb}Yi*lGSyr73MWhz5U=XOLas`=-$0-wO%rPAHcXD=Ly`F>kWoNFeUuz*q-q6K7}( zm@(aqexxRicQSCq*V#7@a&&5tO00XQecDPI+-)uE=IB2WiW@Fg7F*`?|MC3+7z1AL zes?U1iW+3;>FMv;MUog7wVje*jQGF9KzN?IbL)9d89 zimnfv;Fgu4^AXh(PH(`Sdfy4w(PVSVm^)nLM_%!IAF7FMKb6t1@IBy|_8c1{obr4e zGdnobFlM!|QS>wn(mL*;lpZ+@DWa#D9K!ei7*>h0vrk)ETSurf9H-4vop%2kY3>s( z*4w?M9t}+a1F6JxP8_iWgp_Hf($yM@xNxni=pk;vic2sjyUmFf+DK0!%_*a1-BQ%i zFuGlif70^DxRR}IjwlvlsvxF7D5oP=?Q+Y0hWSXYFyLDG6)1E095zOQXed7r4zJh2 z^qpjgqIJ!o?jzs104@B30^THk|4XK(HTMrcH1SpDjun-1vQVtPm1a;g^(ts;E|mSw zkYNpb=7ljkevC6=j5XB8gP2DImAxZkh!QfLcj8zGxczBu`sM`2D`ck5N+b zS+2uXOJKzBJAc8tnL(R=Ht4|+Z#+vYzArk!>)1L-Ke?kj%W2=0Dr7@qqw*6JyJO?P zqxCCN5^W*=C@K@E#=I_*>{Sl58d)EQxf!)5D2RWmk zA-&BeE!91-@Dr`@SczgC1_NzY!>6Md_7r*?i&|a{Q6UgmsD%jo=r=@`sl8sk?z1JTnD zx!paax9_sdS8mp_d|r@N{U5U>RDre(@JK2W50DGBj{Rs_odA5fORaun70;BUk#=7Y zMMW}zk9(Ph4G(9${DTErQ|edZlszq+k%Y#bXoVzH^HfGTyRj33}g z-W^#9rAjOt>j z=~hHfnm7B1+Qu|0e_WtIsFq|TmBQli-SiFW^~+=~cbx;3j!o?_h>XnW3s{O;MaGWf z7#UG2ewf@UZwk4Tl4Hk~RuMk|I&cNw*K&Zo3WveOu{e z_7XhNWgo=c6;d2%)aU(OUH?0vmsq-uR+q9G-0HqrMyZ1@pq^A`t&pn(EK1PK|8wY# z6L9dA9G|4hF>{kH6Y_^He5rm`Glf7}&#{&R{`ogQIgu}MjT*Z!u6X1Oo~)Yd=84e8 zdk$1{1Y|U<(=3&@;nFZVe3;ABGk@nRu%@`uMT{5(Q;Q+!$|Ip{jT3)#7$9NgUa^AQ zl$xT%Zk{eRQA$BLI^vSh*tkRBqd!~0G;j$#KOZY=!$FK==pV8Liq^sQF9;&;gq+GTT` zxgev?{`)blWkO&mBw0!1n12m(F7=DoGYq;dYmWcAitp`&ya%2ah->+{Nuk7R6Du`dRv4U35y@_$4H?k4Kk7ARmEJ8!Aa(9 z-(wj;#r93$9a5aQdT#l|xr$_z4BrcAsmd9p@;u4pHoY^?P*f0wKHL7b~SG& zVI!WvAx*wrz}ZHFOu`%taq&`4jdeXR&TSjsTvW& zoxW=RvAk_ecG;7ZnKgmj_CuG8HCR##s$;^XTi9-f-5ubEkmwVuw(|NZEdzlhIbkA2 zJ&F}-fq~RCX2%r81!Fd#s&J*&4UGPYOh?{K5|pmSteE)^M;z5sAs_WoJm_#d?&h=p zf0kjA%P;5u`3|Og8uLJ;;5D{mISy^+FOib0qh(0P;#7gIpdZXdYum40D=T*ZQbK-- zr58cBizul4P;qlnA>}hj;_JpzU(I9O)o{QQPdWQYe=Jk7Rz562>!Vu`g25d|AQ#=7 z$ibrMS1|633Pa^GVe5Qom$-Gm=@z(9eK2i|icaT?Y3(nOddI9k*RnmK2rvR@Tw5iq z=gqIvgS^HZd3|D56DC(Faqur!nKFci+<-$J=ByV7@K!v0D3i5^@e z?vG8F4T4P9TM}QqqW)@s({>>ue{+_q_Ui#Hm_V|e$MsCG}Bi3;lUwUf<1sS^%_?!yL@7-X0SprV5;Ud;2KFYYm zpH*8rl(Jbf=h(xS5$1IEtHgQAzaN$F|5Gg^T_pbDo+<#WyD< znw;$R#(gkX5in(;n>GP3zpTH?MtS>JE|&k|(mD9${v0((|sim8;4K z-&EdR3+wYmeFjhFQ&Ua1MD=_dQ-?vzeNcX zZrcyud7jnf$`}3yO!S+NLRRF?*F#1ru~dCJ8*A=d;vDTU>NcFxSgXV9?Qzn~-K|xa z+LX?lDU+)5Y7!?jr)qY{cJaZV(BR-BaSVU!(AoIaW~(c_tT^nP{X(RO9g?c}V+r~$ zdUmHJjb(VskK!LShwbB}~rb3q9`O4~=$(3txblP6CewUaVts^iI;b za^V>_seo<0_N@(% zHCqTyWo6}zy+@55*$;?3dIC?k8wF_tgB9hr51Z`=hEY7FENCd0aOP4}e!EP;y~!>* zT~RM7f%ONgiVY7CuYsO4%FR&GE-MQmcepcDUlyyLd3w@_c? zB5fHU0Cr`&#wXprWMpm~D~Q>RDN_KNtia`>9&xT8rsmTUqZu&a5=k(Y51-S75fO3x z4ET^)bq^6qOx58hb7Pr;FM{w=N0V<8YrEhUa(dN&{l@-%otY?JbwFuhzyGt|6E!W( zr1Q(&sl(3q^G?`*tX13PUqizG@V8g@JABUHiFZq&(U{%xe}Gz?^VQFT%z)#~@J=O# z27}gj(j|VeTObnE(i$T)l#MaX8-vc z9kX20@6=fywx1RBqHDdC4soSca(F=Oj7@ieev((M^$)xXQX)qY6WY-a(jBL`^*j_Q zV`j3_J#LKfBGbhbLk?ZBR$dJ|G+rg3*Hw2TD-=}9%CO*o_Sf_pm_1f$*V^_`04)V{ zu3kq^aF8}uy~k0eLeIk5I?8FWFr6tY4}gX4YKyXgKt9prEw|`>{FQ90p#;HXW8dB= zrR3Y86jMC3eS_GAEyyUR<_Z~#8F04!%PWJep&{2sqwTf!D*hPzSS@tJ zzSxLqjNs{brqmZhMbq&#%;Ww9ZE+ouo3ZFgoyUyijzh}hjxkFX9#7ZZcz&P6D_C1F zMlo_(d-`e8{3%#i@wrjC=h{62FJfTN15PR3^)zYAJEBsdD}}WF)4nkDSW5caPclif zP|uURYaOtes8BXp0h7+ps{gFNs%oL!pMWE+TF@nff)bcG4vqzX0bh*m7){YuO6F@M0?Pi< z+^R$Xbii4V73`Iih{;%qp*eh6J(lSBT#KcNmtdkIQ^btEHryEQvA*+0rjGb+?67P^ zAT*j;X4tvf8An#iT$TeFKeS8&QWQ6=28M@VE=Hld+td7gMj4+3pmLCoyL+FO3vPox z8YB1b-D|gNlSj*3S2lh+$uEAfayk4;XJ}h+RM6>&l>PZ`!3E3C==3W(Gh<@0i zKUA8W$~jWo4f{1Dqk!g4arhfY?Bd1a1^4wTRlmFaJtd^B)Y29}eUCaj!jsYRUKols zHUh}a50;9P@n$4OKjT=PZOvq6)5PGvF^i-8Aj}e)*hCVZxaM8pe0cY>=cEO`2N#O0 zi*$uBJqN5>}Wp9+MwUn;-5hj^^D1_BdB4a6&MqS1_}$NwdT z`8;9}=8ewaWQD`Tw5N}`%Pe7)P6d%*-iczt&(M8?4QtXjq0xR1ou@Zmz#UmC)6)N+ zhnV_9pdmc)X5w5B{CHJE^uWdiBBUH?Tjy;$h{9;vrDg>%ahCg` zDb5V7e^m;*rDAX-g^JNIRqKuiJcQ;#q8PG{*c>OjKirp2`UVy6+^YWxk@86CbB^eV z0ChDmC3P#g97!3{$|8X~;?n5im6=?%7a$8HfXrJA$)TVQjkXJ{r%%j~utH%Id5aFC zqm?d2y|Db6gcoD2PoZ>yKdq=1_2XTBczs|ntvD2|)=XiIpG}O;KQetV! z(hvh|Rqo5fB8EXIX5+h8O(WH(I&^v2(|V9E>hm!KI5yw*Ih}|T`fz~^3tg-lkU_M{ z;7*qS^Gj%p5f_8gMP<<^|KUn;5o1IYfSC1?93ys|(krN402kES4Qu0`$p<{`JsB&IvT`5I(r@`n}AVBKTum!B({VTE*|p6MAq6p`+_ciI;WeE(xCO! zy#CXs!uxnm;N}L>mz3E5(aen!>Xy%^t(8<&?o!RkC@a+yVOj<+Bzdy-r3IY1MG7Cu0{j2 zJUC{MHM_j<>*#K&kKu0-Iy2&BvJJUXfN?Omcx0oG^5dWOKp#Rbk?}{vYFBZH8MCTw zh!`j^yl;dXHXZRJ)9`>kUP*+m_*PVXUo<}XNL4B|c`Lbq^^H-UilNPr6b?h)#GD!P z2o6(r;Kb1X(lPdbEd%xdEzmbr_5WPN%!rE}2p#I01A6Z=%)=_u6ik-BkI7CU+oEV- z;s&FdC?My6St)ZFV=x->hF^Tnja?_#cq+k%-e8)-A#RPbmc9Kis3(d~YX-lxSC>` znW&di;YeY@m_HLLcZw%|k4&U)2^nc6s4_*OmQ1ze(pqJ|Huv87p&C3~e&!Ps z&r_(@*Mjz)*$EFRH1*z4WO|Jx-r^0S+gf#x9C|$j3*;oZ`XVLeVD1TEFhYK~e?48q zC_rt{iCM2kS=8Dk&o=1$hiG?L?dY51ax=!IuSK6xDasJp0}9Qv@{$=ePaq!H;mrJ? zIAbIhz>zoG2yiZq?CgH`?cN+KflUErvL==gf4Nwe*PnWBKYWPwP=%48*h zDI=Z^x2K^dDHI5$SOMw>>WqfT+f+J5CWSDyAfCACP>G?Sj1}rwG2pOI>9}m~%Ca6- zO3xD8?iJcn<%6I5DbtlMR!OCmSZB+AYm-gXweX8uT(MTYmz?2-C4ORMwj% z!qI%Z2@R5XC`YG?bnTQzxcKbZT@x6ZXDOFeDIumo{!i*S*$mn#hO*HQW<RWrsE%CKb*FQlYUmNZ=m$8O%aa;^6p%ZMfSXh!U!#cv8tDy33aF2|@6YeR(Q$ z01XZl=Q|6Y|BPQ&p{AH0FQVx!9#T+gnJrG5!po|_953=MiKu?zSU#eF2YOjq>5-2q z#vEez>A%h}3gv$r6yj8~@FSi);jy)wDH+~JHbBMy-A!$yKo-#7q+e8ke>N+ZsEk&w6u}k?Ly(6>w(IM zO`g}{!tJkO!2{x)IQH7T>C5LYx!rCv<|PDU?`n^|%u_wO8$@c;75e=7M~ zPa8k*`|b*{`}R;Ku{7^LzB5{lCMm%uoToYKIQBPx&%5-?i#uhEukQF^w{2?A>c9qIIomdwMS5 zlPEU#6Et0-=ti`)&mb@{koY%3Xd@sp8o&B^06n8UEAJqHl?84=bg!Ik9l}3Z`T+#_ z&Iy$Y=I+0+jEHI3$Yez1Tp_9{VoM1P{&Dsz{TBq1-%PaGW$B=9M?7`2F3mZkKp<@(<@tav=wE<2IzkG?9Tp~9DgW+6Ei z_>#1OR`^V)l2STMM-(Wu^dnp{wlLO3f#1d#L!UWiBQ7&cYqqldKK!w_=8D9d5fp=k zD>zimk_BU_ud>-~`v&PAn!q5u{E|XUM1OLyFGw$+2Dfa6T;-Ic6p>6P1K@T>b75qj zh(8Fe1Q|xv>rG6K)zCCa#A#lHZ`K9ZYbz_yU#c1wC?|c-v`iMJTxKz1VlaZ@=Oqdw zkiX>>IK_4_IA|0^a>jE0MC2JDE|lU4qUDUpqXB^=0^hJHzW=DqyO4cOa@!ns8|T)V z*RO4|vi~BKdsY6$ZL)e&$l|AW&c7#Q@e@QHH2AzXc#Ji8uxkI2ui`Qrj#|f8bad+} zOJ!+8#3LL*-3i!{t`#@}Ah^0}_hjVrR@3Kmkmr~eD(*eHB(nd})?X5q{O<5FI-XCW z+`0Kdcai#+SdL#2p4fWfvJc;&cqSBN5rD{BvsCw1a*Fe4S>WNDIBZ?9G9}lo`n5B@ z(~RSJ%NZZT6A_OX_pGd6u7Hcpo~Kv}n9HJ>_bT(4&?+%ivS9_^we__3A7+&$Q&T+J z53n5vxYj!rKITp(5lm>{G~#Ncl~9BIb9;;;Li$-Ee8hXG?)*!HuX?|VB0|#RO~d07 zZx#+IgnE`oAbpP;p`x3JWw#ypCYUn~sHW&PY=|mL_P3%Cwjz*XI-l@KaJ#nU4~nQL?q5ADFTUIC7HT z=4H5x%P~CyPV`;%@fzalR*HtqvBhQH+Tk*yRuQNpMUjiHT5+%c>U%j$13;+{4+1MI zD-4lUMh@)tX=f@zCSOlH zqoG~P*CH-E=0EDfs&3&AY87TNL`2Z#1)r3SgvBP(z&IiSa(&8Anq$iRPUoOx+G8j| zVYUPV=cy)@y3KwaXMTK|wP*!Cp*j6BzqQ#k9v+@Tvih0BW=2r=GK=<4Y1K(isaY&; z8nMdiuia5!88D^;yR-uv;#)y)3He6iLLmZ?b=xDDBJw-4vx;wIFk%Jlyx0{JPMp8-6YCCK|Nq1*n!J7^LxjGHIKUY>%}Y#OXT(Ck)f$Er{9~`X|6YeAqTdN|!pi1hgYG6voQ62z@Qx-)N zsH=M5{}R@heSR+dtn4E*kA_$6En+U1&@8TXe4Qo` zldpVONjIF@niN3_)*-e8j zvKCZJSepV(#&?TTd1*VBGz86mwhDp#5a*%Sd>i84ECrG1^X1yvz33G@p3ND4^nb;s z^vG#!Y;;eVJIY) zi-ySgnXQRq{NN;}sl4XbYj8l4+n8#93GQM$bVfs?fZWaTy~JU0G2EMMB^0~-Dl}5N7GJBx zL`Eg9%yAiYst5C!ytN4&F_qK|&5GXf_Zxixf>9uwHhZJH>g{+sw?)KGh<#Hu(nvvG za{tL`3^4|>hFdplu3uimz__a z`S?n7-Hbycz7{8bR{wa%@!MCaQ`mIplK--D^zR*NZC}7-3{OM}r1eDn)Lt0I^hk+d4r;J1% zy=m2A$rjR&7MfR5g|3lg{1rMvef+gbB(x*4+A{{>?gVA$tK=W@JLDZsEp)`Z>;PTX zzjX?tX+>ppC28Y1f9TKOpg_AexX5{Mf!9QE!%b3-O8?h4JHK3}3?m0`cBo85b_CrZ zs3sxYyD>z{sr@0R7nD>i!Xp6xp7Zm^(wMZ8TL0> z@g+nRX`T`hjg01G9K8lHCh?3~sU?iJEJeq`V@?CJ0!26qSNv94Q^$Ts3FfdpTB`Q& z6@5qa0om43X=r`xczK~;;{i7omENAC14%I$zTcK_=VYnQcm2SRvXQmmQBoh||Hnsv+{6Fzb@buiq#=cf7DkXE#F)2r-=}lu%l(pp z7yA1RUv3}@L8oNd^u=|Vxz~v5>%RuK1fKkIo03^(BVwn+8AfLgSK6|Qu=Tv)8cdIk zN2hI`t)AlO`V~Dua`eiXJ^q(AF*t@k9Em@;w6-Q$j7~L3+g#iH1hOfcv+iwUYhsjp zq^2mYRaLtvu(Nj-HvaDT4hugk>Aw&d#DED82*KoAI5OlZKIfjo7H1uCr9wN0u!B^~ zjEqMicgAeZOwEe%nVGLDsJd$^?=e}>A`);2LV$$72Bw^>`zT2=I@Imo?4p2AmfUwl2)X;5FhcG;-VDerHN zY=oE*+Kx1zBpT-|e2uRDZ@n#w@AMTxP!<=;AyZjB)V#O$i33Ei9in{o;|>42r?W!) zcu7fex-z37>GONy$1AM&A5YU)y#}SHs=7C)K1I6ceZjR$HdgF66)u@%h<*^2DjzwWM+j<^E-*Q@%%kGc*d+7sO}(q)=|TI8@G0E^h9xVQ^CT z^eHP~7xzet76yqj$#NkVc6L?$wIN9!ULS<`jrq*?FPzZ%-n*UR+yF8FuSp?4I$ESE zp|>yi_fO%|>d#-1?KS_MKuNj4KCa2q`Y!-12%^Tqt}m#Zv!GClA5}{oMVpcmW~t}0 z)f0;3$0Q~Rmv{kd_{}@=tAy2BM;o0Pf+2pnTHD^BoQ24v*n8TvAqpP2eqb}N%Ti&E zDxg!u|NfmJ%2?+IUt8OOmc9-RhWO3xEh@aj?Sod1sNQc4Gf`^shh8|VnTz>auVKgL zF<)Q>&+0r)vIDym?YN;;=-CKP3X1Nc;yt$Ti*U;^t;fa8yB9&tpDkf8Gge2=RA{40 z9m5~|pWl0~_y|ea{Nrf*azIj9Rqf@KYq8;oewDYCk3zY(-9L(m=Y2{jDTIIwllEb4 z3JW0_^}M|2sj%m>s=i^hnAH1W^ai_4x7 zD8hG-NrbTmE(lIwZabDDx1wdy-(BlS#2C09>oLFnGM#0RIr2%2B8N!uN4sHV(TU}8 z62FbtQE6(Gkc$6xz*hFYoxt2jV^GPY<8TEuzkuTw*@#Tvj`Yqr-@_j^FCjt*m1+@1 zLT)H~O;_xuxS6k1^F9sh`-whrHy{R8_VBj#5sgrGHcLSNpoJiy6;Xw0_GyL(IhjIY z9H?GUJO%&XLLIFXELSv_->V(Sfpttnm-Cq|#KX_Ye(RYMM7pA)d{C(yKrtHrb9=k} zz^nU8I41Ek#SYQy<0NP9B&uVdlN>QUl(vgULvs93`NQzTmfQNj9PF#@$yeWj2BQ|X z=D%GZ7k%ZN@6tTJPGhRci5;~3?m-+9QCm*9o}cVPWr{+z%5r*=d{^W>y&=9;ik2g? zB~PyJN=DY?hni{d@0P!|GhEgLW{XoL`Tw~ZCHKP0%AinN8 z9UMK~kFMVS^{Q&$C;olHRp&gguIuu&tG<|HSL=JnqEnmCMXwgb85Xzk&&mGR18I+8 z>eWi-H44K1Ec2;SCXOUHSPlNORxJ4;9=7tupZT=g)rR3O{^wYDtTv++yP6#7lTiOl zk}Q>|7 z^k3oAz;Huq^9U=}MAhv_yuMgolCz#l(GvpOAffKM})J^k$RK;p9G(!?eaI}uC1 zQsmOnIITg?dc&@K#g)!UXigKHxyn{eZFI8H1!ZO5!$juBu1K6JRah8g$yLFdS&%52 zjFN)yES2-H8|gkL31LmT_c_~zsp#vkw8DexaTFF_<)b_s79O?3XG&c!_2&PENK4Y| z1j+HVBiROZ)9j|sv4(3yF6Prz_=`?}Kt~r^50k`udYy1Y)d*^82~G;TtGAtZ+`bp7 zFZft`e!R`hUP7h3Z~xr1R$?tMM}4K)kW@yS`A0yLY?MV!rEG}=X-HoG%~DUTR>mV+ zVg52L+^6SNqi%s2M{`q z?+Mv;B)Y^%=$kJ)p$k1LVij+UDBM(m<_Euh_rHUG_azL$=pP)`U%F6`I;n*djYuZE zbs&bIL%Y;weW5e;_hlQp3S>qE8X}1J@WWvRC>gk#1F)$&kHs}&j2t>|ki5a$K_OP! z)3PW}&qU83YdH+<{JMCXbjN{J0Q4GeiV5~)GGD&u$Rj>L_eLq>gcT8mezCC_>f7%!Lb}LlF1t@k7bN- z@vN)uh05e9o(%a9J~9Ns3d5QY3T}!(II|?^5Q9KwTQtt45SOt3)1dO~@$Ju$a7<)` zT&6X9U=0vS9D}W`tqK_F*(i=jvH9U>7JATpyY6E}DxP9ys_jm{28|WB&Q?FpV!HH# zx0uK>;v1cAHFvqf^U}wYW>yo^9%tJBEmpZUrQv_;<>i&mIu1M^#D$y_HFcfhYZ~PI z&LK*Sz01fpY&#c1tysj@p8>#&?l0ez5@x`7ao}QJN8+VV0~)fRmy-nAP+%He zG5@=YSWvC&4E;pR!K#~iYFzHp&WXO*)X@})>7RS>o*KLDNj3jc@!GlLMgHij(}Fbf zXo7mFQl5r_UNTei15P7dZ!4O5Y9C9VPN10cb|1@vF1P9VQ+8ITC)}wTJPGGXRi4f8 z9y*cNZb#d26GMoq)aw*;Rp*5joovsTRejym+`6KyslEXi;keYQ{bi8D!*_0Bi)8>U zmvH2*QD5LFH7G?Wm5yh>SEvInLAP!3V3K%p*s?F)>ZT3xz|A z#EUNj(SudNkm4fNn{L$BNpGynC4;YI4u%MknDpPBh^_DKA_?seL2I52$QmzUs!0~YR!ZO9MV`! z=FqF#F(i@I(|gjS~jOoA*$@W6ce%Hz_pM37z2G2)z$l)^Y{*xi zi4qGmAFnLy=Wtp_yg{|&t2@6K>Z!?|y;Px10;+c_)frXy6L#Du2dz-0? zzD3D_tWA7V!W2*wlBiS43_KB*0-oPfBQ?bT8Lv~3k4MX7Sk#=f5Eq;mga%S;Dd4c$ z|6iXgm=_`2+Hty}&TrLAeF?_l(13W?M=mV}ZQ;=Erh0gtl?sQF zIe4R4O!{VN3vFd&=8TL)l0m)y;M{Js_4j5HY3T_okd~;->;CdgF?dSP-8}F7)1q*k zWm`O%32bw7Y}}nbwPQayak~72tMCb)koAvd6p5*f(Qr^&dYuIJYFw7Sgkj_?_~Y9p zpTRHb!0txk_KSn`=YeCA=L0Ik>qdhTcN~e2q-a$8|E`ZM%?Y*nLh48v*(N0B0*g3Z zOg}&r)rDTRUdO-vCJ@@;&Us`$u;I$S+TZYI4Bld9*Ij1N%&=JX#C)HlyMG-CWBCc% z!6>HLzsf3LvNU7UAjj>41J3W@MRJc8b3dSfYp1|X@nBkIBuKC=TV<}T>Fr;UOpr`` z^bUJ|_S5-+B}=IKo*Pj1Y;2Cn1?r{RW{n&iuy9{ogT`S!L7=?KNOW-%U+EYF zuNA3LjHw_6t|UZ`nbLC;ZlsnD1V6*mtuyL7&yl&uR2+dPivt>|MWmBm6!m!uZ2)s!nlFVfKXG;UZfKW|^x*%^%!^*gz6%$z?Qi()&&<|k0c0H}Sn z9$%rI%Xz{9V&rzp<5BrJ#Yi=@JyKWI{88qTv{}XHgF4r19i_D=-IUaMsM946z@jUi z=luaKSka+TRCm9fNHp+_Fh1a#&9=)ZpaK2*kjNW2>7@l_=gbt-?p^+b7+P|*d_Lg+ z2Vt=#FB1Q#Uh$i2yrkmuP+`6P?X0PTKZ2=z(xf-%qk}j0z4EVgDTkg{Z|q0q7Nm>% zQUt=%%+U4Jg8-+#r4r0SS#)+8<{8ZYa! zxE8MGNIb$f`aYU#CAPrAw9~(^FS%kuYr8v50boXxs+L26n6BAfpzI@RQc>V{BOm1#&(i9lR%(=h!aAhhF>o8}gHmb@2 zAs=9GG;8$Y(lkc+C^eWY^_|OjgLGt)sm*LW9SKVW$8v3Bc62JT!+_^8@A=^){)j*ptjyFlh>Yz+=+J|eO;xh zXF?YThxR!Q`3j-18WGR%#1LsmnNwxbr$QMWOaQ ztz|WYz@|MAe5IR0iOKixA`ub5!`q|6eu)Er)N1_U=YM-n%8nB>KbTa{?ew(B*Zb%# zXM=6n*mO=DY&l8d_*bd&j-v{gWW6I72p51QFhPU$bO~o$v-PQMu=nS1hiL>v)F;#W z?SW1mqx*#(+{@n0ypkode3I56C&pNarsZ34F zqjRTN)4o*uDQD$;9{Q^X5eWHWJ}#V0PP5MUlj) z4r%1a`&+21&m#f&UlTF54*@e|fL zk$C-fBE>bF#d0bevcOy$hK(^0W87{$a|%6&=63&ESd*b5)J)>jFsglD?)g?dpjOIYG3=bmLssc8l4t$ifg{{5cRR54M*oodpcD?(XhT zmwgO1IpCs~R0T|X^Y^-;Th)`H=tO`&#tf*DvRLJD#2~1|7~!@Kie)T{#GyiLo}zk7 z8ykZlG`d^GhP z{vb)VQh03^Zd1F>?8HP8G}doIT%WdBLQXWJ1c1qh;OL)xOvgopdw#*$`5x-u^NrrF z(p}5yn_6&LWI@v29z7t2w)w2o>vY_mxQCT#ajtJj%5}fI2&pFFNTTZ4P<0R?N*E28 za&7&Y?qy|TyI8+{rc_PK1G{?Lc>_sI#Wk&r);t#ZeV<1K331ZW5GQmZ<`7u5l!;lj zBV}#QG_8o#ThnJU$3v`=Rq0SWo%RZ=27w{%UQ72_L5C?N^*MspO3QFu97DZejG)l7 zJZ5>DjkO9PBlO^si@V-7{~#2TeiuYp!M+e-*fl)_rRdMA^#w zZb4_{Dyd?3Dz^Ky$a_u>m(T^pD<5(TPDrq=jxx>kz2$1(6Nd#nuqg!G`N*u_&4!fP zhq-TOMtX0T;ws%8_AxSkLaFK0bVFj%YHkm7B}76z%F~5*0XM!U`BXaa55UO0t%gr5 z-slc{*e?yl1DRA;iNVMGKSX^~cwJrFb;Iu1HX7UJj%_qXV>L-*+h~l&Y~0v(!v>9Q z+xb_Y@4c@7pa(hH+38wyj(gk#ESPyBE~+$gEZF+$dQCzbRtrBi%1V?jB$!{(Cv*om zn*>si9L|MNWB%f$f@DUk#Ms%#Q%a>%HoI8-C30!+HZyg$5pg(a7 zXA5!~?Xtf?{64f1g#iya+<4nV#5jWK2GEVsWmaf3h2O%=b`eWH|LHY}38CwbX>?pz zmv=nD=jgnkC-%jC1Wt$Q7VJ-uE4Bpef5qnb4@#-5+|qW`CVWqb6|?vTYQ@EuMjfwq zYL$2`bO|&yky-K1^T9n!sst9|g~#zlMCI*9+gG2SUWoz2rCDWkQIUBfgSnrZyoSwa z`^HorXO^>;tuh3V`ik52y{okmShoH88_a@ucngbp4X?i(^22!0k^|rf^Lg@?k7xcM zY5WC}g3=UAEbXvm#_GA>XxGIJO*%A*I zS7Z2gv?hHYUcfI_l_YYBVEbGvIuW)d<}@V&0D#~y8{EM7V6qa&Rbw_3Oota+;Ub3t zS#kg|0ut5G;82K}4=w76Trkj9n8iGaYdpMP2CINEi~F7A3lK7jsSr)KcqqqoU38&B z`-D1t!*+Mc=D7fmYnWBj5}}X_rm6SSR}GK0xyni+VDrn{>KjfeTN;UP5k2_~63^iOe zie?RyB-hgM_o5JM*qGqMew+;|f5PT_CNOWnwp@)Tejte0ndnC>9Md^zaG}b?M@dz+ zBYZ&A1ub3nVV!cT(9O_v8WAEHRGK9r6Tc)@AOkChi&fj@6zf|Z^whba{PL$-ZGqR; zK?K`hFT5A(u;jZ_eJ)?fl%?egwXGoz5Dzn7CrJYOiSiH55P$rP@Nb2L+G;g*O}nH% z{C&arSxSU^5jHS?kVljTT2WhG5P}e#NZ}epH}Un6`+RS@sq@FguXnWfqfA4X0;0Ej z0)wc<&f&VK^r6J<5Tmpqy(4<6w*8jS@MBj|15bXg_U4`3lxolxR+ zE9kIm?La=Zk%H^REM(@1nFf7EFG2fEkg6gL{-BdWUStNip%5!b^!F3Oh)wvILE;Xn z>E^!o0*K;~)}yilq_L^)2b)rOH_ta-;_pk_f_t-plxp>Dj4Yw8>BbrU?Zarj=wY2K z4jCD~4$`EU#+U%Wp@|Fxfcn3JU#NRQu!fdPt6g-hJQYSX9NwMQwB+|fI1kp6a@j=6 zV!8~N4!JEvQU)D*bG}syMAMWM%{2L99_oYpXFyg_UY@^vs*1_!kuW>b8eA@+V_EKb zR>B3Zw;R6AH8EexlAETr<1tY-J4E|4ky2*yFJ2zOh*4TyQhBx2J!){#%vTUvdTQW7S8O*dBWOSctfoe_9m&g zd4(Qeur*rUQo?&sm!)`Jue_cOA7I^a4GG_-_WaBL@4Rk8{P=%JJs4g*YyAT?GUn+j z944n2>|*Oxs|+}BG>JKAINv-|wC8cUg@#krKrc8FoSzcsS? z$k)FiEKn`TMFG}`63AUoYL2IH(#v{2Ryd7~#*J_sNhm8pzdmU`I9c$nQLHTI!Kr~& z#53}Hg_tJc^db<*r(kiK;F|6o-*2VTgl-=%*xyMiADO-_N*M6O)yJ|as8sbJq3fB` zj0GOvfoRd0l;Er2*})Z$y{YZN?=Kj_*R+4(Ngg&nKKA#A=utzD8JmZ$E|8Yyt^filSXr`6c+1YwRw67y$4OnFk>lCJrh z3aq?v_w|oLVl0!qYo}yE*!fFO;MQL?q-@;`8BibT?k^F<0_k6p$XSh&-aBk_?T4A{ z&_PlZ_}zJdLseQ~qI!9tW+iLVido#{2Z7|pjS30$&H5na{Q6wX*zkCk(KMwJdG(2n z8`o&R6AQfe2b8JjqIX!iF#n+&lw0zofq+QT_OJLjIMD;T$|~|nM3&_LjhDp#duYKz z=`-^CrJ~{4wmlP{K;r6iMp0-pfrB&F4U3+GB?*2TuVz-zaYE2cklY_}&<=h%?mzc{ zf^`Gsij=B}l*m5dG@#*7pu#}I){AJtT5;T3<~;ax#gN`**;v#nC~#V;_?&hP>fgJx z>x#}Wam1ohbB3b-#SN}vogpR3Obbubg;zH;_PuG4-(UZIaiF5dA9zS;40+X!mde>X z$D>xTl~kHu>tdZ9_r6Bdet*9nmK0b7kSDJ&IUYsb?`G|HVSd5PZ;7b^$sh@1*0 zV{~cS#tpltGZcWD6Z$+#36qO!tJG0!fIVM9wVoA0i@ZzRyAO%m@o?r-AtFs=q+BXj zdz!mJd@O5pSWQa=Ks;AVncnPBIror8z1V6C+0oNCQd&^n<+i?wv287u_YuUt}rPl8>XviK*|%Zusuf{n$Rvh$KQ#{WJa-i884 z`q7d*d{^mIGL>CJ+9X0@66GnE7@VFdC?7RbI@%db-hB`#65Oe*iKJL6p&HnXo=zG( zDQ;;|vvRnpNE>Z8yp=Rdt(k7nIzIU7Hsu`IO`8jmD*6+m0Wk#TJJgbe5HtiBj-!Qn zR1U5V7DpVb`wIQip*?ow`iFw|Yr|q|FTOYfB`}J;&I;@eQ=TM$Ay>d~gb*#Loi8zw zJNz6=#Q{2Y)SQ71tY9yUhZ(RH>sqyVV_g3Ys2}I~*Wl^pg#H5MB}6{GThzrElFyRi z8?qSJ+Cn4$BS(U$wt&?odM`9G8bUZ*Mk{2t_zG;T#Md){nBd&naOHUKIc|2mlSDL1o}amG>>}`hG@_XOePkV-H6;Tbpc&kfLdVB20>ft=9z-2&Jsa zMjwfP{pSCPoKqPVO~oR-eb19GObe8i%T&@_C{Bu5sV>GiVk5JGulHvoLn2qhG$CJ< zm(&4-%sh)j&qH6+FgZdO@`()|!`cKR|2Ls@g0ACT)pPUX(=m-ChLG>1KH+3_@887F zKYTGrUZ$i-+|Gnv65^D#kemp&Ye1BW+Acz5u~?bUYD@-8U#yDcBw}QB5xvNk`BNiQ zN!+=!0j2AJ5ewir1ClpQ_(;*%%$#jfH*4a=XZ~RQ8p-QJE!3T3V%mhC~Lxy$r8hp>1Rtap0p#L~_`XX-mSun~ag(<#|bJ z2Y;6?as(uZCb1PH12O@#uq)B!72(*8^{TQiMTbpnOaeEge>btJ_*+98QWQ~Vc%%xT zS>Y@k{7^EV1XLQLEJ-AA4{v#8DO@Df_zUeFACsge^-Q?f|LkJV)JJ^BM(zuFMcPuO z2=8_eqt_#dv;(yondDxb8S@2LZ)M)*UmQ9XBQ^S0>`N@}3rRkQy)$m-ykO0+0FtTT z3MW-^yWl}GC~;HoYt+0_yC68q2@SC3CS(93ClkC(bZ!+P)3wZ8gH`wzq85)CDeX}p zi+uXqMjRTi_(N<{_tF$MS0z_k%VY-&hSKk^SVGZEx!;gN$_|COo&*5+;OGzYzx{i- z;?FU4+VeRQP;S6icpU6jBMR z<}M|27}_f>*J)#^D#!GcTG?idpfnEBBRFzvQ!$xkPpYu~^LTh_pUQxa-qml?vKCXV zq{`^Dgbm5c1Mx}FRT3HqiGv%3O*QJexyhoqQQrb{k(EXLkvQ_IEFFVo$*tnAgIh8% z_~4ktw0m|x3QMxB7G~b0pDOS+J+hFzSK8V0&g=#G?X2+HJYJGKNZNN^;zwg1bobt+ z-L7d6w(feYybbdMS|)QJJO8Or`A}^;?IUKjBqSBg>CT_pbW)-eu}3hF zc9lp&HKLkP+^-#_4oH^ZAbV^zr$`VFke~HhUGORiNTT-%f#<4{6L}kEK~d`g$<4 z&94%q*S8OcgmW%u;)iuDEK z3EJ{96*^PmB+yUCUjHgb(O@~TGy-{e&H9lN-nz`Z{ao`P$X1bu!^sfCXLD`+AWhiT zOBX2%f!Fe~f8T;MzJHLvb57wBM?3Eys(4xV|KGu!pS8~c!ZdP;P$Pwet7ICXxX)d` z$SLhQXNqIX!he zTjABzTHyV50zF~X*fc0#q82*lqifaww^Bh^-_tHG@l@3G&F!7 z#Sb+N4I%OHHVjULfI-cQssOKnsjM8nlJj-IX5Ljne}Se5Aim$S>Qx=!KJVK)@OyUr zK#}|fv8tGJX_ji=6vvA6{QQh-T2>xOd6=sXSboN@Yf-Lk8bEy;@Et$rc?Zno=QvJI z?Pf=o|=0 zQu~k7iak#Z@I}EndwAQ|7~0+{dJwN%U_8v;_h(z!TS6_lUd@Him#{_W$H5_vBf|FQ zDl|l9V^fBK)1X3}^=(KR$OAbLJ?;&f!>g6&EAsDYwZ-oXWI5k3$WIdCdt7!vvf_)@ z)3y$Ygh#4LoYw8)#|M1BDiwldL2W)69fC6k{VU@j<~?viVe>I@B8C=4iPz#|l9>+{ z(Klt1H=cZEQuy|V&+2QpBO3m9Lj)VEnfNgn5VD}r!<`6&yZ;_t#=iek0m9|w$7`-g zLPKcc{9q^g!UMf^VBD|tMzhD86XZF_2rVk6fyILuAdfbmmp!PXKnH0}7z3@r%`vac zfA9suH9oL10Twa~N1JXyFQt%6RGLOZtQ0XNcuJH=goZFNZSZjj>)aFPHqMuROvxkk zToKZ{wyk~K)+X+85ZfuyNInMCjb>^tPD8{7va%Ifx3P*?BCSI2iXl36jqyCyPMOurgk`q%eVK5#(8_W~6xb`=1Sy+*9 z2(xvsT#Y)S58GlwKn#;MDN(CJY5$s#3|c~E_OL!}U+v2*E9%tgH;5Kgx}bj5BXkac z-AaNF$e6YiYwVl=@&|Eaz5&`;%hML1zlJsQHy$Eve;F8PbZrHOrvBX+q-d_2XDzgl zTIRc7w#L7X9&ai&5o~;5LscUwtr!V&WhZikG2$$Vo@dRsR@}}HQ)~e>U>Qk4K>ZWkuj{g5 zX)`wdr&Jkr@(T}r4-8FSLLOx)k;1GIlz6zP2Be!imM&b+3pv+kv9oh1H)-g z(0K5$MEEm_NCRWJKg&9mB}u-vpu|IpAt}PFL}L(H8AHz=-j*?rV42E&XWY$VrE(YE znK$#Mb65CAEK2?iuDu5YqGFG{c>R9%&ktsiYBL|N@isY?ounzS_@cxA{AUpR|FRFU zQWo$RJ888O--yM<5J?I>=zx6A6H~tzVdb}3KV&5jeB%ssZMYe7kg~t)H2Kg1Izoin znl{xB{-Y=Y4l9|Z^8%=_ZWUfA4^h+sj$P1Eq%u`=dA}ycRiQ+ZYucQ%dYZ{K-W~-B zrO);xX$p$kUMMA+vKDFy^skJw2%9v)YhD^6R5F%cvKvg!1!V&H4R zVmz5>HL>&9@(O}%4#iUtlPVvOq7apYP6jPX`ga*`Gq}iVG(=8Kkx&kBgD9#-PoJE{ zSelcm?4%l0a{lsA#2uit>V10y*~!ju{EGktzy)+Aqs*4wmwNyW1p3#F|84h1BZJn# zFKCbeiB{TVId}feoP@A!-~+I=J6pkmo%72BTE<|BA+=1PbL^puY+@lHZ{5WF9F$o|B<@>;SdOM(CKeD=m|||J z&z|{vYAMlNNbjuno@7YK__?-hXxKxvZ64W_QIW|~%Ut1

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

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 z$)DMAiPH#`DLN{7URS-|Kx@rq7hghmcZIv}zK6k~QEb0}F`8!BBy82`>Fr?srq!%i zzKq_kE~MjN4D5RFAp78?9bnc`PLV(ErBB(3P#|hF|B|4B+1P;Qu*Wu zDBN==#dB67d%7U@A<=A-g269-iZBZ)_bw-M1!X57Znkl{`siM-VYO{!IY7UiwN3=bry#$?K1bUc+ln`FrBdi9Bo%SpWLqscOO0X@(AO#cFmOsAG~dL(~oZ`CFOz=Z^!h`LnlDIPU_4 z;~)#gCHwkOQ!{OmrZMSw4b`Yas{s>JP;nuRK>C28m`TiicMxyAjNWs$q2eYofo3#` z=T`Chw=y$$FQxu-@d`_OB%)S}+V~({>sI4c%GAO(Ze}nd#*PIY-6d3ejGZ@qlXELB z{>&JOR$zfv8PfI(T9czf9)m6|NSMr?iD#y^6(?rRsq}+=#0kX2#y7o zEl~!P?IGNl)Q$;Kuu2sQeQow$e-(Y7`8?~d|2aPOp?C1A*T0@xp`QWU!f^uXsf8iI z^*lN|E7WQ=d@mp>{BTC+7r7F z(i%$$RFWWsg>C26sxzHoOB>J6k!r$rh{_bMWmBnCh*gR(f;h=xUxg5Ph3nbeFr7(k z-^CZRfE&etD2z$t1jlxWlNhj&GB4(5OGyy{#R6@i5zT~(beNC<7p(Dln;+73)8`1Y zBGz5El6?O26wmD@^(3y2A*C5JObk?FpMzC7ON&SiKVD^TqQnPuSxWwg*}?P7b9;oY~8 zg$?=-ABV7ku5@AP1cQSx3M@fp=VShq7~pKUHh^!1OYCvG??FwRI8FG^4QnQenYsBZ zrxkOvWzpuP$6rcXORahyUAu3y5ka-k#+n}oG# zJlm#s)jA9gal4796k0k+W0MwKTw}5CmM_tGSJZv}c91Dfb-aQY|Oj2CS zK_b|;?L02N^cf5ej-#$?R>~xCim-A7CQDkFG>7|5lN`>}_k6-;D^G~E1VTF4LZDTKCJ*aLfFQBy=(PnNoh8kIqaqHL0dE3s8cK!a4j24 z2#n)^%nR`eY2nzCBu!|xnmCS&B?M8NC(NS_p6ldQu~mYZg?>!am{b``l}^$mq9h?L z*c@qCTy#zkf7m)k@U3t2z*lahBQtbv+C*`~X0owE2+Kui0R;_4=E>B)fWSrUyBGVe z?~+}1CB`nJ(!8>whH^$5W&b0S+x^s`zRel znDMNV&p&?rf3oJ>^BGvZnP#(zBqfSNOp@aI0bb84N?H+zHNs{MVQegwpe&1`Um)pQ zh0%uk)Nzc-5E3*tLb`NTdx;KwkK;SP#}?(m;8E}btXbtuWaLn^nZ`{rP}x(qkNrV) zaV5fN%|kE05|b=}vtOU#;Oky;%6IE;_zc}Y`-=ScSw`)a8>xNks|^3epDx*d;rwT^ z@&9}QyR++zJpN~)E4YG#9GuUO@VbBS40!2DWZ#qTr@xNtxPmL57CwIr=;?5#CxHeS zU^AN+w`l)>$OdyEOLNEu3u*0Z*3N%^@cj>x#gEc2bE>rboZ1XZGzDGfuH3Fl$qm!QdCaFSa;pY@WH)#C2is2 zXhAFtN!lP47GBpD3gu;3X$+^f0PEPN`BR=wD70E0U;*$Si~{v4xGcZHhsO zu>;@Z_D_6)7j#uAOdlsv8NyfyB#z@FvlyvUlu_6U5~H!&A*C%_arQq#^1MsnH-3?F z+yK7-X#&QODMPFU(sm&W5mtf|W%#Luwmd}K!kVg4=&DiIBe$qDUHe!k|e?y%`5^hp6B7YJ{BIn%wbbktnB5&?dNi6-yv?k=?-jHQuI8e zC8(4-X*6mK9UGxg?qp)D!L8rCgTcY!JnYE#aJ_&`TX?Qy^~yd1*X5RPeV@C&yO-&S zh^U=nS$1CaH%%xO1FpK}A__&1U3cwf_s;uSG0@AFt?Nmm3}e|SD?z2{d=>QhyofZ( zs}Or0ZXqB}VvNy*Q5!7qi@`k1b(*G3*Jo(7+8jJI#5Zrcl>-kQMGK3B41uP%r-JQR z-2cFS?%Vw!Ns`gk(aF^K4Eql}iZ%w<_fbhkYQVN7mHYb&AaIRom5@M8Lxd-0RK2&WAKPaIx!_2u`iI(+}PL3k{ z04*D+g27~Vo(rK}0!E@qQBn|Pnly|lR69w>9%9cIKS2)#dX78-aYW`? zkTml=2mm8MYYYPU6jqk*mGJIGLhXfRVRt+cOS8aP5N;}@WceSw6T5S91De0-Jl4GL z2G0HR_i&dl9n$;m&YZ{pO!Qh_%cWfUW69g4T*_;C?bCwi(@Mlo7hS{Rs69UnvH>uU zY_O1)U9*hp`MGJNwx`BzFTRb*yC=z_jASNZ@ZScx`Pnzm=V5Gm^Crq0%1?;zp9XrC z_tV)IK$3mpFpdjY zxY{O8LZY}ylx1kIf+=;Qi(Sa><#+?@$!wpno`bq4qzI7#lEh>bgA!_LKVSLq2iasx z&S};lYLVGCjni7;u578w}=BifiaLM0(GC{pZSgV(tXWfedhNF^i|P6l4A z5K#nVSgA+sLLwR{E1gY9kvVjbnKXlxr;w6+5+t*%yS;Z@{CfnI7r zMwv-sAOlHNQb|>%=Bit_?r?@ZJk$Hfb5a2nJJKYTCii#OS$C*g=j?O$KF|4mpWk<2 zdS;4US6#-*Q;Xbr*Zt(CjZiA(gyfn+NTg5^)=86M zt;IGrWjtt2i~;Lx(mObZ2odK!C`nz_$OzeZLg>9s)Tj_K+8~8Q#F)g@B(b@c8Qyzh zjC5LEGTlOHjnban6dXFT$kara@44m@4&QSpe{_14%$f28nn3hj zeBoT`t1C#65Gtq7_ z`K0q`-T15YU;7ITj-NyeM+}l!uCUz|T(Rdq-t+6Pqa2)Oa&kRcF+~&t5j>5LxTeO{ zL;9;{7%eSOmnGiSU@b1BYzk%C_wxBTrm6=C%J$q3*377wAUHPSBJpD*~gttKN+1Gx}|DXTqU**a>PjT6&@8!bx ze3T3R=ihSi`#-~#x1Z#)Pke>B>wg0AuK=W%b<(jt@ft(P4cx$WT=%#-uIspt8@K_v z*1A4!O5J$ljW@3S8UD}fJkH}*Ze@j)ubBpX>8HK~F*zGt{+}=ZH{Iuv_op=KX1V!i zqNerNtmn{s58+GC@W7D$f4rZ2-h2;x-nNIs?>l@p*?QX#Y~!i_{i#Ux&tG)g*v4yk z&A041nb+{q5|+OKI&c5xPcyjnb08!eUh{g)?E0^N?lruA>M?%dN=do6h&6%H$`agj zH{E>?fO9yhK`Vsy5H*NEC<0<=nL2%hFC92UzOKjA)(g>DLETiegd{`ZWkezH)sRq^ zsRMKtK>($YM09l29`bgNR#8x$yqiD&wO?Uoso^EY!I|UKK_GIe6v>M^7xVH0U!kwT|G@6e0wVkRYO@aS>}Pa#f(UVqy6V z%PT|jtV^p~5MrdMJ?(DJ@#Ck6!Sjq~>|*bp`|0;fCTF@RB`95u78*iCh@=HrIJ1He zp5ClsFz`4ZG2^u6R=dUSZ@Y|5n`c=(v&?;aj#9KcWUY+ll@&&#iY(93Lf{*Vk15Zf zs%nG)A3dYGqMa3th9k6A!6Re>5n3qn zqD@to*rq`%lbpEn9FWQJNqL5+R`|{zekDKh!!M&dk@Mv37jw&9cW~Qk$yHZ8m5uxE zVe$T3(NkL~nt;{{O@>r8GLHRWMNB}#jbL^bPMpE~!$o3>z-m!OZ&eFnOC%y^4wu zgurCQIEYmujKrumURpwMgdma9(CJN+6`IkW&vV2-`+fs7q>Bfl)~7Q+|Sv2oaGoB1KN=EOj+P zjX+_yloiO1A>!yA1QK0 zIj9&7D(Yc{7J?WA?RL&pPrI1@a-WrziuD^ND9aJ6t1E~gkU}FwmaIy(fGoogOO#aU zZ#LfLFHA;L))=G7vXmO`nug#(D}&L7$~ht+Wq=5J?7HJaKxGDFRGI>KXqtw(^%HE` zGD}lB?!W&iqkcuV(*~i5L|o$tbwGq9S`H$RnVhm55D~>0lOZH{ zA5pqUDcb^wHh~EVbaTY85AXj=>~o$&dv*hr&Iu|b=t##Hv{otGMdvtWsCAA3qobQrh7=5CM4l@TBR`@f@(OY}BvU}|~`sx?7g z6d*vz9A$E()@W1U3FKKpr`;pVp+0#phyVV)-1EV|V1t<8@-vIDcP}vnFgYT6&=RCi z>xMQ^4)Ig740b;sxqcnpM;Sy20naberq4b0+`ezTtdjtQTr%$o>Kud37#{@#=qGUfF@Ma*`S{uI>&5yTay9_)wLj}@@YNx6|FrC? zW%c#|cE!TcaPa(d#Ub_HyG>^`GUy;H8SbuJw*NNkY=&Fq4hxaji z$LE;&(1%h3aQZl8sky+X)Y-G|h9QEKuyqSx%4(X+pT-5xe0JeDp59a?=O6=fj`l>8&oiRDhF*7&R6p(++`m}rR0~SHM*Ga)%0fvJWd<+EVP%0xvPZJU+zAH33z{q(HFZXdmvt`{n zZjKr6>pNcX+Sd{{%u#5@d31vI1xbz zOcZ0A*NFEXA3WV|m%&3^f516MCr>(v5W-nkBc&8XOYnjaB1N7vtV`OhHqJRh2sE~4 zc6yShK4TY04jy3tfd`RMGi)4rmJuRkQsG0uIZI|Td@GLhw6`>f0P@t?VYqBDbviu?B6$&uS`;qTx3LH2y+ zWBkIV4)Z{LregEP^>hU|VNqF*B!^5qOa@jm1n442Sa<7J|5#VCkAkSmarlQa{vd~8&4dY$637k(ex zcRib_xy{J#G@ytv{T)3G$~V|ipX%^~oVxRKJaEUY6vLX!d+V4wZ~#so!Pg}+pFl*? z`XDsH4Uwh=Q9`u}TQA`FPrixP&Yet6J$6nw9~!~0EuEWn_1CALm=vZ*QYSgdP2BV^ zhSGhr>pHIE#k_be2VxCGJn`yAZscC>ecT@3MO?&<-1vk!AA1{k)xyJi!EaV6;GOH? z;_Tc!uY(8n(e;9|UZQ>ThnfA*hm)=AsbgR=Fd5EPX;+uD%PfQ>Xo0ROnBT%eCfJu* z)D>5=@hMj^wc`pVCa0*CKx>UL8Q^Kk0absA{_&&Sf9ofB@Kax8ripy}Y>&>FC0IPn zC}^aQ1eGQWF-Am?fG7Ge-gQ<)JW?r?Gz1!A5QNyET(WPBCa36ilg6VQF)D`$Ws=Ub zNv=N5HWZUR+7TF(xZqhBRh%Ty5e8FeKCpio^NQ>F;kUkp-qb82!qV}B{Kl(Z!@**T z#`&Zz8H|v|pp3?67EwuvNzb&FVYmk`!Se!cuP0^Tg19#f12xz$~H+e z;oSHQA&u|46Kz_#;rPh~Y-x#7&@Nio;K)@*-PDODqD^vw8oMK9#*k&%S^L)H;56Rd zCh0Onhzy6LMA1@;(pD&?&_WSH#5PGJUbI@M@uWnn^f|^rB+-}ZCLMF9-Jx!plyt2W z?N)*6=E($Lw1QR{GLP6sasH-xCRydw-a}k|+4;QU4L`|wmtF%xusm92&p&*K{8xUN z_TfX+MljRsva#DmsECXnnH7LU=&{YKRG?DG9U-KjwK7zK_Ep7M@@@}%-S$D$?5JScP}n+rYq>} z*h**fHd=G@v^o<6JoWN2ezZt=^f=|QQ?xZ)FwtfGnIY_d5Ui&T4VftrLXVF-O$!Mw zO)sT^W)(NLos&2G8dJNTnkGk&VJ&$0?Uk=@|N70YYg@^M>4_$y{zl5-ILcA>vX?#V z;Q$9%WD)-jzRS)r#}0O|lbu}5#mqC0UNa9}0})TuT4tHI@>ULU=y7*!+t|i0@{3F{ z^@KVnA05Fjf0K8%-aHL2IEOn{3&#&(R|YsaVEXfa&%~d+Gtm$_1=IoB9Uu~|Lj;o3 z5djqhL1sv2p{rrT22NpluoKt=>-6wa5u1`~;S}ZZW7MZlvtCbdNoJU| zHJm<8SUpXXPvWA&gpw#C!X+U}j1nON!6kvK)EUZ`1R+2wLU1UVkF7ZcGBk)*dkkJA z1WQ>Ba3hPzBocuoLwJXemR`{YTN7g>xWK}w*{Hgd3f=4VaMmT-QjB=-$g|`M5PiVfhCIuN!s7z?+M)6>oys}7-7X>| zN2T^e7u#5>x}sIIfJkE-LgUB^jh1@Oc+n5OjLFUn5m@}apF_Rv_gL;qjO{Qzm18oGl5LciP#A)1ka}$M zDkKm= z3^8b=vlKc)(ScqUo3%I|1*b&B8;@%mlrAvRkmZ6Y)ne8w+Jj|ST!7UPUMm!uC`iGJ zE!cvLEo(jNTCLR@ zh((dZ>LK1Lf=CUw$xI41a~|8Itc7kn z$GL{8^h``lG8zrpvVDfj~uR_kHP6CtLlRSd)cE(T)sXYa4J4xK4-bh4Pu zGn{ky;PF091(Z^V0Jdq8klQB!kidZ;ga+>d+NAsN&Qo+!GPVz%cGjZtmbyvP5^s}x zQwV{wEP+T~6bKn;T(WzWLQ}K~g0lo$}4Yg-tdU3~Q(x5N)Co_^d`Y0pSEuI-(4y&?W|l zFp!eC#|edY0Gpo7q1V5OsmpiKYj@7+dS_!2UEf~Amuk4z!buPR79IAyf{P4XmBW=e z?9gD=bPsE_R^M=~Vedz&rkLVJZv1B&iE~v?Bn`yZs~5CWDBOQt`NlO8S7h*p$#X|x z`kIo8rY;FKBE5hbBq~uVj7igo;Lyr|Q3U5x(3i?Fy1@i+Cc{aEE+vc}#Gu%$GSIEG zD=7lFJ~S>hOTGb_QHF@L86pcH6~gw3w2)<&AVx$biKwKFcxa!(2STWjQYWfLR0P$e zMoCya3THh%yUn=jpV3!CQV7&I$%^U1NmI9ZNnd4|#o z?-bU75SnhMMP1c|;5m78g)@sQ%*;+9rQ~Hl@SPZA_{7I=rLq-yk+F2@472NdOs|{5 z4;3~vl(l1Nd4PD(Gc&UesROkIVJ&&9jgTow&SWOJE%}GrC2Q^3X+sF90UtU`AVLIV zGMuxR!r+{vv11BTk>kBbDMh#2rL2-3;vrDtyid9pDTprV9Pl1hw8()dRO*qHI!l2{ z;6am_4C@?5%LEFnCo>x70}v?k0v|GBY)~p4dxOJyj~&yhs=B6j^*9S6O&oNVVKPHY z$&@8gmME>zT4J)CvMRBSfEdtOfx_c$AOz3pr8DgMwq5+jZ@h`NR!q-LvUSULKK9pt z!{No#{HLG&5BP)odCj2V_@rQFW+O2~w2$D%RHe+3VelC!#(Xc*--Q^{Yc0mHu0Vh& zLAJ*XE-~&>JxV&P&&df0UqfC%$RP7rpPs+*Gobo-Tcf-qC=fxCMToLNcG`H~5Nk<@ znixy+lPho{gCc`Cc2tWJVn~xo*(Qicj1AI`CnQoKg@WjS2BA!PuE~!#fuji4TZ9m_ zvizJccSgX4Cf#1%UF$K{YONj*wdT(BDA!e7#WuEajALJ8|N2AS%4V2C@tgvOCirrqvH zz!`%G6+}T09w7`-2qej!NyL;utMJ5e6Bg3;I01o>iTj`azfO)(xq+%8Gz~6@vrUd4 zRtVRCQUo8U8;cXkz7uC5I;M&OyywJVNIOV&PIg!-YxbTv%>~bS2J4^t46N2%|HJ~v6 z{Z#6vS~Gl67eW zLQH|d-r=1`N`c9eWJD zIOnkAiGm9rqjjQ78AYx$8o)?F9ULv4;oxlGS#XZR-leG%$^EI-ZjBSRlg(yR z*Er|M+btsT?DZLAz*(0-(OBHAlukFT2r=Nt*08zO1R2P6&g{%O%2A0B5f?n|qC;I- zln%HcQOYx6BtQH^FXQs3?m`wV)@|I#_N`mk_odJC(R*%X-NKMJ&~WwaEGJz>k#{ND z0;O}L&}7mhg2O9~8o!)U4vQQMsvn{>k$xt|&PJhvS|q>`HJCs>>f>dy{lz=7K#GPI zIl;HUHbmj|8@CZV zQ)H79=vI%Q4YFmBQcyGz;ViZuQax~()erqS`ja0cUtOfPev;Nq4{LLxEYVgI#y~;J z#Bq-@0D>R_kpM;{-9(TO1TlDIkQgWN-5fFvbqUTUOHb3n_A5}4n1gg0S6YG$WHusf z!yr2HJfmBAT%NIEog|!g?C&qJL1}i2$nmZtO2hfvws6Vwt_37fzzd)GZG7x+Zz9WP zac+qaBrymOek@d$DG@n%lxrhQH5U6q*;EMWSwFp=B8Sg?c0b2XEMW4;nZ+|a`AJ*3 z`sypW{r0`=z4riH=O?-Jl1tff-aN~Tdyq222bX-WtVhY@`LDDBQh-{P8=AVJtcIAV zlLkSh^y#Xu&xWv>EZK;bqZ03ZqGUNoRgP1kgQuw*gcRgi3Vds9b5@*ev_VLNinsOIFw`dO=tZ>MD2E+<50n$-W z;u?#~LCRK|8hDVhjSUUP2!iwEG0+$T)|1N|CmKAKA{zW^gESGROQZyiM|gv?1|=(` zv`AXxiJ~P6k1#oq9J`1XTn2JH!SEi8#+Nm=tf9B|zOh!R)`Zn-_4oo2&cV^6uy-%) z*#id-z~W+B#J=uTHwQa*z|Ng;@x?GdpX~J>$MxLt$8nBx2Y0ZKeH`Hki!3r?MC2Qj zr*!Br%Pd>i!UbHw63jOiE=9**)k`%Qojso`cCv1K#WbDv57 zz(J~GCpdZ22WY+j-Ar#=kIWTLs5EV`OIR^U7A(P8KobC=5|KH0i4p+p!=~vTCd*hHt;v{sVXqh4Im=UN1~O)XhADbJ0cTvFobKxb3#Px$~}jX%!RPxAzq7?tV6G z*o;z&##RUwFz9VZ1~Ns(Ng3D2#d6MP`~JS6JuMv3bYp zY9EL+jYSKMR|;D-wDV2^8d4MSG`_?|$;OS-aCko}jc2uA^6o$S1Ag<_&*RRI{uRIc z=HKSqx|94u;c53BjfD-2xJsEF~o^3S|s-}p>m{26T~PT(MyEzNGiXhQm0 z2|Lcv5NLF=b#1o@!VszvGILk~CMpmWLJ2&H9;jk^UzK4@eGJvO708k^6Xs!|K~%^> z(=z9NkzCV6ocnsTEM8BIKW^scvp-w2c>TYl&aJTecCiuuV>4LoOI(YGmVZ+)* zw^rZ!RnO}{5H4NXI_ZVR{u%4Mql5ElYLgw*VKi~nlC?Z6T7 zE`l9OlHaMPl?wqme=rabr<;mIU24(M^WK;aCS? z@O8t)#Kf5PqZpMXF8b8Chll?zLdoQgBm_lX(AfIy*Zs1jo#mL!U>l3`o>r?sAt>wm ztd7Mxd)EC4K#lVufRz0)7H>PB=uysEv@v8R!+DqNX~#CLaST*kOt}?ON{lusy_tyj zf#6dhU1khrRU(8yDUEZM7!n04W`a)8iMO9=R#%spobFPX7W?lz$TKf{3eSGlMST3v z{+vT)#pVkxqFf$evXV1rMr>ax`5Enzt>7NHCwFOU&b z@QJeIJhVu{X|2Z-h(U5>^4-*wOOhr5nXcLHB(5G&t}YW>plb;2jBZwd6`(Y@NMlbE zoFGJjG8$3W*vy~_XpvE4(Nd7b0v`g6ugNhW6h4Nqh>09kDT0OQR?tS{ zaY6{U1U6^T~ieFHk;msePo zEwc3+F(Id}8VcWF27$>pz7}`*6vtlpV%}8`*qcvr>4ldw%N3KhOgXlABPSs zptYiE`pj*ZW5<&=v9Pej=~GL|l}amwmW&29MJoxGolB|Ab{yt5H9bYY-$x2Tr`N;U z6tp%fM-+L13=;2BBOiPqYZXYDawDuuAR&Q)be>!77EM`Uq(X#CFo+0XV-+7iZ8jX;7N(A@bVq--3NUPOiFc=`SM8}FT zCQ)@`DT;y+EJ`OgFE<7#bycHvKuCd9Y0`o7R3ad3Bv{GB#3Zh6ICkO)KmRLl3LqO2fGNNc`DG6GD5-I3UrmgkNlP38-;;9fO z>4_pWQ7EJpXr)l3P&*M-dM*J_2_PdiWSYsTX^P^pUjQGgoQS^~rrTOh#J^mh<+Hql zcbv1wzj^%eI$p=KdG^`~dBRU3KKogC$76IszV3DK?6r$-t^Rra^#I;GgoBT87Jipyqb25Ppz==Pkx)$k-LdS3*iMp=SbO59bRJTf-8|f{fo@(-i;>U zh9iPWf>)x#X-!LNL`bwIOTI)bSgO9qMFAo;&QuM7)OZhx zWMdmvuTvx2!~lZ|llSO7X)CckK^!ilqQX(oUtNMDhiOFQgMO03(_Qqa;VIX@oSDn6 zK#}pRtDnRF`n#L>qd)jV+IddQS`<1E9hBB#j6o`evo7tHYeftJTYK6a$x|-9fRo3U zId*svM4)a)bSK(ea><3PuJ$>0>=eU6MUm&stn1L7oWM1Tg9nZfV$uOPVQ&3g zI^WC7C@E>RTMPz6WQ3-!5k`?`IZahzq{g%htZne)MCylh4=HCMO&4UA(av&)tNk>c zXeT$QvaH79YcUR{v*cM$-6Y2(?>$CpT166M59@O5x|Gnj6iJj@R~2Z9v+iuZKs6j8 zl|*NT(I`1AB}b<;?XZnS8%-{fjv~tyJ|v(~S0#DTK`TL7j!;^Y6$P%Tv5jR^4Y=y6 zEBTW@{zIZLtgM{ofiHfRFZ}&S`1IX(L3ab^J-C54{Sfl8=0O3m0NEtqFsjdD3i2GvQJPeQz^FpB#tr}g zAOJ~3K~!u|t(+)xqL3gBtxN(fFaszpcxXl?UI#=L2{A`uP`*M%fyfJ(S`S3}WyL56 zY7tO6;#I+P40JjwW z|0HHMt$)ncwzb6Sb65;mJkZWQIF+8tM`? zJ;^i$Gf&!1{_Gdf>P-`+#37-n5H?c9KuZ^#cf|!9fA3A4{Hg!Q%s>7O*^_pF^%RXw zy_iagzk;N}h-2QrBw1?)B|%0o3Vc9Bp9H-EqO*i{kDwh?mOMy8;|S6rL`JL>BF|A1 z0zax5>_3Rj4M>fw6hnIgw^E`zZCY867d0c^d!puG$FTLn^Eq$lmCS9JWuiOHD}U(w z`NSvwhI{WihMLR>wWY}Narm1jhJaQXK3HN%4nmbJ>4-Mlwr=6rkp)hlUZmYIY~He- z^Uptz<>h4#K6rxuppO=k>CJO=I&E56PS(v?S#Gm*WlN2EN$7P_p_)h?1^SZhm}sf*x(A~rOiU4d9~gni2;LAy z4#J{DND~MZlZ`7O*%46N7|y4n;vrwXtG_g(`hVPQIzZwvonTLWAthKzEkIE2p@3)TiElA#C1?o|_|^?4f)l zj)puiT*e>TPj=)m=l9mJW#e|#!YMd)oM;Rok7y48fs_s42~i-0OA{3>LCTawKCH-` zdu-Z-2*0)R=uwv*N&VUq+||I(PL9p0o}d8Y?Y#YeOJBP0?e{U*KR_DErk8AD!}I>_ zRPyq8$-zHA$kIP9Q64LixuiAUV)KhPGyl?gRPpd==p%fD6;`-`8`glt6KWC>0=)h0 z-+cPgBdy)L;f5R5fW#BLzLmn}g7=&{bRWVBCa%!6DfxB6J z<FS3Cv1>uS7GxFB(LiN>RpL1zUgRw|Z$_Q%+C$NT86zYJFn zXfjP+SBaW5UK%8V5F4Tk=rPwlpYA1>m~uq9T4ALEJkdJn_7FPYPA@~yR0L{Sqk|#@ zLlYgQ&`C2os4<)NQ<~@e+)lq^uT+p`ay7mgsQvx_Pd=@t1hki(Z}w2;QrNoUJFa^cW!>lY+wNu4#;x?G zGe*M^hYy{kZc<|{BjhcO(JiX7q}vsACJK%nAL6|yFN)NBhnRkUJPD}1Cs*q11O!M9 zNiu!?kT|-r4MK>sNzZwaQ@h~My z2tj5tYM)ZE0Yc->Y8i^WAj>n(tSn>3LhSUW!#MLIj?<{e$KXA|M}(1NCdUVdJ1efX zG_@tm4XvV02%ZougMOcllM_tJ$m;3i2(9>;8-JCZmt4x9{`P<2UH|YIu5KEBv^hi9 zYrOJo?RIEYBg|7Sfgk@-mPCfA9KF#=_<#Qb`QTBQDDcvt&=4IXEG8-pfYt;pk-iOb zkU&IB!-*vpcI?Lg^v_|Qv;*6kq@^{^m*g6Jo+G_NDTP0?$nwpf$N%QfGdEZu?`@@O zSz2lW8OM_lk>O*B91YUsp_t;q)d64Fyn)v9Ucjc^&tu2-?G)`c%1EShj0UT;T9YUV zXI2+Eb>IP(Zu=smJHE({YQ)7^8}=R`Fht5R1xq%dbFeA_C!^9-Wpx?<)Ms+&2VPBk z`;*zQ{n6D#gb2U9^yt%<9%)_Mf;Ue;F@eN8dFTIj0nu`4%rd^wMPA z{0Qsb-?^7N-gpP0`Io)cyBBo1`Y*3$=Bk;0Hj#K0uUczro-iQdo$q|qClG&i_%MI+ zzyo}FX^ACkxp-oNJ6`mnue$24gIBFxbWdae@yp-j@%Wq1A&~Iaa_YokGB2nnJ4}7$ zOSFFO$Ka}`6K1#3y#G&Gec4aY`t`TaLJ;a2O${nzq%tO&2%q@~5B%-BIVuXe&wLK+ zp0=Cr+#I>eFxBcb&c=uc0M$dct8|K+Fy8%7&6rBuQYPh}kc%SGt?THp)tS7K_ zNnJV4+p&>dyLQr8xbyb=IK6NhOO1|M^74-0l&S>+pE;JVOaX-86{?Bm^NOfq%-s(9~6l$qem|K?KDE`}Xt9r(e#d96oi^2ibnX zPHGGrre?{D7GF7VkR823#IdX{||l- zFW$MH_Pakojv;htHvg z1wQ1w7akI*k3;K@+)bn+nPDn3FiKHG1u3HVYF>@K zfr=$+Brz7=fUzgBMx!w%DjH*pCDCY9R8%Zc1Ox%43>~J|+wW<+t@8e{&%MmR42;GR zgZ!Rnp1J4jvesF9?X`aO`+fOSS(2u>MWYDe6Z-~i4*nn*0aLfL$HrVfFp7TWGdS+) zXR&T=4XFuVTq(QiK8_Z1Lf)L^P z6=OA`B6k$F;nd5eNTL_M&b`rZYkhp6aVuF z#Qq`@pBcG-Qk$AnAB5JDm_WT_zudsZF`gu-qwneehl@ca?YiDR#VKHt+NJ^wszU3>&(y~YX0KN8`fo43$qiLkCm>|TwV^90s<7+VnN zl0qs1KPId{8DbY@DrSn`y94qGfZxy^b>sH19??kErP1%qwK=*C$sGp=OU9K zmablY$kwxit${Gz4txIfAIZ0DBwDqW!~Wup2i->N>dTq^!M8|nxdA;hjSK?(#Y?C^ z>J)~beiq)q;C`?BL#mOOW|~*?>id2Ux#1g!eS>nQq;X_})~zi7R=so;kN(V~@ALYp ztETwDi9Y}f;Yi41zx!B*9&uN+L3cHmpLIDqFWd>hlBX@n_tKjjEhxkF}%|9f0(=_Zdzy13< zV56=Wuz%Omnd>q=v6*@p(#$gAJ=+L>^$W!04yL#5ME%1T7+$uR!ej)_M+gIcjAu*Q zU;Z@LUVAB{uYC*0p8hOE7|@!Vf;7W9jpxPqUI5Y~R1$49DyTRfvLd6%It0pN`Rbz> zd;H_MMU`y+#K&2^Z8P#wCnBQ;${L)NXbD4$25Cpb?U9s^(4oH-kCnIw> zt07SMeyu`c%G#6$a%=HK7i|^BYNEiS?)k8I0ABqP_@grs#~lHAj=S@A{J2gW2d7-T)iDQNa2Z`f|THU8n z_gFMCjFJ(XHg0Cu?(GN>;;0z0JzpZF!WxGzN}@2t2}rYyPS(XLNi9yQqH0y){tHi1 z=o05Fz8CaJ<}5{7pp=J@3T-s8AEL7yPbf-f$cwCEz*at{mtGY30md4n6G$PUFrY1- zr$B*_3X^L*rSN=3UKChUWyx49aqNT8gh7nfC1p`k=nR4EMMmhcs0S!KtkF0rd!BoX zhob9B&<3R>E!|>b%QWY|`LB4-d*4mpK!db7hn<;b<4re11k;&j>7Hp`D`r?+Xi5hw z210!6kqb@Wa{Lod&7YvOpqxrBC z;M<=i5t!zqG5X+4rCXYLT#*(GP zhiKoNF!0LB`#x{(rx$bE*-vKnyZ=S^#$VCBWdnzubKZSkSM1)&?Js`@JOBP|w6D69 zeADfeyS7to-$Hup2IhWz5#yix7~#_8B3)?)ct%L#|WeT@;OIFS<{RB|4$M#LvRQIW_UA}NgFDVJQro;<(n2MNKq zPCJd2^#j1@OijUw4^Fy26!}^kzSiB30bnf?pZ_>>KlwhbD=)d%e|m0)_=x?7^7j}R zlJJnR#iTp8Q@RovN|>D_x$Y*!o(Y;Sc^% z9C`lVvHXaK(dx|5ZI2U$b*vD0LRGBNwxW%1>NZ|JUqhslTK%Y z?{o8ieuGsvUO{lmY3O=CMOmV-D9@uf=2$vA_7L85H8Qr$v;A7-;gt?66j+Pz1X6k^ zs{s$3qSRTX#Hs{JL1{{c>NPlQ7+(A=rgNW5zwskBY@ep@;j8Eq0=DhJs|R=~%<783 zP1+KR0^?)Jsr!NeAI}InnPp06^bIyRx~|wdIm4zvbJQuPvAZi-y>>NEdCF6H{OM1? z#)=<&`(g$MhCn*9qDu{l6bf5b-hMv}aSj}UD2Ncsv3ku4`Uhg-B&2_!k9NC7QE1YR zX4}>sOij%a`Y}oGLRArw7V(BIU2Q?z>kQ607;dmWvoRP8edBM&_kC6Wo|L0?qLWy zjBx~B%%YJ#&i#L{rLWOXt$zrAs7^k8VS@(oNE14D3Db*JRMQscDuY6JFfl{^ z#Ao3@|7Mu;e(^_Bl%@becSFa9ohQpc`63S~;13P=_&MPK=I zyj|NNg3t)2hsT(B-FXbhHFT>*sWVb*umU_M@Z@}bio|3Yd8b7bgcKNXqJm9U0__Y! zSWJ;&ikyKZs~A|ik{dQ$$)ZIgL=(FZ!h)+;KhT+q|Dr6g10$rTJf8lsr3)!^zioNf zY(*k>Aki~ZY<|<9vHe}=W16#fDVjf}2B%+mT_PfqM;Q{V@+`}F|#itJH-0R1d9SrxZniR zT`5ynOkoR4|Iz&n9DU#%uwu60s#jbE4*HMo=lBmDzklU4RAhTHrhYyJK>dh1i%wj$ zuQ9_8PUTeU)E`uK?k72P=uCU|9P&cy_uO<78|LQr`R=dQujkRj!w0_T$}6kBJxECR z2O(cRK#pza`fJ$o=086;g?-sd2A}lwdu`))4gIR5#LAE$sv){vCY`3XWCSxcNBNxR zvKYwIil9vR39^Lp@7}=Xt+#Oad%nQv=ptI}Y0@$!5Q7BPP$F=F52dLTOAC3L;dDk2 zL`j2%G^{Svhz&Y5}XnU=_t_P3z8tN&~Q#WmP;@E39tE= z@AqOFux`NPgRgort41T3YS9QAOz9RX*SONdVUfP1^aV}|VrMCRi7rygEXS6bCV zImMAregQ+ze=bpNfD=wQWuc(>xWh+S(ic;!H%M(p%?s#cnnX*StO)3=wRF>zIIIyS z0Y%m&PJD)j`q*&89n8))iK2)sFDS|;LP)}(s#&n6AP6dMhN=!hRY*(DEhy{&kr&|g zI2?+!LSvFWrfaPYo>Fu>-73W?tctXo%_d5D1b$U)UFJDOUf>5Fc~4a~d4U%N=pHJQ z@B6enZ9Gp=3XoD%>0G_|uX9y8lvE051DNRP}N=-Q&eo#QeX|e z->Pwbh%g2ze7s0d=$tqS@U$RpwpcZ~4BOenr{Dhp{^|qo#rJEB4j#@UpMEwQw{OG# z*LQf%)GTX94`;eNL#^8)E;Q=l$J5w3j+owtYxv|>Uc$ql`gq>;7tiBgzxEw=&y>9C zk5A+OJ){9w-waW$hq&abqGRiU$$PBts!DB=4N%)L!#n^0T_7V(^>QJuONe9A7|3GcfEl<|MEd_mYx6bxAZ^uiTAkAkJ75I z4`f2Ri@4~Z&daBBc3rd!fWx1CIMS1>e8Ea?`_OFwZ2tUaR-Ad@BK$o+-h(sM+Og!1 zm)vVxi_cihtslI#idbDb!I7^!a=-n4u*mxUlS3DvyXc}r+VLCb=6LVTH}CV^vHku0 z^+O+ezxVAy`TdYzWC!MfIM_`HAUu5Ky&m7JtG0fZVvPaMM~M)FBW(21PR9|?dLAQ7 zR-jFaCBOw?g@E*_4{`g?zfExNn^`uxn5@}CIz?RtB!MIs5IIVcaVS4#}KB3rnB!NZYf7_&n)l=dk^Z)42XeKPUXxf271A!vxmO>ckz%%o{SI*L&jJC=^cFbHRp1Ct%k8FGg*Ns6-s$TQX##npf%6(3Z~Vo z$n>nWY}ven>8UnRSf?y3Md?Ut4Wcl@S`E?>*L;lDUSO?7YmIZ3Qfq84%?JSH zKpMYTfH|$A06Dc4F|1Y5S_Bk{usRkpFYf$#p5C$1Uhg1`L>KK-^A@!sQBQ@eI6 zW~PA9uRQXyN5WQQRcKCnRnf7FfDQ=1N6?t#kO&nbQ;q$bH!^V1H!((**4BWW;B6RlzjsT3S<~^X{%)M^Ipk{lW#-+%|}?d_Gr@f6iQGj zZ7RYTh-(d$li0Z_+F6Gp%_xe>iyZ_J_0kaa4bkjD@N|bSQdd0Qfxf%NU2RQXb zFX5_9<1GF1m+61hX?Q0+p4@YYtYj$k>AvP%W?p+81G0^=C4s7=1A)b$9C&$-jT0b- zP=ihJoJSFRDBVSt65~mv6+{veAGQ>Zu2al(yL5rYL;cX{RGwsIP*PJ$g>({w1}%xK zz~us>8Zz&ow89@*iV|SA?_gkPl)mvD5!{o~81*J5_w@GBni zva{JbtGVimYdCEAVRS`_wgQYns4BA1?RE%!kHGgxJ0-W>vYEq{j<9;o3U=%qrzk2^ zsyIsUguwShg1|97J&P?WUIphY##BUZzVG9dpxf=@dzGS|a~0#XRF%fXTQ_sq;(q@0 zte0}tf5&|NGhb)jvFo|`yFcNIOa7aYHEVeJ>)*oqZPzn!`3=+-4`HTv(b?9)>+>iE z>g25nBG2JVi4z_{&_~fOF(3JNhF1+U9EGrD9F#=G3i7-{lM)(iR{7gx156JR)ybX< z&O=VM&{9wWzHp!*n%jeU<#WmY@_l5ld=>psA7$BPc(BIw2R=sm%j<~O9FDaPD?k^T zWO9nwL24yiAMtRW@XTjchKaE#trDkj(CM`3wzn}jvKZArLY}8695#&bM2$4-;QKx+PCA1dHeW|)%_?e><6r_1 zJrW%$5mX3V^?KiLeF-bweV{Q3fok+I_Nu>R?9bkS48vc$jbhjK-fvNa%UA8c8Knr9 zE=N!724}H(hVt$iTK;MW&g}>P0SNheFm(_MPO~p;uABl(B1TWUtCnHKSu42l9XH~% zW9xrxW!-Dn?f3fj#=DGxXz{&on(<*VLJ6F4bhmczwf`$v@u1T4fH5KtVI2g(g*$fe zlkxF=zI*MubsRe|@ay$)#eg4$F`x4$1P0T$sW+YLRps3I^O@-BoF;EtQ!J!1_9CLGR zvOFb85}bAD9;|B7<4!QfFf%iQANUOR_0#R97-LWfoUKxy<{6iZvcT6q#%S^$^lO=x z#9@RVRK?eYwO};5EXgVHgd~oWg{Z{z%v1%vYbBm1uu4%BCB9d2a&+453Mooer3673 zQkHo|Sm!LBsG<;gQJ{pQUaO;&B+XL1Afzv;)9$pe8oXMBEej@FbNtEcU(VAX_c-RZ zZRga}p3KfoJJ@*pIE$7Z#+K>bw7<?)=6@EE?^jZ^faAUL0 z%BMY#Q9q&8p2iA?!lNuKgM$rBI?0}m+Zb56j-<9Ps)O=8l6sw_UMEXaCU)**Xk>&q zipZS7j~h6kAv{c3GPrmN{YM_p*15}AKhS`7=Ps>4hzh;Sx&^eb-==K359hJhKfuFp znpudp{YDDTz!1f@O<)b##@qH=+h&V`^p0Bq2$n2I)#~@!=XL%AZ?C+CTMp{H_NF$I zmseHr%b&M=A5MrBFQ|-&c|+qsMnpb-mv_%^-1}e(De(J!is^!~S>9{^A2cHFA2~GX zOt;)}$U3a8Gn;NB99zxkvX#{84OEZJ%u|Yb zy}_~-t602dJ$LThO?&I@M6n0;1aK$`z6{ar3`M}h9(^j?mMo@q>D45g??9-4(s`IN zr4R65_DZH}%L%o`g%UB-WO|~Yb^e{I^_49*|oXgigb{;?Y)Vp}&W7eXsxe;1Gl#pqQ77C>VHYgCnVk1BX zn9xH=O%x2^g^qH12TZqdwFpmzsL(R59jcK0`H>?$JM_3|+fIrg;4x2sDw}S)mG#S4 z@U?G#ndiUaMeNwRjX@!B&Y*RHFBP#L5cL%O8YxMwk$@B<%D`Gi48U#(6Y#l&&ktA(f(3D?_A zgcSsSNZ|W;Lg5LID2VWU4`(X_M=5WCcft=VHtbHfg9KER6F5sJ>+-0RPv*QoJD0Ub zJ&ffKJC@<$5l%nxQN$ixzhg6N_Du556+@h~Y%#5%P9F4Q+XXU|9A4{V6dzkkvfU{& zDq=SU%_L@8O4>!2j)pm-X~i+kU@__F7+rseEUeK+(RGs41ULdRlhN(5Xd`-UKgBej;mS!|Y5I*lLA;Iw7; z%4IA)=Gdw($T&QqDnh?ngziqU{q~KFt~=%)2E^SZierYBtz>e1H)VIOig@HH(rHo* z-Mot+;PBNaFjEiEOP52LR_RR6fz=DCbB98%J%~v0|HOa*=zrW@Tv6NK^Tz$AD((8G zcVpX407hQ;%Kven|2N9b+`l@M~w>9^#!*%X@243U7 z{n#q53|OZfwzU7F{y!-HTa1XC58VU(_#Jm}Ypb=-ckesyIQo45_oj~z%I}BF*#~A@ z3mdFWG0izjVQIUZk_;^*!U=@(DV;^N$C;SBmHLWx_)<|6Edr}adwKe!uY&G$1%)l>7A=-8TSk7wI;M4p^1?4r0I?rX;;^RV z@Dolzzxc&;uDt}Ab=lF)$v^T*R=(^UmabgE;`PU{=+Td(|D=-`ecp@c`_d0-Kl7E$ zY}ttyCwMLck%AY%_by@Z=T~w3bc+?2{t)@q@4&KL|(~4YV<6=Mx4Aaa1GAGurJYLRF4$si4R-WucK$ zRWPW=;CbGHLEvd@utq06$$ z!Pf>|7*sERJq!ZMLQ~`=VHAQC6s97o3&H?;jM+gLA)U`m0E>qj*j=|X)0{vH7#&&8 zsuLg0$mn4V)ElhtHhG2LVa!wP(H%PZ6w_rF(KkTgQdAN#vUm|=ejS`oWZRUJb4=ZK z3+;_}GO^`0rgv{-dVCYj9UGXt?oy_Iaxu-TE~9z*kLliU1#??B(As(O=kT0Ec@d%Xn7rc_Mpi$hBJVp0QA#mz*a{|h zj^k$?WR!sOFbl+i5RUfa4K1hB7l5i)VI;4bjA1W@sJRy^(r-(C`8!a^$IdyAVA)Cl zW-tCGx4!U6loNX@rPMigeeC`0{Kt0yP&@9CjGc4-{od#MLpHJLpw8R!g)P-st*SBn z=z9X#EI;cmE|JZj-@Je4*ItIeeL=y_Mx8@jS({b?e!_aSQ3>PPFont|}guD!^t1_4){XYnHGx z8K%7SGKz`q7^(0al%_yn8G7WYl*up?K@IgE7qa?Mr(rF0(xDN39uab65w ziP2pwg1~5;?LwYYcmmH;geZ^#qdYue@U$U{6FN#TlNCI}!ZVIoO?}xCPCD^4oKoz% zWdmP5?{yqk<_rwmQ2iH;YppG&@akgG@ z9q)hb>)3tU^&lXO26)(+FXzcGe-V;f3HA z_^A|e@(eCr#SPro1O z2ANZm`s#-e0!2|EwZh;CLXUiI23H>fr$e?qvTf^BVG_G4~1?MQb1<2$+K zIj6JzJ%3es(NF&))_v*X`>eb8UG(|>kSV6_`(7R5dm&_6%o5x-f; zbLzoK_n^$XHyozb#A%I;V&wl4GQzNyQ0pelO>HN18f8+PwFsvO1$1w`7X7myW6pm) ziENOXlBCv$a2n~?5$QO&s?#6;dUUKw95HbC5zOq|!^ps5tdKZBdIB5-QNq~rRZIpU zMt6}D6Np92(71|W7l|uV<_Ky0-N!k6?a?@GFlC1*tb>qb&QcQ*uINw}O-7O$_APIx zb;Y-dyCq4@tHSDjKry-$)(zqdhqE2B$vw1p>_InMgnoh(PzphmG$^}WM8hL+4wMI0 zBb_Dmd^)~Bmmq@@;eiW$d=(-Xi7m*zQ)+fl-=yn_DjWCZB!l+YoaCndCI4 zXNlH5l-=zqoC%OZQTmcl2bj4IPUT2Zu}+s|iBgI%ipbI~S&ewUaYRxegv5_yFd8L2z)^41Xg1quQxexJ zbgaC{(M67w6||{R3Qzf%9@K0c#pFefDN3Z0L|%Y4CEc#WJ;xViF)Vtr$;L=fUzIp?1I_vp7 z>rc++#225#SYv?GcWh&JrbT;E%uIKN0Z-u*RuP)HCR2&U8(NC88qbw18Au3nOS345 zO9vRFN)SPn)+I%RGzHEHgjYxUA;M{twD_J!p)G|e@dQ}s$aIQz4Qeuifl<6}oBp?) zL-xjhAUJkCh4Kkfi_jKf1Q8NXNXqqVP^(tp^+&kdZzH+xI{4^Yu!D6(!>5z`1S3P$ z`y>_U5(D^3(VW^tZM0I}W@l%anVDg5aFBt40h-MwGcz+Z8Vv>p1{R_W^XGQDIXZ6< z6$MF<&@NM?HIyzVh$6x;q8s`Ugpd~%)~^uYD_qZOKRrEtk9+?n(rh-Fo}Om6x1ws} zP_L8AR`8JTUc>hHzKMx1d;-&&W5);HewX+BT_0ibOJ99Z_uBJoc#CFdXW6=SYt_c` z~ z9Hg(WZ@=RsrQGNJX}8<=`aT`#x!zZs2YNohJ)X_}-s$;kD%3l--~Qd#Jh=OP=RY54 z9vu=R;(`kI9MYhxFFf}#B*w`3x z99QWg&f#3OAxkOAvaE+@a@RwjKUS8No1-jC!mz?;FUxYDKF*`L_&qFo-}iCO(Q37r zoSbA}U;x`gty;TwE$wz2=Nzk7uf|%-#*G^n`Za&AD5@~z^h(I^Zg=6B)*7v=Gz@^r z$w_8rW>~s(DNC0wWvXZN&12^S7-JUt;rl*GlF;pTF~*SRIh_5*gPIGsz2Hf(7w5T* z5|X1I&cG9&#>fj^i8nBKQ1^N7d*53XBKGFR-s9u@K53d#6a{e{FO2Wuhab-9=qR(Z zvlTJd-ivK-UgUX>5P~ern4X?yY-|kQ_j%ci&O-VjjlKjkZpn3y$hv4O0g|%S!uc9I zI6@dIbe^G=!jlT=2XrUq`2LTsWXtxiEVPxTDM1jhXwf1D1_s!@dpF%~w}<1t4rM|WHJNuxsVF}6w<7m8Z{FxzW2ik&-%o3j z-JU}RAu{kVS`!Elr3KPKKAaF4MUmxLUm^-i=`2>4I3ckWDn6l*;Ho|gPvS|R$Wuf@ z671~I|FMs9@dy5%&;0y4mL0K{u@yCLyy03-IrB7DJ^87;{{t7$nVx2B=@N`K2&<8v zBK8|NTfKX}^sv^@X}1tUprq=}?+UuLR;y9u1*O)6K}enzG@CnU^u-Jf4KO`DLz)&u zVT{(cs{61Op(H|hC}+{e;9P~UWu!znN8U|o1IAQyRU3`(`2>D|Qi`I?iIW;-SrA7F z(in;!p{J)jtfwpf5g{@ll92U)PnAlk;f`AvVv)Bf$#oOA5)Bo}_0 zkyVT7OAAyWNplOnLHd%Y@NpSTb}|CDaY&cFW% zt-Gc3RuRHpx|=a5r7*@2$1!DDF08A6ecqpuc4m?B0M0qA0aKQEQG|#hv@gM{khJgu zP!8)PAPAMmpZ)otQ>)eJbUF)dG#U+xqF7jq=W8hDYpS%?c)kA5|381+yytVjGlWE; z6kh)T!uRh1@4fTG??Of~i=O|o`*cWZt$FE7U$L-X?LGcl>wU(2e{1>t9zQ>Rdmo?w zy!SZG@AJl(g|VNPD2m9kj35Xodd}5)y-vH`CP@;kwPaa_Qi>o5NYiwoE#LPs#w_$l zd|1G}P-j_f+4|+J3!i`d_#Yp5jP|N|*!+df_b?)&(Yw-Sv)%WOjb1iObi2A=ZN-6W zfXp7lnXfx@pSd=_=iYrj&X3#O$9!)+=I&!3MNx096AOCW{5kb{oit6!vTWhrdq2}K z46)WO+;@M^eD8DT_u+ZuyuIgA7={b_pfLum^#SM7-t%aFzRb_t{k5%>;)`GW;_t?Y zxa5*c78K`sYk2;DfJtENAUzDmT5fJOalkS6Vg-F}^JaGLrDQ1~cG$qzrTKO-h7wm z;EF4*xX*j-Pxijwf%?3^d(6(x9`N}5`0Vf4-N$WudYT(VUMCnxWH^V{G1H91*% zvY+!Digt&-{)F;~RkW6lkjzxXWzIQb&!ed!2orD)VJuEK3=)MV%QAlYvrB1ry7y>n z?{VJWu_Q@&)KM?Qr3IoUP!2*BVnk6zBZ80;A9R6Cn|MG8y}lWIQ4+2^j#wD9DG_lE z-#Vr)_yFp<>#0BcCFp;CEAk!h$1Ga~6p$4-?IQyVVXu#=fue)SyOsAAi-;mZ8B!WB zUX^NQb%E>_)QqCr$tav69v;FA6YvXMvp|qaVqNC!EgE=op{+{O9=TMHlnQPyQ<-OAaINq@Wa&-8Mri zs0xdX#X3ikXE^5w;s|Xt&Oy+t@zSQMWhk|#o2E1x4aUYsDN9p1B%FuxRh2GeD>N-b zMLHLRakXg}uw{vovVsNn6jp15r9$n=Gx8!uDv1VyD8%zCB&V`0>2|wS!FHCC#0h?_ zMrjSQ$Czx5#S45)Q4n}Ow$K&NKriy7b!DvNd4&okYaX5_3B8c0me84=ptXB~H=KVy zXTS1gI00L4y^_bAaRzr>eI2)LoghmR9y`>}Gq-If-?g2-RV(nCvj|_XJc!w;=E#s3 zQ*mRUBw9w`5QV4&Vd*6xr> zfyx!B9>>-fSCF+wEQigvBH#I+%-q(Y{F`?ZKl;%~EQS9h)Y4&$j1iNQ#3wwA;@G3W zKacdfUy+@67V+Z4(eW^T?+umKVZ8u^MVA?+v$Wgo11h%*dumTPm{*{H%DG|%MwjG9 z{7(x&TSw-i1(OIm;uO&Ds$n#18npa}y+t{B$v-k16`*!y}db5-0MPrBD zfM{O!-)wx%3n|BU0fOP@zLeo-oW-6`eVDl)Uxc36&F1r7&dhhe&YBDU1C<v4_us!Mh{A7VL>x%rTu@$tgIOBBw0SexC zpJ4n3QSRPJ`%Cw8=tKsT3 z7#zX|e#I3f1VyWf?;KiNv=B(4z*%q-s|&Qr>89Cl^p2-#igT6s+w(l~G(&hj?}o65 z(%_`PIlGWgJ?~i+LZK~qiHC5C(&j`8rf$8R^n>rB|Kwu{uKOYCS3jk>V-x*LS0O|| zN)zQuOwt9S=oX^@@=O3*PGv2zGnp#+uI;CZq_BckFs zP(g^J040$aWMOd1LwNy#b>uc@&XYK=v-|BW9J1OaW?Wod1MOqY~8ryeCpB`NY8sVWW#fHzr zBZf!%$+Cj+@hS3NT8_?hoHG=q#tQ;4rXqH~~{#hbJj@iSjBBo-VVhs9PJtD54e#1d=ir zSRBd~G}{*I2}TAJ9=d)tT7ZXT@ydr1q=t2?*YLf|f5Bt=1b?2y3?+-0OxtWt+bpm5 z6L#iM(z2}H$Hd$$x%MbSiRVM$LD_9GnHxq1hw#HXR+iu-(hHEz!>P)^ks`sV5~m|% zRKvzTQaeafuz5u|m!%a4#6TUBYuZ|oP>^+J@aQKRY(Q(0wzrJ-e|><#Cq9KfL`AlD z>=0n7356RRrVy6E4G{p%$2}fi_FC*`K29)_U`l%z8@O~xSEUI`S$Uf075BZpp1xnz ztfXnWk7sdSIT#um0-Yh{Fv^b+t|Br-8=NgD$}Y-OwmMQ)jMcgTSH0i!UeUepJ@4(D zUzdKJNJOnxBiyn1kQ)(m|NT8~|C6WV$^w7!64qSsWg3q<1%Up?K9SiUUBu=$ypnRy zPUe2}ZSHvGvsw4~ix3A$4~cee*>5Ca{09d6fE-uZu4+3nQZbc?!Vxnqn?kqw5y z7zCJ1oG=&+6Ko(M@L)oiNhXCP3`rmf@C(VrgcJgV$v_|h5^Cr%#SU)R#>kQ_TfJWC zmUBj#ef|Na$?qeI>$ zakwMb?uaSo{jS&1i9rwqM=Je6P)TqfJ<)FJ2gMEm03ZNKL_t)wTJ-z#QH@;nH2Pf+vlQ9n<#15{&J3o0*vzk|aSX#m0>r85$ZQ z2mIMd;WLKHFIxJiO1*a3<#* zQ4}#cI(lSfI|u^qy6Y~6hK4Z4aPZ(kq9|f)Y>Y;ufphN2!z7O52mBCfwHl+Nqs+|A z9J8u%e>l_O?{~QUwOZ{6JSorfBLiNoRwIsM+U+)-PUnaW<%7YQoO6thj{I8Qa}LIsW8h4Ouh0GAOpQi^(a}+M?AXEf?b{h09X;~hj|XQ0 z7FVGs>2x~G&d%b6q4Wk+n_-(`iV(Ye6;4!O4TdKuYBfY}p1vDUGnMSCQURrN7?X0r z`lqqb?HvPWIt=X_3?c&;e2H_=sXIK@rPIN1$j~6L^UbYN-{A%TEW`#66ZXnDJe~f zUF29)=MIqG69gJpE-E+0F=bhxv_eUVF(p!Zgi)X?e~hf3vb514q06VPc@O72;S3m_ zAc|_#CMQ|@{Acs@Z+(L+4o*`?vZvq0h>~bwfkO?&lGZSd{s21^u|x*U^t<#N2peFF zoKScuN)FA;A(H{h`YO?)k24lTfs_iVVw|LspQVG0YY68d9aJ*FNrO;^U~@=f>TZCb zz}bk{7G$pXf1gjwit@2~s{*9<$HTC6{v6=Wk-u&pm@;_jVS(@g-(H`45a;e${c0dDTZ(-_dc7WuAMjAzf#V&^Irjj5!OopKF~-ntx2q)SIGmFc;Tt?0*WyIE zFeman_)+!EA2^A4``h3C&^zqd0l)R|c=QjiU(e5c^P7}MWkBz_>n=`fHhJB;bw{@S z)s`*CeC~>sD><$8!#QX^?~QNdc_+>0eyZbBKZNI@9v)%MpMH?_;c>$8aRMrMQQBT_1hU4h4kVV;m$mbQaF^8C>bE4A-veW_~?o%*oClo;ZP#P z7Xd=1c$?$22O$ZaUmUX>F85d!;7wVrGDof=)=P=k0bWT$9U^s!C_S#s@dB)r7~#Mc z&^#3xPgCsQN9qHD9s7Clsws*l)Z+y3eCI2l*k`+azuH+nPnjySG>VQFiKpcgPPYz>@WAEPml)0<;HjC1SN@|QPQL=Kz zKAgCg&Je^Ew@L^>nHRXSq-P7lAgoN^ltQaY@-vAeL{Y7@1v;P}#msePDTf=3kB_l` z|1{lxh7j_oq@Xg8>-Bro7Z(GHEUV5NhDfa{NRzdI#~Mdavowg9S(xR#^Ur1OmfOg7 z?_)>a;~l^JIxhc}*Rt}wr_r8V&AHD`SU&k@=PL^?-D8jvB8v3OIWox=}GoX-e?q=NTRAYF);4)h#|5EXCW>Q5Mn;Yy{oeoYM;cFx9^L2T z%)fjDJ700>Cg1QI4@e*mM>x5Z6>t4h?)~NeR(+n7+SFSwn_T$~Rp`jt3HuSUyA7?(f>j=4dAQI2+57pu z6!Qh)P$jw$jYTYd(Ngw)ZZGA0$;NkVFF;v)T`OzGW#}7hwA+TMDgJ)_ z`Ui*tyz!P>xM7hV3C zRYYKCh@*&Rt4*E_IJ9RM%T$ESb6gPN{36C&IP#)TFf_u%%dbG`I)yFB$pFd775|;$ z2^Vo_VkP}w{auEl7D1L_u!v?2wQ?z4foucn9%I%=?M_W}Oo z&A-j>yy9it{>^U^{^N&efA@PVS+SJSL?LY-Ej>aeAo|!|hxr9T>SQI;Ydr11G8M%P z3rSsRTD2y%dYyW+NxL;cD~f1Gl143{+0u**)fjCz7_LPOhY_uzaT-BPEHpw@P`Ai? zihj3Bltl(6hFB5}38K(4vu7XvSKq!iJS1RUUeh6)Q;60V8+bLGtx~ zXXHEIqV$?_ zKC_$lpPQW#_)7Ap~29)V5yd57dtPz<_1yM?7w|Xt-g^w~_0pwFIpc@T zs5WeP%v2#x#((l3NNb402vTp&Pgvs=@%RKn2L#Oo->F(^@B|)$ktMjHI<3w3knP%u zAD&_$yM!XfX@k}coJq<19in>sgikx@_ZZCVVC`AwQeuUHf)2d)Ga* zlp!FYH@*}l1jY*#5+@wmJHlEMY)a`ZN=RHjV5nVZ$17e=AVbC{CMb#m<4Y15lLC6v zeq23*JUdd>5Ta7nP&kxO7@uI3MR9 z=>(_}r##A~1Uka!DJqZ%A3#{g74!IkLureuDMB66T(z3~h8sEb)fXW48T^u!G}bPm zbMF?;dg^njwHmBH=Tv5wj&SSEcQZ2H#s{8-gB_wqNW0#oC_Vkb0KW*4)KX$fFsY|A zNJ$5VIEoQbRq9U{p`f*-Mx4Y)pbf@2!bO#j!x&!YJt&0_6qtZ8sbEM%m2{~nJt#pG zgmjCXEYFC-I!mXPk!D@C+;bO6+@{?eCNH{}!XuR=3pD|MoAczP>9UW@Qbe0+FjEzkqF@$pmNxWwyR9GpHLL;OGSzQCr zkPDC+Q~+95o+Dzhx+N+Y8*xeA?=r9jG7j)Q#|{LktdrEM$_g}y`(6A?Uctn#yom;u zBF#`yLXaA)?W1Y|PDVtlR}=l-`w-vy95m}NzZY6lUhOvFqx5_f_pOndxrdf?x1IaU^z_Ksarb#i zy=wDMYh22ue3@hCY=b=mrmvl@60Osl$M6{*E>^u_75hHF??@uD?w9XFmyAAjlqX;F zWNyCtW^l0Onk{U(X3GOtxns%t53hg7^IpoOCnqXD#*mL*k38`k`#(-Uo!72id(5`2 z{XV~Z(@lJE>#@l8*B=FQdMw&@GXC?1`VkzXnBI5apf^7CsGjQ)x6K-a3>XbUGzIt! z??pvm7M3DO@IiyIUQW8@W_+0}mlG)#Q~w z{~|6sbq%|3zmsL>pU2d>=ir>bOe=~h>Kd$f$jg1fm3A2Ngtmq=- z03{WL$#AYp8nQgcT0^VVJmM>%bx>6mf)J$@S(=d!Dg_qjJ%j$>NM++N{xvx&(Ksw$ z9qE8(qlqyVtpc$~2#S0_kym_< zAPmT}ly(p!tfM=~$%_>0J>9%uzSHBm&we6T{laTlclJ4~dipboq8d*;?J2~;2zT9e z7pwQ&!<#2-oW6R5xzQTkWQd-YByp3KttCt?${UtC!K;usj1Z<|J}>ZND+%IZL|Dg0 zHB?eZ=%7j*biI0&fKEUL;3YT-A_fsuH`(Vv3}Kz9)g;z+L?)4h;A6_U8PfU16?^Y7 z`8@5*UrSwB{GcEV6kcfhAHIhEU;GY*s^o>8aFj!JkZIMPsTEbfKkW?kB`=03hiry( z;*k9}UWXTu#0~ns2T00dKrp<9iRG*5ZNG&)9XxCW;?TaWB=rPcTLNiCDi=zVk>ooG z>cxy+_(11tp#@8SW+@wP*ucumAH4dpp7l&Tls4_j_)l7i0GOD7_3Pn=8%}8VzkJG5 zxTDkIJ4czoeQf8kC9svX8ZVrh`r+EOetp%plkrm@Z3(mP2mgHc=Ib#BE4WXzdL7}! z)I*-@u?{aPVtuzWhd4Nk$R)z%Xf2RH+-y;-T?@Bfhra1Lrq92K@#Uv6I5>?7J>kIM z8x8cx3I+%7CTg#$ssj%a*!jzuGs1|bo)z{fG#c&xExQekpKq9ntu8bV0Od*ofsf`i_n z1(bJ44}y8;kXZfCw)=ftP3 z@_To1(MvDqyk}m(#PBe9$pue2kF}GlSy))0>njh1hyd$D0-Iu#N2x`*R%g&kqm&}g zaUcs3%0!X3sJ)O z$T;DA#&nTWNCkmJNQa%<&urc$Te6%`g@j>(M}oH~VJWi(LhJCgQG{3MpoUCB?4Sqf z07QVVH;9WA1|6^|2uadT(7i5MT4KT(go?lO}t@GqGD z`}bB060IS|U-|k6wBwSbYU@vXT*;N(zlzt6aFCq1c!K9$|2)!tDZOny%1%kVB&KmngK#)Jq4u7PpVlM-;L0mcIEe_P7sv>HclV&J1JcJ)?rhWElpBvVu%F0vUk_ zxcw{tir&1JCxm?l<71RhehS*lN_IBXlzEEz>Q^x~$43p~JzKFuL)a~wsX0kn3<$sf zJ=CFX=-+%TJnz3@KK?h9-~A55XRpIp2)wOUkriMh)`O=~>kRyd*T5v6@7O8s|OIgFxd&Q6VFQr?8GBt0wJU8>~r@Q5~Ti zQJ`5qKF-}=x}JXBvti9Chyw#Y@wPu=@^9bE_{2Jl&-v%~z8Al16C=x4aq!?g&035W z5#AdLD=BSGv(Y3QEXwFgMPB3-)&PPa5SX%p)8tttPpAWZM4~T@!Xw+u@;-AfDJ6N9 z+a4f2%O^ijhKQ6Hg{ zA#vK}8M?tI|K{DC{+XSvNTU|B_l|#O`sVL*b^_w=-IYvos39{)WM0dn#N;VTKYF#+|Jgo% z65*X=^NXMP0CTt_&+&zMw!G@U9OjsD;Xq>2=3{Nejf zGL<~6Z0!BxYOZF4k&_dhA9JX;z3pvpd(@7eBrrJ%H{EnXyAOvUOOu3u-Sa?M9W4a^ zaKQyM7xi?1pt$;KIQ{gKcl~h^TMgWCoFt-i?U%UwWtXt?e|pO_^fkT^X|VxJOl>$k_0Y@AKULYvwttbmE^qzf!Z3L(D0skly)y8k;v#ctdA+l!?`6P)aIkQ14MfV!b1(Pa*0FuIxeHr_8$uUl4dh zHkikUA;HiDwk+^~@|9T`QqgPW;{Z9LMe$H2o*5UkeLE&JYlm&Q%S5V2*WyIO>?k>epYb)iV=d& zLEis`FH>~p_`*j%#Py&366MTpYV|s2UG#ir_8mgYk|GFj-Vp1AKxv%wN9n+e3T`A7 z&O7oV$1WxVr7=hJ#zUzI*#R!^;?pj=EWnz|_->F97>DgI;1@b*TcEuq zFLDCuh($zykb#0whgG#e8FU!oa*Oqzz-thuA}P0;=j9$uRc!g><1Ef ze}5RxjUGSa=1Nx5rOUnC`xD#74Q${tE;~8N`Khl&09!QA62Wst-Tw+MeoLMJ@f!~-g-{`z`r8n z_+iiWn6Chc0H-UnAQ3CX9k&o2H~`JnI420QKErXHy)VC#-YP34t#t9N;z9=4c^s-s8OhDbNy>S4b-?VJ;<|{EFoA(dDpxDn6<0VrZqOso_$++^7&7pS5MftcMtV?OszG9 zmN8)vlI8g#^hgmdPTopmh?BVTdRVN;RwhW6e!q_vRZ@_p*%9tT5ClgIhm=wk49Zx_ zvLww?qOc-hhf2{NYGO)5mKLO0N~2asC`qkW$J!3nSPhG(cUlSah@3MTf&D~q>^;k|FiR9!*(X1+nc6R3f&Jh|5zAInhzwPv7zB~fc%aO4 z>a`m3+$U94L#lh!TD^uIj`nZAmSALvG7}WN0cT8%vgfPU^P$>r^QvEcJ36V6_B#lh zS3W4hV@*bmtBf8CizyZ=<0@0Hk^v>V!*I5UoDtK@Cb@Qm@+fc#EsJiVmG)piMt1v7Yr@#Z@OKIFE};#NjyiT-dXx zdYwQ#dwiU0r>8lX=V&Q;Lc7ghoPRzO@ejDvyM8^q?sb(T)ya6=#4-(ENnzeSa8QX> zti^WbD5v+s1KcJB$yw*J?AQK)RquE&s`=1rV5>E}dFZkKe*Im$@JgZU3J&gN==$p@ zy8{N#yqH95tTQ+r60Tg$e3{bv%)hd9YK%?WzDqhX%ChBWA)=5$o}vIJ9W^QvXlYVp zK0x3QxQc99IW1uFf;`U%!-#f!gx;QweB=-RkW&`AY=|wrTdpI0^B*yJ;l((YRSwc& zh!TSI6Q3ZwK`29*O|#Eec7i-Kr7@FJWwgZeGyey%Pl##*$dUM7x3Tj!1H`+4JDj9)a3f! zfckKor#%N1gN?e@xAO%4fqQijF7?hAmA<!5UM!Nqd2oia=Ek-zwCUMM*7*iK38w`}Wf9^oiqy z!Wahq3?*S~yv1<4#opcfIXH8OD2RxnfMv@j2?E8SpJJ>b(3*NZp`RAab*8!KsZZqB z-}DA1SFfTzHOVu6=0%u6hwt5Z2fa{miBr5(&k)TV#E#aGnIlml?WQDAAvVh?g$M5l zqZ+pCQzB5!2pNJaGg?7RU={P(0HY;NXuNf}qJT03pHq}2UPbt%zL-1$3Y-uaD^Ok# zssLv#K8R_k5DG(P08u9l637<-i%b$MC3a{W9XD|^hcMANg_%ZP|1IRj&qvi;WH_V{ z*u`HCG9+{%WpAEu?%Tv|hxRb40-8~S+-u^me*!WH8VyqCk==RLO-<6f{T{x$<#yIS z`Fw^NOE7T_llPF;R!}@CQMPg~S2DyIPbod#OF-fUw1?Vg*J1xH*R%0cA3~$JaQYzJ zz8M#UNELv{5KdPY#v8~>+|re#7d(^U$)!J1gR0}jg%NBs)$7p+Atk}c7}3hL#A{C@ zTDb;2Jo2Ck#3c#*-q7Q7+8_`-ji=G0_Y+l-*uVx}$Lo;DlM|fBO(g;Z+;@C*yG!FRQ~lkK>9ucKMZzU4A95D9G-;3o~;NmuKjq zVdAx?qlZTx(K#OLaMqHRJ(Ai8g)NA@g3%@LslP$K>^0akPOa3023=}Nlk&}PW$VF1 zto^so@bpVA;M@Q2{p9<0aL&aqrrjE)#1a-II7e1ixOt;2t~7)`2B|5_3}qcsYMM*N z5WtojzQAX$c^~Hp*f0`N+;Ahie)dXM{P(MnfXOYn42TJs|Hk#W_x~BusuhULp|!%h zg2FkZ5@^@K#t@`+&^d?%qyjySLL(fMA|dcWg){dBNRO8wy~BA0QjumkNf^Khyyh$ti@$pT5Tj0K<39SkUK7o}qgat?Mw#_BDGWrQcA zIU2EYp+W8hF0?2jL@5y7SLAmgZ~|nzPGAOt`w#HUkuj26ZsDW9@k*Zg^4D?BGoFWN zR*E)7+NCgHT#h$6UPnkB;DdlhTtj$;myYg%P3*t+i`;YVH(4<@#yQi6;Es*hz$2B1 zB1cFGRvosM2O)6QBD7kpcs*DPkBB4j!}q$Y;j+t4Rv;e7aaIU7=5WA1NVimqV95m0 z$~DAmPbFNs0{IAFbLWQeo5PR&_YzXlo0}sPkQM`y{(#2DP0;Hil*d2gSs-JSFB$lP zmWmJ;U&`JcI~e}rS6I1vjJ=yTap#sh5W||$;W1RuKX^tIu$3!u>P$87v7VxI zM9R?`8U_|kvqpzGWD2_5w-ewx$xgyzf~|9tx$ zyzm!a&9YTz00P;cj&rp{Z$KErbLSw#bR%kT4D?7mdS|));3& zYowGE#wvA5mzQ)JF;Gia;eel@T})v7;H(iJ~S&QK0gIKn4h#ljePFs0c!j?`4EO zB#9yMj?h6(Ng@eaI>G=VQIHfR0iH+-A}P_{qobH03M)gxP@}^d+NKo5RX@xenbU}< zMkqDRO+zn5q&@U-gHkCp0z^jMitsZX)U{uvJm+j=R#5KVfeHkrEh*ChN6|wR6)($Wnyt6W)0%6Ce8|P?GK3hI#W_iLQDB)(X5$(cTh7H4b<|`ulHV z*~dOW@QgE<9`#7lwA2e_h->CZE_cQ^Om{B5>< z>uW4=EiPU%O5@-`=5P5PyI*)Y%m3)l8A>#HUYS}2Q5}R}`qy5C{?aFjm!Af{Ah4AY zmh&aTE%F(tP!ysTRfKKtL0HmG2k#^nhc}jJWC@Wq;QHWVy5$0{sHz@XL3?-vs!$-#l)o`nvzAY$E`75vlP`?&MWHN5r@ z|Adk*|Mqtu;k#eIi8OH}tIs5;PtxhkVZ6hslBi4=xD2Nxk%AzKvDRYBigYcUr*xLm zdtzNFH3=aWP2(!U&S7teJgs~%YDo>R1Z7bXOb>sis&a&cfuL5`%+D=Q778f@LK)6I z>r@WRcG`w)4E8~FWm%oQ1~ zRY!GaaRWmzx{TJTXTcz^jM>sY<=h;dewUNzmlf_w&S9h9u99#UgcgU-^bN-;jd-7?_T{tUCjHC8;~ zbf%WCBp#k5Zj4~c65H!g9N5Lou5BFLwU==bb7rl9;!zkfG>REgh|&A-|IG1Msg>8AWp{p;wuCAow*u4!m&zMYBBei8Zu5EibojygsM|aOI#LOHklI5Jz7L3fz!N$$( z7@fku{%s6hb}2&w@**X&mNHJzQZfJiTPUx50rjzAAVK1wtP%(*CDJ>*t)Mni28dV@ z>4=J5ElC$TAOu!|OLKx|i$v*a#kR1__h+!VMrubh2+$K#kd+W6bc=%7J-g7tQVKy} z28^gWI*90-0Z5Iu5}d~S0_hAUu8i;k6_EmmdR zBgaCoq&G9m#TT8+CFh^Vcdq?9*M0NbJnN~?VPpn?fcC z1gsjJqP=c4E(pkO`43XD1mB2>d`YN41%@DsnaK?^-44=Pd{OZ{NMfR~rIp%LXPPXi z6W5v*uf&!}M8$)^p+rE4A&4{z0mc#pAtKaBYX}#W#GnCwnsULBjZfm|W+?XU!Jo2* zMp7fmJy2H0bV5<48T~<4@lTw?xe}Q~)TUO$^dS%$pUu;mpF=pXwq)oPzl5Az0iXUP zxD2cYmxI<|i)u0-sLDaRsGxFDgKD94sagzN*|QU9FG|dgM=B&;D2cD&uEAfh4K_Se|pcO(l@= zXhED_Qm>5U9uGbcKdLYo_OOS|Y-SUi*v2+yn8E&lOLgOnvxYUC$(fwN87yNNnv*x= zWD;@0J&=^C(&JD|4lHYPv&8GJcFL~Z=S0==nW)O$Zh+#1JZ8CH3uHAHcp zTnJ`&??-(5+r*#wB(1F*kxL`|%2B$m!CY?v<9wycq7|VKw1uXDhyEPy-kt2PEg^g9 z>uFwb1xwnEYL&a_fmf(S)t}yuon$Y50rjB>RhNj|;BA5MRHkoIKv^KX#5jv{{QvB| zcf4eEegFUblv8Ks&h2+QyTHoQL?2 zganf4k6038q7hNlfC>>2qzKEx7M3ly&YhW4Kjr(!xhyfFF8-vb`@WBPu*{u%&dixJ zXWp;R`&Ce}Ced-TN-R8Ce~3^Lrvx@D(CrRsAi)YS6-(JNt`3M>0jUm~aYj5!-&V{o z?IuD|W|lY*Om;drYp4g!zMOU#D-eLR9xW85ut;rCG9nEEhGoHQRwAPiUm9en=uAw| z#S{1%q{Iv>_6&0h94ZLVUQ=oqAL|ko6(V0GQ~`@a!}szf64Bxz(<$G`Bp)jSI%`%@ z-?^Wszx-_Cv1va0)vs{mkwj@rAhiI7kV#NA zizttKHm+qV}h6iNx=s)E<@M`B$K8PhbxVL*gW33=CQp#3Wa2h-RpO-Ur)D|Z0AwS{%tlBrC>+hEEof2-Y z8=C69(P6Jua8v+~h~QxnY|;=MqAeY&L-kYFgQM%#8V)U@fBEA-?Vw%)9@D>QCN}N)iI& zai*eQ7X&I~YTat|^Pa=fvwwrRtG|u-%6|}k`HQ4xFL9`wpde%M&S8YatB|GAGFUx@ ze9e1FpY&ALjD}5qn=PR92rZFO+SttBcn#S*UQLSuA_)+Eg_Akb3Y@V`qw5vMc)YDa zHc8vAmaKSSHmk6*#2E!vBSnM?gB7Y%4N9SOgvX$QsA+zPF~yL)KTlAW2-PK&iiuW$ z6q?#rR5*~5(logeS~YYYXDzV`uyutNmckg~STpJq7K!Zvx+$IT(DygN1S{-8;)4d zkc4-><-M%gFvWMi{Y_r?nm3@5F*@y-#a_-X6_qnhldPJI1@ApU z7!ZU3&N;Fyqn{bVAZ+p>tVIYx7==`2g{uunORPh55K$Ht##F4|u$C~A?7L&0EH{KY zMhL-DRZ<(lNk?tuh=~9^j2?R;8%8>u`5Qwn{q*O#W%msn-z#{@c#310okdMoNh&!Y zP$8|!X*wdL5IH{8L`QFC$Bo})`?cTY_@yCT9bxhek&Y0QHL9xcp~43tA~$HEKs&0s zq(-5fz_=QOMGA>=AeBN%kiJ#I^bwAaX5I#BupB}))L)dcULe)Xy zSo-ScS$@T@Gm=b@tX)T0EmI1M_ToU(>#f5$hc&k0+pnyGO0gm$b{l=uufua)#OJ=&~=IT1{rs$T~2GHjg%>JI6zhosY6OEwvssK7*ql+3{DBC zDnbD@HGwgp+oY|8tjO`9KnEI=56I^ov*TUH1C4S9-HKT)#;E7#$#g*&M5sJxNeN`9 zL&tTo`H;yZfmPGoFn1?gm-cY<&(?kLBrSy@W980*-EE=<0xhunbE@ zB139h5b79f4O++pSrFcP0v)UbzBQmosfOxwmpx~o8!!P7#nAyBgp?9zELB+&gc>O= zCL2)X8BwAr%be}E&rwwnwMXfM30dB!(@Hq=$xmj_6<^|GZ+k1Rc*i)a4?B)sSIzPD zfBih$cWvjmVaD%_hFCLTkQ+kj@ZQog3Kez;gv6K}6{Un}7rFChzWAxn^6&ElKCpQM zQ>#K`-yqx&5eQu3k(ol37H>3rwWhz9fpi|1V-KARhd{)kI#fTSdQQ8!T~)w0O1PndT?Tq9 znG#*uOf8NLn;^MI#t**N;EIx>u87-d<0@2?D@}BWFd0w~9JdAe#mgx6KOf%qA=1$a zOd3)b10+pDY4QR>h=PcC-75ULRV%@5aF;H@dw;;LL|~|_L6#P@zzabr5 zMb(OtVaQ0Fl1V|~DvC(reN9|Jq7n>-e0iD0u`wo8jIah7E7o?$xiep)5{_DUT(8f9 zHPr2tNj-+Nma(ZeTdGC2^=t0v4>@Ml1ix4I_}BM;n4?cTl_R$t!S}v;8UOIk57QaW z5R^q@0XrBD&|1^!bSUzIs;&+I z2=6`Kx<)q<$5>mVR=h3aBta_A-u-i6pxYfskul5{NTLxYv}VUw{u#e_j;p_ybIms| z=Ls{@{KrQ>!qwMr+CmJW&;sKluo+HxTo_|)i1p26z?y)XhM8lGM|z8vjegij&|!?S z8lfE^5T2Dx4MS}WItWmrg{?h3vqX2I+oU*WjxZc2NS5j6872u3fu^9Q%1SyqY?^XW zHFm@*hT#yS1%wsI1{{R0z&V3+9&8)LEZDSJX3t89!Ujyp6*`lx8;fGULf`W(2y3WT zrVqAiKm-Y>V8zn701PP8{LaOV>F0d4#pl4oQRbE)+vP=wpomtq_&LkEFC!)GUGI75(9mQYEBu zL`n@9TpcpI+{dXQiiknwa3gJOIz_*~fF1O)))FCURXGAj}9I78tGRbSD@O0w@=o72>*P$HEeQ>qydw%2wzkq19?Lk(CJP z2`udGW!#bviFLq{hfQfV3S`6$Wcz zSQH59P)ZZ1ki1-G{?=VQ_KXvG@+l{B(O>-)GH%lvn__LZMSHT%*RJ{=zm^0%cRC=O zpJj0XQK+!hGGT2Aqli+0Znx=nM(O555~Znv7}HxOID89rH-_)u2zj4WNL-Y#7>DGu z`>-OVkOt!%{aok$001BWNklL3^!cJDP^pff{%h=h z&P!;GO)$N7-Jy%_&q;0l80`J>q2q8*wdx75`K5=B!!On(;*hZVP#vm!T@{YF64b>I zXF|qWA?(i}j?k14q(FjlHEPW$Y~9JWYyXkX`&z+nT2KvFwF=sY5bSt|Ck?e|~L=yg}H{?QM`Bq1WN2xW=PN2rBE%LH3H zg1eS2yv2Llgj`915KT(6x8aH=!h@+nNnCwbDz9t6ky=qyDur`3$~)v;oNyN+DX?-t zzz8`xDhv?&_mNk(6NF=wbwMQzNqY>pSYd31@*bgcGS{N64MS@v=J(K23eu1$ZWB0% z3>3nEFiB)v-9?Rmt z*t)R9Ro_|W)MuQD&*5Ev`x&;Jb|O?cvNOubXZ|{6xlBJ>WNCSURTFDa+EQyt8i&~0 zQ5!>%O9El3Ohr40kyocH`C>!&9epB^VyH6K0iEzFFMFxP|sy76|-Y*##IBqE=$*uRhwr4dGk z_@F}4!f1_bhqQwZ)u6ynO;gRy6J|?s9j@oF#z@S8e zGX+NV81WI#2#oa2YrtTwLh1-D8(mK*5(1@(TtVm+smQ6l!%2;6YeZEcoJM*9QT5tg{TK*lY|OMIL*>C?V$ zv_sk8?%;#iLMfoCSEe2ckSHsg>4l9!lnpJ=DspE?%>%#Ict}`%5Z?()aMOE!IjBoN zZSDPXqX{|s4b;B~b{MX#8k z9VH*i>N)LmEWL zG@%+UQ(DDxUNBcy_=#!KxQkZ~J6xc=V;|Eki3|mi93@H=Z3WBa5}t%0Rn%EyM_bn! zN(%xn5w<2BAEz6I2smZ9s(@x9%|7WyYu%$g)RiYpTvT*X-QQ^cjz1 zqjX&MrT^sbJJXDgPIJ<)K8keXQB1c+c*Ns>gp9~ozX1ZS`_@-+Rmo>R@DXnK`W3jTaUNwn&u$gir6CJ>AKh{URw127i3HVcBdTS5 z)J26cVt$Tz!)Dqi9FM;3cJ!|AqnyV`kM|)Q{cz;Q^(B5XC=zH2&xXr>ztN2&ob%kvbEJ(ImJ_&qu^s~#|Srb8C52M-{w zfBPZ&(!o}11044!hk(S-=Op633Y)v+lIC_OZ0=C~g!)Os>IDZ2Rpa9H@xg;rSX~b? zv<^up#&FI+SvRx?0&3kyi4<9v6u0kV_T=9pdFwlv81LYVAqYumQ*u{99HN}WCz24b zi}R@2eF!O_DhZs0wQC5+R^xpD0!l#S1xi$eK<S&IsW)XXK)9-u2&KRp!t-|cv&*Jg`t2Igqma`!;Xp;t( zV7UMta@foWyXTk4bV^`L%G+*ckfgZw7^AX-E|!Uf;NdgVT=P$#W1kj0V$%#kUhv`l zyIE?5{K`ouu=>c&j3ymsCa3tFXFZd*yyyK)tX@lP1OyR5Rp4zv5NXP~Ca)@V7}9E` zWLeH|FhqJVra}lwpaXCoTUO-GlEg8_7_zD+2_@cD)Fz{qcCa!a3Pa*DqZ_Aq;SgTZ zU9*naYro6kryRq-eD-rZ#TWeAni29rMbGExFhW-~aj4Nz3!6%8k)uV6(9~4r0IdV; z&K=b4km}?UNFH$-#tw-~PuZEojcEE;e3AZ5-zIEN5=Q|84527!$CF&C+x+ub!cmVn ziD55ixo@B@$nqg06XWPGqRK0@aD=gDY-|h>Di&_r&JkI_Ggr+px?_nPM@RtDVSRJ% z=`bWPHC0_PpijHi24V;Vq8%WXD$15eRpU)K9Brs_tW$(zQ^j}2r09DrLEzC-=9RBX`J)y95-bkE;YDCxa{$FdnzryA|HEeD_ z?_qN{z2^{sxHmQ2*&MSI-hAj-{CrI!F25YkKmY#O*DGHMr=R|yJLrdkS{}Iie)WrE z@p|)B-(qxZoHCI_-}o9c7yWf3l#DD^cTiPDzGs2CSNw0fnL8wisiO zvL+A_DhOCw%Gvkomoatiml@f#k!3qilsTM@s9Z%P1j3jGsEGe|-V1@ynj}u4YH}j_ zgL%AjND*Rc2)ipe5dgJgxwn8p5|4IBQGf&M*`H+;u0~fGqa$nhjOeiMx1Pr{e&@F- z7fY`B(pPxsqfcP-hSg+C160_etSY|xm9KF7u6=Ad{y5fbT*qfF{18`O{6*fmX^i9Y z{p_y?tQuQO6iTQnZ0^~g4G=5I(9TPAZ0Lp~L}dv&Y>ygf$j zYbXY!DCY8-n+H9lfFnmo_|~xIlOt<6=OZ8H_|qN<2yXi7r}^;zdjY#M*pDJ`2JaM6 zpc@MOidI4hL1|5s1z{{jQ4lCa+G#Ny4zbpf#3@OdkPS18cf?7IFD%M~2`cieCTX>q z%QBAbwg_hLWL3M%E8qVn)*O8b5V33jom~50-(b(hf6qg{@HwW(LKaLyq%32i4WTB_ z=ZHoo5we0_jS3@b39)ooWl2;_wRZ_MHcGVRXvFjsS{Ur?PV#LxV&_Wq$TYREL|(A0 z9jTGXw8fj}4bS+;kMs0Lp3K%;Z)Df5CHjLt-A=-)wbMjVLTL?US)ygc;cKUGEyd?P z@;7|+?eFHpM^170V2*{lB9IzEqt|glA*e~bp!5c}GTlhx7PMPX6ckGX3Rlq5A;EGF zMn_?6nyfdAlNKF~6Aw##f0ka=rB9Di8nj9oQvu!aap(vrn$wm*HUe#zK;nQ3ZzHS_ zkmcxh3&tkdZ8CP$p2ewg>J1wRMn=)`I691}`t#It`%$}ZXR6<06Pl@_gry}2B`#?p z%c2RJD>LY75Gk&2k9p=YVf7a>ICt@Zxvri!24|)} zU*Bu@Rs&JllCR(K8Lr;WQ4T=BWp@uY2=%H_UyDuif!! z1cIj>{*oX0nht3seqJUK&cTHj{_Lnr2UF*t4_mjw3t!l*$pz1#5{vmt*&s*8>tmihsq0SKA zlZP51VnU#`Ya8WfFJk+xH*=>l6w|91d-$oep8kBQAflB7h`eODcqi9?|9cER`+0&p zZsCN7AIpXpycV%`9pS_bE)WE{#{?Nwtr;ClC_ePJ?ESr$Aa431$?Bu9Vi|Nr?3(be z#`UQg1$i%;3wyUlo8!pmqkJ4(7@bHIh;+P}W6C^RMu@;ZmyoIaG zCHP^D!xE|%k(JHlCyY=^u*&4@&gSqabkf2XmL3B}g9KGqgi*+v@eVte9QDv6Q2453 zd2xw)yhA5W@wH`iGT}%{ZXRT8TUh3iGn2^v9B+NaD>&;FFT}Ya|KEEqV7OEw+7TO1 zI*t7c8MUj(bi&u=g5pf zNl+@FzqFU9Kjn#RyZmd+?YNC%e1dadbT&_Y-dUXVxHDP*&_|P=@i>YPevs0`odZSg z28_+DMoC9ml?WB%dwohF&}oRPOF|!!IS@)y6eZ!*Bvn16xbiXrB`^Y%m*}*Mnx4Sa zhDw+wN5osGYsz8D>Zu8)WyX%1zQOj(uB5ekHDggiRM!lyy`54>!gh-|3h_b8QaxZ~ z-6~eCUd?E$L+CZ4b_k)VWsUX{Ed<(Gyi}CJHG*UBF|}_r1w}Ijvz-powOE`TBA@qS zMz6gIy|@d}Zlmjpe9v}fXPWVG8Q3N>Cd6FP4dd0jBvKg+)DH*wX~ zmlND@GbfKtGq$vdoV|?_h$at*RqJ7S5%%stY6B=JYt%&2h^}ixQCBE=|18ft4}aCW z@2E=$Q|B(i_bT|`-Dc?dV6VBW?j3-*df!)g+qYiGY<|ZN{qE~`e1?x)_a{7V{crN7 z(?0%V-}ipC#NS^3X8w8W`B?wMBmIBB?QalB9=GAS{I3(<$xLhg-BYIQ4lcOWMB24qFOYmr?qdM&G-`CJr+tQaD7gc1S53(}=N+@Nw^*Uj&SRePo9vn0%fj~UT=}JcvW=LOyi zJQCw;LhC@<6;J#oEX%V(Z4v;2$V*(&fcDUh7UuJmyx9Co+#i6Kgy^S!` z$hv0lo;ix)JmWJP=+DiOr4gg+*0OicPNHKrfCEu16XXUfYg8Q5aI++0YJyb@hPgpb zSygBiLN;X3jp(GKsA@nQDK?I@*)h9BsXRIgsJ)|F?n4~o;}}&9m>QYDW4JYQ+&sUZ zlcv`Z_7-{jYhI5VTf^ox)0q4YaxM6+=RS+CU;SPF@gM)5O-CGq=`?Ox#?%cs2oy?6 z!YD*a&BEd$v5M%7w2@NcSKf!ZZuAgB2$p?G5^97~Y~8k%r#=1*Ui^$Rx&D~LdFSuF zma!0AJ;nte_$NO2=6CVhSH76X1QGR>UuSHlOF1yi6JdHwED49!0nS;Z3X!5hqH#fh zH8~*~ZITrYPE8P|_z6!`c_fzH8-%xra){HK$fpq3s8V1;fr}(V>-fwE&*zlmj%Q@u zTK3#@3#P0X?{I{krxC);+#hX2_s3&*x{R5fB0s~M?aaHuKy;Nec|J*(>ae^^GKrWuE7rH zvB?^OeLZ~LN9w4tgVnYPu`3$-8&TSX=Fz&(0mK^@?|b^v!PKXQu;}2eV-J2HvGdah z|Jd)%euLM2?WxqR(fZ7!hjGI68H6(8j=`;bZ}xJmH(a*spE&!tbJ^HE=AIkx;ST=j zvL~{8aO;8l+QBGm+eZ?pi2d0v_GdfsIKHy;Vy>V2CKo^bw)+K)_Nyh%`Ojyq00?;T zap!T|(dF7SOb2$6# z`~3i4&gGoX`489|eC5i|D|scSbNVmkN&fw+nLzxk>rIP|`1*mMHd$*?LZWqu&mGRuM?LaXwms{)eDP!N;qW(~!|BicF42qs0Go6uiySP} zB4>S)vg7Pmvj6%2#t~yJhEaei4RXa=(tFv^u)W6#gA*Qg*Hl3O#^UN`(x9S%Ad+~u z;$!ccX@-;m!n+kfp+FicQ-TKPa+GjrAc$Jrxo00y7Be$-7{g&sq*?@{UCO*iO|$Yo zyKg^3Yw3uH-W~f{?PH$*s+Y6L8{+fMAsKHWv;kW{?qPfa!UUaH%;*mLmKMo`Cz6u7 zSFqesbixFc4+s^kpBiV+;v&Ophz?u0(olFqDOybXh{|M4jg8`?A=?)fx9+)@M<>YB1D38OY~5@U_UTSu5g zl$F6OE|MlKs;WXMMHDwDv2_OJ1BT^*Zj$g%pS_q>qm%5t`5M-3*vNCvejeZW=l@`Q z+z^Fu!dQp&g1=>V(q?qiX4GJo>FJd5VMbA9Bzgp;19aHPSQHW=M^VD!)6vFcNLw5M zp^R|8kE@grW$b?Oi|M`YPg!;Dn;F+ol)Yx!CN!SL0mRAy@~Z z-%RzK0An!Hl7tbhR`))?rv24H=pSr0WZ%c$L%HKN;!T@b{i-+o*vEV4nEi(jV;1Ls z;{KB@$20ciXCCo11;}vDR(X3!Y6NeFQ41?5%y<0 z=~Z)#$M-EW!g*_05 z^QV8t@yDHx5stjKfDa(>Awo-xmq@J;#v+Z!g%Ym>SyfRkEYOJ(jy?9_9QM`^@bM4* zCG&rGF=yVnjm~TT0@a`&?z`04fT``bV&Q&ai9lGHt zb+yQtn!t4Sa{FAxO^ZDqGCslYvdl*pme};jQ+ejIev^3ZVN8vWv*qxoa>RxWyy}I& zi_s}c2$WQ~%HRYPWq~)AIErzlBai`gT{n%^O1g7ZWO#20Y{H(UoEN>|w|UefP6A-{ z+Ewhn=~`B;U&G{K(|qsRt(+c}oISl7U$>ZdIkj`l#BHLUVZ<4{ZS*c$dwdP(HY!M( zG-ctN|3=};d+0$4WMPmx0T~d)EdpPG7(x)DgBWa%-Y1|V(Srzg)FvJ_v4N>wTRHMc zPvVHfx7_2^_-?wJTpziM@9T{PF247fzB#(W^yV*QCNj+F1GZleQD5;6O!i1hu zD3rGp(xIgQ3r<;Zf}+SULr0j7^Mv1cDK|{7=PRGTn8%;Ih3=Ie%04#sxY{FafKL>{ zR-i(BoUA08-?uBsU&wwkg{k+oOW6MUms8!by=h)1XMQ4x7+!ZZJI?vNgL)3(x{W^o zBJP?<93MV-H4=L-JNU=mIk=6jOVMlnd_Fu{;DK9&8|DVc|X(QC~Gb&w2j?KpfTS@YaVu^d36t^Wm6d?sL~BhvR*` z?|!8(9ZX%qCG_a=YF_^w z^9jEF9~W`#dq2whRYy`5eM(ai1{#Z|q((Tf)}T;W0hKG!r9>&sNHT%)j=~#!Z;|%M z1TX!g^SF3qicfy{Lp$?jyqv!c;3s+DRk2UZF1uEwELEw=oSBN??pbRXJWN0wb_W zVe<{?M$(4*IJ z>8*>b4`X^JM-&wzh!MgOwnwnlG9zgluQkJZ8RZ1dfh~pzmtcL5e4@*9R*$m#lNWQt z(Q7&O^kSK^A5q=3hzZT1;8`hvzxKkzL8NJWj;j2E$H>J z`*z@3V1h2;)KsJO$qlL%!V{l~yZln5^!TzSMX``8{{5(9c*>vsIU8D&33;Ka@VXII zOM$3NgSmvmE)VfxaGzewX6=s`QJckicAobd=0A1Oz23I3%7cDvw0`3~-hb{QoD@Cy zT${2z_bv}&&*1h0|K2?I@E-yYKLDtH1c2DyyNOG-|3h2qv9`#kdid#Q;E8gAuyAA~?}c-__9 z{=Z*Je&cuV@%M8d|0oOp@(GUm#3es+ANMzi820)UrX6)pQGNPizI){-*z%?ivTpU^49g{S?MQWq5DM#SyluGaaTGS|w^kyo$9Ydx zmn2Fcq@s3;SW8TQnP4R4IWKw%A2%8QdeOx^)153AFVjt5&gNZWnhh??E|Bnx@3@mD+*0Nf}1hHmlE7G)$$x18&9SX8)k#0QBs1V%N?}JlRs$_dQ z!y8)g>)Zc}D{k7(YoB`-FZ$Eh@x-S-jj>IS+I z0{f`C(?la30s?C1kfuq1mU+gYst|Fs;>2504ogBz17-$&R9#`?5akCHMU8L*HL%!) z0;eTm*rn73wsuTL5r~>Xb)h@LP1oIk?=28^LPk1c1k#fYYr>?33I*G@ZX?o)!!{pI zE3)_~rFHmbL|uaKFgmJPsvLD?hzOx@2x;)4#MF%~vFfBv4vY6-Yit}rZ-_S*7b-+$ ziAHCT8#k<&1b9#yv11$c%b&+E3b6S+_P76#_A6dP95;#KOim+%G0M6kG8F^~mj+`z z?)87dhW0eQ`Q7NSjW!upg4Y`7C21YjUeNQ z$NUPz!5(h8_DW7Z`UKQ9S3=qby#mg?1}D&1>cM@ha(;L3$E-vC+b7v^&MPqsvjB9T z@HCeH^U`|-4(_UleBw)VAM?bY`Z>P+K_)9)y!PHbUi~-P(w&2CKh-|}dF%PC2zPkO zrWdfWd-Q|iSnOE-K5zZj3jj~7TD<)+|H?$N>ZdxUhd{)G1w`!Icc1GZ-ge`ST;Kb_ zE70qYKAKY|ehf0c^2+A9-A93Rmvi|+QJ7{gpXED$@SVFq1fST!Gj=|svAq0ohxO8Z zTzAfO_xgGDxAr;p?@m21k=V@UUwDngRmG3afw-%dF8z0Iec7+$>t@vD7M|q;Ht|p3v)km8{18@ulqBQ&PM@391#hLwFZ-Rsp}l|YcFDadKKO_&6$te z6vO|^-gyRCb`7z_f8$bMk3F&G;##t8!g3>X`e z{ICHNjg2v2&;v|H8G%sNYUAwAhKYA>I;q3^aCSzs(ng_`^mz1_8&03@I@RHHRsE}~ zjrqhUx#Q>GX6V&_#_|;#(58!Y3hVn=DX=CZ^deNL4nkl}kp#uIoA!Ty zoYK%z!XPY=EviSZ{lbykO02cu>mn!YjZF2%Yz^0bz*)BCdqEe|a)r`sZw>j;UO~i>{_ul=8Qi#`?VXoC>$9#v;*?a!RLc$8I-z1CvR=k^mmuPtM5I{f z@yfm`o3H*MyPHkUTf2fv6aMB8-@)hJ_s{&^U;YW3pZGKeKlCy3scG~;1wVH*b&sZ} zk)cnRJCa*}PUq$fAv|QH2y8Jn(pTUc+)j(gbA-!q+F%exw61EEq!$yYDl(9$s6v84 zYJ=|_sWsSm7H8|&Qi*oCO!KEV@Z+}Q{MWyVm8(}X+wMo`oNk)Z-#LbaqCTGRy zCY+5SNlB8FX?zBTt5o8Z5YIulhCU0eWDJXp6N)0y-J`R4P?mwM?QNwmXBwq5UeM z$w`wAQ8>)#6Q02xd-k$Rd92>G6j~jO2h!yTSvt56q}Vhe&o#b({~s6j=p*|<=;kcj zUUezp2v@IX^shfa-xHq34I8UC(g*Zi@}0P#^`VrIu6@^u)nDIt7D{*+r@4LRI=;2@ zGdyX{3s0zxYxaF(;rk_PUi{Fo$mDJQ>_@*vPqzTUpKtyQ8~e|_?>xQaSAxMqLx}js zH%=E4wdty3yl0Z_cd_kN&&A~#A}X=^ZU4Z~^IyJ@k$JwD zxQCuRaLm3QNFidN(Z~Mg4DEJ{1VcGZ$!v-4qaMSMaOAo;_+(hrPj6)3PrgNV$)h;! zyvO2n0*L@$p#W`jN>LRlJhIL#aci1hszG|iK^~}7%G7Ipl%j|{)o7U^ogmjaWfh`Z zDfRjg7ro$j_|ctrvf?XWX34KTnS8@pXcHr|m`Ye;YV)s=e(E16kATZX5hK49;R%D1 zr9uf>3JYjcJOxpJ?|Fp-w#f*cL&}4Wt%4#Moe)SN5K00*kmDx~=><3pQMEy4HK{MK z9`q0PQSz&JVZd--oyooX==C}@TQP$}%MfWov)5+jx(!HeNkhR8e)Mg!xs)Y-Ko-XY zfnOxHQ}fs>U93sxVWmW77Centsj?K<-^u9c9;z*vYsDn>8p}(ApxcBBMu++tn`<+b zrA0W_UYC|rP_EMtcrvF_3D_v=+}iE3z0+iUrOX?KM)>-y3`wpu)6 z*H5v_R`c0duqx_DiJW?^pKg}nq=yIsvSyR0tmw&%11-T*&s)W#Zn=u-=~A?HOzNyRm&-_qM-fl~yG(2Y8@6SCFkGgRsWG!BovQUlqe9EP+q$K=IN;MX2~F~)ZBgu^KhYb{Cz zluC7kgYNcQh*e0be+iXF6{!@)7}7Xqc6JV_Cul5Rj;_{7+AUn(D>9rLO|v=8K>r}? z9`j_j{pZJ7cKRs<*IbX%s_;|Ea?pk#42VhrS(cs@A>wnLqgl`es#a&@m2Y6=_uhyM z!w28}x>>t~dJ{9j{U$=ln zc{1Si!3!UB9ysTC`!z3OtbGRn|Lg2`^5~V%e8716t8%i02(3@LGxhJ^a08jW8_47f z!KXKGCQ!!#T>RFz;IhlWyMG`5UpYSbmPrj`|6YVtsGU-yeP_F{Mto-1F@=aFk6glY zlIL&;hU-X1mzQ13*yoFWMxHowSbAT_>wak`_pQh9g&6y**I|=FYrOu0pQZmPhmR$# zN@djO+Fz)zlToDb$m0&V&QUWn1gD-&xM@8J4qs}7UqVbxVZVO`&9hEp$s;bocMzv3 z%2R+OBd1!b0g{!3MR#VWf%Z_S!U}2D$Sv z5`618{nYcg@d>}qEnoODkNNy3NZ;~yWE5d_j1PntUP$}gC(?J|C#XgrSy$nqvA%#H zfHbFj-~ip>b(GdV4DP%M+na-d8bVmC3dx)zn1}O;;zeStCD93y0z!f9STq?ncXY9M z#>4i9m?aHXjjUq%inV|xiUQWH-cV%1KIrtSZH^}bgb=iKhwYsMTz%#3Y{)yLBN4N4 z%5bB<2!!C1Hl<9B9Vqyei9QYo+wuT){B4A?U_O-FdRJR$7~Tv;-xN_bfd^PBoeo>tDXS`qS1j+tH<}%{T+6iYQ5|Y9 zIX%M@qlntCJ)4hx_i6@I&S0sGw1WP~rzH)Iz6R~MLu+!1Kl{@^;y0f5bZ&a~)3K)* zf>w`qyT^_MRym(H3^mZbCUY@V`$w?W;dM1Ss?d-j<*LV&OPG^6#)N>tNFQmzmJ~8I zxI95Phf|W0^C|ZYP+Gp4AS#hZJ~o&ls`in)4A0fbWsV92CZEON69yI1YKh7H`^j{V zunSt2+3@QZQO;Tik3k3$ z31-6zx@SF#>bCDOWfbmtmk|XD73X9ni?9Nbr6>_{TP7KP*0X4c63y8?I6oq?25B8Z zxet*vnb>j*wRPt(RIMHQLiaqpT8&DrMiR%&?%G9dcz~eRN79)i5+129@esINGqipq z(VMB}ANzGCqD%iT>*NINzU`IOMRd=yisih(~5}s^tbQj+q$0i~5QU z43rKHL*glgS1D7el!@bh_Uze1uf2sOt2a=JDu`U8JfGa9*lr6^YjEC$kLAiAf1k6i z`4Q39J1B2DA0s@HBw?h#PWPSfW&DM|#R}KNM8nv;f)@xxx6QtN6J)>hdknnt57A2o z$!@)asgHbs>Nmg0lF=bz1)e&XZ0w-IKuU>n2O|w(5Gah%#sEDu&3 z^v|$Gv>{_a$--J<0GHy7MEH_rwL$jwx}?gIX9+EBaJ4>aUX>{CAjlc%E0NFjn9(^( zW_W4Jth8j6DobPuf}8<-PO&w%$6a>C9ja*uEq!tvkthT)zuw2(c)}}Q{YuVy*3)^- zZ@-k#^9UL>y4p|*A|{)2jPD)ioqzKuJpToklBg=R)$5u3_RZi`2~`c98+IgnsrwP0 z@6*jSO=B5R4yEc~3~kdTQV~n~J<55CXA`7|iUfxdMZ~Qj!1n~&6Zm0`K;W!J><|5ny+{j`=0i% z$lz^*L}4d&FMKH@w<3LhMF(>77H&d8>-II#ClMwc#!yKaM^cF@%A z@PZOTsD(&g_h;F09DC+NMSxgL^CthHL5uF4_&sI6%154fHSf6QMO?MFaCV+a_VbaS z{|TSI?VY^fv^VnGn_f%g-8&prE1Owl)p+m`4BMJFasB>p15om6y#9g@Jt#c=l@M_< z${lx{yoF;eZ@lqP2iTD);xEoT^TcVqABBi-aQyJCc_>pb6fp9n5k@Z^Wy{}fLAN#I zUm0ih^L}x~(8-ITz(vwG|`NSWBXR>$C|6$`b-@=`8KH3&25NlG_ zpT3rzAN&-vZ@7%5HHR(zZ$2jE5z~^FsRS zOF=0-;jk6xH7Cht_Oi5pnEhjuv^z6IjbUP&AIxi!f%I93sV{UP*!T*h10yiGLCJ$w z2|$$tMyzFDE5&#c@|anm)hd`yhgp+grH_nrTBZf%D*dX2Nn*-T zz*-ftwKGGKSqL&@q)@Jn7G)yi)0*AO-1b{}(i5J^KYr=sy!!dCVwsI;46mizi`h4} zjdxxCS6q78i@G?o@|vJ7H$(4vfwSoIrRArzAo|R2y}M zmyhzDzkCxvzHuMFalykFHnZ3`p%ZxE`;?VeIQ4r0O6C}6kk%3ipsxWsE38h{06%CT z_e>#LJp^D-Xp<091aXo|(6gray>1QNmFwt#{&T4~$kG%)jF1AV2X-L6oQYlz7o5*P zRG~Aw7v~gsMW6#ucp;|`+B;)@I6$e2mLu# zH%@0+buG6{T}7EGiXvMj!)+R6es)yXafK;g|x%V#~zJHEWre=@L)vM}`4f`9)S?;mC}o(HNj_ z%`y%QuEPEMf705%4Z;xTEIKz>Cs}dvxnvhSoKABbgkY+bkiGw(IrYiEiNw+E<|N%7 zad(bBVD#lLCw<`?n46rzldd?FN(t5#c@8*e6|e#V4<&r0^HDOysDO5Bj>lK}xoG_` z!B9U-hF3DOY=kAFE9qM{gsu4ym5_lV$Q-rG083YGB3QSH<@Jy^S4*tbDN|Ze@&p*i z!GsnC3@V5U{|E($BFwCk4y;5(K2`}xWBjtm@}U6&Jhbo;c}CovWkPE@%EMWUZ(&)* zXCSDMhb43%2-1vBr%h8kV!w*fhDK;OrB=aL23$Zn2{2A!l9;ybP#ui8@wKm{wdFRR zy!qGpzC5m{3PN>JdW&%&!n^YNwm+snBYX5<6sdJ>|>)k;)goM(I!93jKrly*Wr?$e@WP zH7#DcW(B7YREV`fg>}kNgTbLbMwX4zzjPJ#B}3F}B^p&hC5*^)%H!6I@(*X8!b`## zBHg3w1V+Zhu_^=`mx4(NoL6M@770>hMu|6?qW$-Ft;ehQ2WI+h3L{hGh zC?6>txpS14ju1Zb5!43z3K(8cCGdQjU;an3_q>B>^mL|VfWP__d>nZukivjA;Fahe z*oh4KDc5Qzv`++KKr}FnPFe_0k+}>h59SZ)&0+ltQQr`GBZR0{2obIb6KiaW)f(aM z|D(cBA7CM3%L|^&Pfu&`v$F=dVPlyaHdMI%nU7-Mhu?#4&ORh*KI&fl3+AqP)QV^D ziA#RY<&XX|!VC$IYUMcg@a!=XwfuX0#{;z4_U;qe!nKS$Ls5Gen4=li&F z{A&*?Pk$vu++StKj+4@CC(rMd6Jqn=AeXIK^Pti=&hf*yc7JjAf`wr8d7}UfJZymK z#=@~_|F`y&OeDV;`#-URY^DI|ueoduL4R<+(f`X*dbbuycS@(8iCE-ElTRKX-f|o1 zo?X~1dq_WnFcNJY&NHOB#?w7|7(yWm-0r?fy0`rlPJaYJ;9+%)^d(pgUWFuWBU4RS zJ~6CwIf|$*U&ZwP85Ai>`Dh9r3Y{Ym3=fYoQ?8NrdYElDBLV4(5Ug7F@SG)l@f+xg zA-vgLm?uAt;fo(vq+E!5NKYU_k5EOVNt?*Q@SprCZu8U0C#JzlFbb3)5Jk3Oq&S$M zE(e_z(JEyZPgRHny9gw2z<1_+|=3f>VZy4Dbo?j89+cb86D2 zo6g~!qZSQ-C)oIbzG3~HKFSSIgH0_;mhm%1STB)| zP4JbA&Sn3eTX^)NAItmx{+%4yIl=4S_&R>$(&vzhjM=+x;fIfU814N{28UNb)&owu-+41L6MLBIPIF-DF4}YZm}yQkF+RrR)HqXn z$JlpZKNEZRF}ZI)Q|&g>?HLZlZJK}+W+6K=s)(M8wXkeCJp637|M=^C=VNbYPp1Rt zp9Q|f&2<>8OO~B?9?9;#By%l7BXKgoR|e1Xa4sOT60Hj1QiviMVJ-~LW#n;!p4d%1 zzMocS5)(o|886obJt*+P!q}uF+C^Buf>)^^#6inR?jT7B+c~A{uOihMdTNsDTo>aD zDu8D)tY5|^G4|T;Q~Sx)WMBUpI0&VnbH!)K-}Yxz28JMTbnAWe_Z2=$Q7J^K2;+fg zGkW{RDUGZGpxJD)W5*7f%_ab?R*PM`b}=(EQ$#mgRGQ5u&2CI{Y68!KuOh5=SmV%I z;|C5^?x!7=ArN3nkY(U3f{>I9A;e+ZzAvTKYO!s7ie!t_I7qh>+>%J@I8X9ZuG1t?P#udO?%goFSyLRoO)oLAc9GlJNz1H)Q*7SV6 zv9Ylu(s#6e4%hDC`aU7S>%QFdk&k?YQmI6{-KN*;k)|nO7$T*l-EQ+26B8!|C-t#y z+n8E(u#>-GB=3FqyAPpVYfT)-OifKuuh&sZ;hbar`t@`=9fS}J4h}Lo zIY}JH2q6$cFnRtYJn{JY-T9fq(hx0=7=Fy~!vCwEznWX$b}LRh#=bDdrq^z|Pdswg zap&LP?ErN=?R@AvA7aT*m!S3C7KwR23=IuYx`)}GgUG*R4m=M7mYDyfezpIDVNLidc7h-Nt(iChj+5drzbJZVzUmGt)%^vtC;-EKQZ^cE6~$- z``U=8ME&B&v-}U=O7;9>N20j=^2^Edd|_TJ=8y0D#BofPWt2*#1)H+hRsaAX07*na zRQ|47wTj{4VVcb*Nph(0sFXrVNt&hzAxM&hnVA_zMn>>`pO-%WcR)&N{ew{MI|xyL z6iEo=?Kb|J4Y;6$(~#$Y5_o>uk8XBUnuaEuv_tWe3 zu-0OXAqWDZD5BBmWAj<-N!lHvS{ae2MeYY@@Cj)&8te>xa;2%n9h3u$k3Eqx^t4i1AYJ@EHz5Cet1* zXK_{%w{m(VkmVA!t|4?eL!rbe$*gPO+nn6>=q3Sf)d+Gt!A}kKu*S*~?Cf>uMKMFl z$2iD)g8H%%*twtUE_@u1z3wMG@rh66-@f~0R;?dJx`^?seoXTES23_-f_!No);Xjq zV{J|%Jo3yD`E9)1kcp5?r9>u0If+Cuy=x~#0b98icfTN~tk~ zumUM^d@sQCI?VRhaFss#a|fY>C`2R@ssbuG|Mtnx^7^q!DnLK*{-B%1XVBLSF2=m(?rG;n)lIX+1WogH5p|pHiuUb{6A6N`Y1$dACCr z$Gqi@Z>HV8w-&e%oE*j&)WIlCrBaDJ&lmR9KmUW5((O)DsSIOGhG#8KNP?(_ib9N` z2v^)o!BgN0gM?=sPFP<3>Q_^#ROoiQ3w_jTHL@&Q*o%!Z3wxIk0K8>E8LQhX{*GrzkXcvyUh8G5 zgy533FJfhFBd__NN8zw+pSy`Ivp-`~|9JqctZlrT51noF^7c_3u^*`N*j3NsnHyfs ze{KCRoqU$Ryz){$^n@Sb$rHz&-Ma63-v5HXzZdVLD8d+XFnhaPcvt(rPqkVlj$@J} zA&R1fYx83oh9TD4d-)YD9`nU@=ikHLL3F_4xfF)s!kN_=gVy?pb7}EB0*In$Vcs6D zZ>1EU{p@ES7$M?^Km1{FV08{5#37%HX65}lQ8HtA|2=#yE?cvP3+`j~X=g1r-gx8T zX@^5J0^7H5KV-4Z*PRz$++$sV#XgoLWk-jptBQOBqt6{ZBqzk`7ZgIoyr6Mkg^2O5 zjnlcSh?_U^q!AjYH;!!`sqAL#hOxt5JDO(Xp1fGh!)CL2#OpINGe^9(z|%!_Z@&5F zL#`cd?j3UfWk(PoTX*LcnfvY)%zphp4nIedn7Qx#H*?>+g0=7a7lxkmqNDQhrkid$ zga=2WYw`b6Q&Y#>+z)q;5CZ+2OOZi{wLV&T_%fiRJfxHK1Vp$04BeVW*J=mXqedbZ z+R;ge@Bip(ItPWh#eFU2^WmXGR|t_9w9#Z%QwmG?QAE#bga}}A3M0S@ zStP`A4wZHxtWdf1cbGmfPTv_96vCFXSSjdPiEti%7DL%XSVb-c&MzHYH$^)r52-wI z=P>hR3$RLIBOh%IQuu^U((xQb0m}IZrvZTz3aN_x?a~U2@W3^ZqJq%^>-&_2AT`kM zhx7+NN$3+;g|Ks=y+U*TnpeQNkAnldU~U5Sjjy9`+z-_n(m0&-uvQZ07A*p_EqqJ{ zl|aV{EgZSap_8*0$4FSE)XR|;hC~%H)L?dImaGeg4*B>vHu4dvAjmbf(C740mAhIU z+OADWdKecVq^7=U8MC+TBo?!gHN zB8e{)UXnwq@C}GkLV&@V;*3cUAZ0}82RN(oD>Z}+5XvHJevzb4D!i;mxn4n}8k6=w z8+=b9Iw>vJLiG<&cR;TPGK8SY_MhL$Uyn_)vQ}kSIJR|SK5*wAF1Yv{O4Dt!$qA|# zpUSXQ%-nuE-L!?Y8flw2FTkV;q&=+DD6hzKV)G1NIh3p5nI0KAxlXAB0T_u93YTP1 z@gbGqEYdpiZi0`3nGRWy;xAo_$PGAyL?MGR-s}veTd#&%1+Kn@_y^YzX^(L2sYF|D z2kqmXb{^gK6v6sI^oRcj6KCW@OV~A)vNG(z^8NyH==pd;k~>3WZIL|DLFP1_&f#OC zET#LKrU}4DULBh@J1_ za01QZ>x*eS9E~U45}_1>zxlkwUK@DYZ?pWhZ)MAio=W#;*J6_%d*1yPHht>9kJ{!v zl|74}Z86X9$&ba)e9z}U9KV1=4xWnz2!L^OJL|CydPkZ|_q_jbv@QOAU)SV)(gVzE zSC3StPQ)T$Ew?nA+lzqAB58sn0n~}Ie`VG9oiU-kq81%0xcwDDJIv2TxBfASe&!uE=LGO zSyqZrq`pIBJ#4FuGZ`}SP+o)|=a^ov(81(Ac;;j2E?dvPz2`l==0$(VCqDIMIv1T! zc;*IN+u=Ng6BcWFZE0uXik)k8)D#oF2umI$Ba<$%>oRx&VHM|ow0^a-3J zPGVv!3rBUEfXIj{WlBJ|*TH#?*jjpHyJ>H~87h(>3gNcfsC3#424zZW2>by=26>tR z5)qV8K^6QEAskj}gfKW`=^BHG9o83QRu}m_khst(?S|5AL`ImW@DA#%m{7li&^Z(H-4{{^(b! zUvV`DE`AJ5Orx@dJWBzKu$Ig@0%uT8VA0g7)k8Fk^Tqf51&gsdxEUy=7QXlQ4Fh!DiqUIb_HTo&$p*Ut~d8{ONffzVG9C-ok(L*XK2<_xuE? zR4RDQDIVC*Sw)#q;@g_j$LS6rK!~?vCUr#i7sn$Q4gp`2JsaeT0Wf301^jJ@N}g zsz5UQ`<4&zqdot1!tIQ4cOu_;G|J*}ogbSp3>Od(>Ii8Cs*Bd@;p)tzC+5HV_weiW zeV=;0e%Slw=fL6GUc5FJ?-h&Z=3?3wui*y_&a`2}2D;rYgM)+kzQ16`5keFp^>*!o zefy5t&gXXSk$ndbGS3?w<+GbNBk!5)%Ua%Z4@c-1tX|EA+I=^r&Gq+l?wU1+ z&~A*OTrSgSG?<>Arc^4Sl;YM~Z>6uV58wBhot-5J0;<(2p64Ni;O9$zjysO*Z@WHI zVD&0%D-2$E@2uLR&mU#>r-f9z^V2&y`)|%Zp=X-8VTQ>cP6ANdRAbpwjxT?^7!sU! z{&|N;qUCa#!NEbMr>7TSM~8zm%|nakO||86c>$i3rs;yFs$4D~guyhJo0}t!W_RJTVHi4v;X}?T$(WXg@0k?8~^5rd_3!{v(Q=}0%w}%&pqKx)oPW& z!9jNI+QrVDI~g1tyjL9d#c(EoTCK*&$Ov1C$ZgTk$*uInW@Rl!CU|WgaHac!q^UZ91}(*v`omILkkFeiB=lzEXoy; zl$>=%5;O$Hrli(Kg$|piNK;4Vl2T^q*o=9oOpeV3kuMpLA-RSb-w^?E60=n*Rw#pt zHMJ%Elzl@oIY!$_oL|Of32B;=RtHf*2x*J5AF!s<$L_dI;xxJEgG|Vcq<>YNWY2c4 z{f*y53GhpTaOqNP*kWLK8Q$D9fhrMt9kh*c8K}@l=@ilgWsGR1`o6$D_Q>eW!ym}XjNZAB-g6$rdW9UlvA$?~-W{8?sr z*H3q`Wv0gl1%Gtr3WmKhI&+AyLDKG!ixz{f$DGV)iG*^HL*|e{86$jfInr6MDN=@j zBo{sUMVX4H2+}qp2yjV2sjr4C6#_WQ0EHz-`94laa+BkH=sZEU z=kTnCEG@#QA;6QQm57oGF#zkm7V^!NAEcaMI-gRB!%W?U&FJ*n-IV`UppO&<|LG$L9z4nl?y(jOjwam`WF4SqYT8xd2p|z&b zXdD#S@4mm;Y#vhoXr>-i_6lNzn0nm{vrUK>wkRI{@(JIw>+TFH@RmQ zr~sYJ;k6E+l7ks(9Vh{LrH^W^aT9xK>zKM15#|!(Oc4mDGQ`VYd@1F=5w$}2{QumqXK96Z;!k>yC^3L~mE%x7IR6uv0v955gQWJv>sM&2YT{f#=U&?_SG zkRgpg$Pk3X>J(Inz#(mc<(AgqCv7TWon>n`&~tN4XO5B|B2!sdK9(=#%J1LEjld&n z0fCB;NsrH8yMq^;y_4bo5$yhHq?;p-$~dVI%@{2_jCJTdCP5OG>MW`H^xBhja!^*0 zw`SQEd#osj)MpZm?Xav|LuEO$#*zmTm1J~#vmB6hRz)>Luf>oT5!D2{x*1*V5vmF@ za3~G7K1fi>aGoiGS*0116AoSJXCPXJ>+B-$A0k@6ky5D-6FaOh$XW%Pr6i%msS5f2 zJp^fwxj0AqWwb9Tl_Cgyl!ee&TbXF<8ahza5*U*hGNSxF|ws3m9Btip8WHMq2`* zaX3V+0#P60j@uEnD&P)=9ri${Na>+nhKGQ5UN~WwDoB^(`%N-eA~@&Fh4)5z$#VSB zbyRQt3DXmk_`Z)60e{P!)BBLsDxM!<(u~k6W1NA& zC!QTAY0gs1(jxMe9~R-}>Q!X9iWP+tWME)`fkp7)d;UJra(?*G5F!A)dLQ%Nmd+eG zTH%G&fVCrQkBjH`SCLZQi`VmgMVG*qj~-t;e|^;pXoQ2j?99KW9v*(&uGsM@w#*h$ znU+=7EkK#(%lf{vdCJ3uEcmNpWv}{?b>7Ve(}M*UaxcJQPKx?j)KibE+NUnOkf;6dhvbW36YszCPBztQymG_c67Wav zy6cepo;NzmreBmH$4TSyltBiWVB)BC<{he`aH2k}B)qcBl1DFL@&}W2cXXM$a*8F7 zT5?=8^!D@^`(h!*`VF5oFJ5y(^#A`<77G!!+c|38Xzkt3WZC|QRuro^jxoYVc@E+( zUYuaG#Rv$IbcdHCvXo$K3(53829~bJ#5uxO=sZP~2FYi3zI#-Utm%}^P?Z5_UQAeoV%Gshxj%lz+%!4Uf{E0 z^Mz#2;*yw5_&94Q;Zt3`kvNH|XYYz`CK*%DrDkde2`su^6uQi3U6{=B4t5&Dw z1q5D|Ol9PGhO{6&4-8l-P<{<3b3_6*$O(Y!GeNu7$1}qaw|h73sE_{E0q_DCn_=Zp zz$mb_oiUeLxTJ^5 zQz9?GSb-lXTv;HcPv|VpC`wj<%W+6luSjiwTmqMuo zevT=pAWI0Flke+dD}=hNwi)ld_Qm|?UH`~qS3aASwT%QSVk+LtjT1lMhkO2$)bth`O4384^e( z`Mh5Db=$dnuYK-5>#Xnke#*DLbvH85Yp=bQQ-_AwIWoe&UXRaDPX2HK2tSb);=YdY z-e5iJk6T1oZ8>o94`1b9e)^Y>`B>f8cPl*ZZ4t5eoqO*J1lsV*4fr+xK8^p;1b=h_ zlm|wWA31p3$ExPg!}dBN6;c^(&`l-@7Z-?%0$XT2z+%v6Jb|P#Ozn<4S)852O>8EY z66G8?jTb}&wITAs0zu{8UuSQbn* za63*VbS%**6hRP>?)^6U?Qfv?(svnJw}aFIo&VfqsgBt0ejr-X9 zsErJRCn-Ha3ltunEro}1a~R<~P?n}2kwl|(dtHLK#?=FZ&I;E0mLii3x{G9XfRF*6 zsuM&I3PGqOL_VQZ;Cbwi75_Fl#~C9&XSGJ~ye7yTOaZf#Y~8q?5B$z^xcG|ibM2u? zet*YiUh{${!uR*!Iw`(z6e7eri3tVTmNY8ia!esH-cnv&=J33LkXK9n=VEx zreuX)AQ*FC`kJN;!8goXi<4DcuE}*5E1Rr}eX2!>r&87!#o@kYKIv1Vf$=+-Jixe| z#7U%yh!aOI=rdR}jI29}si`|~x9um*9k~EPh%{vawE}XeR3+f>JV9SVvWY8_jvGvo_mo#Tgs(MCYGlc6z4IfvFEgKCqiZNppN2!0HH z1l4$n##Z2``)M@C`OfY;xb52OIcX?i|DA`3Dml3mNa-P*4@%;sLkUeJEiUOYv|>H4 z{@5q^$VDIL()YZJU8_bJS5=C{!}tnBP!_1h!;_A}Xsoeifogq-GDrpV??gs1#liwp zt@T8I|9_~g--b;G#ANs?#!3gvRv{`e;?Myau2||Ugai{Kn507(*N|zKv@^rVNR`3$ z-(ddWFS2U=7Sgm+Qs8n8QH|CKr_j6YTLe3vhUfk0Io=pU@9@nuSFJ?(O;nNL;t;J1 zJmn#cB|mtOYLcPmX3N)=0U;E4g1i9vpnCt#U+cYx$2{7-<|_0|xyA_BZ6cUh z{;(hOf5n>fVE4Vy5TCvBdF)-dmPGgXk2@~nKkm5bo;TTq;x(tfji;=7;XN<7{RZ!O z#@G4Z-#Cx&PJab}TjsCkmieoXdAyfy`#sh)w%+x#|7t{YsJoZ<-|)YV{eCUO`&2|! z{5o%b;>Y=oFFp}%bN=<#cX8VI(|GFYpFi$%_!u5eMTFK_};Ug#rtl*{cZ)ub5^Wi+fUks*tM%1yOivvtLSY%k&0i(WGPnV6t*C2tR(9k!syCfl%(UHQ){LV-NwevTX2;Id6p3s zkVx<=6$G&F)*Eos3ydD!gFEXfL>snIN?k1wqccrykRzK-vRA#B&ig+`edFn*+Laj= zD1@`*5*!txKwyiU_A6e1{?^r0PTUGkm*Q$C$vun3;7IAFmIew;7b=2fUJIFY7z6^* zjIoL4(4l#9TGZBTpczLLIxVv)@MsU_u)SG?&Kapz@x~Q9c085u?>A)0VRU2>#T@vx z^1q$~|9J~L&f39_zkCDT#e{m%fvH7WjCXgDgi& z3tEzRmQXjS7LLWNK*Ti&9KBwTRLA5vhO|T~M-@v@Z84V=3<3yKpH6py8AkDAfu9Mg z%CfRLN|1Hwn=ZZ%@LUcCVl-OhsH%rFKB4v*?75CwvTt#!`>4eo|cOj(e^L9Z5!}1WrgQVFhajh{B*z=%Sz!D0(Mur+(=th`;?!7S1@A z+QuCW@&tkaPZuP4fma=YtWRMI{P5WK&LA1kJ+hA#tCpeSF^VL^x|G6Kgt<@H8i!<# zYd&`gXZSIdqbW1Lxr^n>qeusMs@#8C{K99j*IY@kX$$hm49Tm01^da%X^pHYL+~_Y z$pV3exK*KOFVgw#7a^{{n%br{*upJ!Aq*IUv>M?+>y%D%6kUrLjvAm-P>S)!2s28u zvf5(*$VS#a>1i~FhZr6iqfxC<=z?xPK`DpPnmkEaJbZx3{kJi7U=Mi#VH6SdJ*q`c zE+TM6>0-mu0{3g*gBxz9Uai7R8`2b69|DmhWC6V#qjQ|Fn8Hw#6(FbQ_0ZPfbcO)D zB*4fSL>M7WS(=8zr-x6!H=rL^kYP$_0ty?@kdiEtn0}6M8mU6MS(_QEjC)N2l~6AX zRlkld3JM$$01_b`E-x^`$5s_Z;V4{bFkv%+toQ`=DucNNB4aStP?r+n3`%DBfLpTh zRRRi?Ap%Jte0=8+B0wrbhi$2jvz_2I5f{e!*(SrG`he;BQERa!? z)Opmh9zuF$E5vySKPC_5 zpaYAR9+4~Ez?9DMyb1$h5yIh%0_{SqC~ah|lsM1FMH=1jv3Ync*MH_y9C^w)tXQ?3 zu9+v)U_66K3;fm!hEk#hc$*GOGrC&1dB(Bmaj%eO{6wNLQ*(Q zVp3eCMl&tA`8%H@Dgr9E+ybelI(v@)xHBf6&KVO=r!YAOyL(wkrzmVrD;i^c z^CUub-$dF^TYVl+TYVmh?laXtKs%eI;@268mopqq9P{r&FXrPvd)s}!&aui$Ets~7#@yA#KZ*b+zH?Q_Pu)ed(J$Q@3-50 zYbjI=N}=`LT27S;&tCo$Zi(#NS&r>~#7d66LtS(W4qsYMQq}cUw*TIb-t{lK1=qgj z+Peyn;}sGAJzQ?0+vNl`{4aRg2y5SR@o(hEG+EOhwZfBqXQ z*Kej$Yhrpml<-Kgn8Xm)Ti9#>{RMK*$MYhDR9I`svy^<{AS!J$v3@58L7FWR<`NzH zIA;)*2w@%H`QoMYZ#~Fqk*2e59C_AL5r9=7yb6mN`j`DHL!pn%AskzVnmLHM@FnzL z_4_2&BDS7Nb?pY+cW=gA{x;IxSCW70I_hiJU^9n`OG{Z?nQ|suc)BFa<7}pxC;O9FOAQVe+}X zn52vF6!HfmPQOJGJB$~T=$uZwO;Kp9XAs)QmyTLRqD_wlLUctilEkE)K23=I_8;W>i~1k!;)lS)nC3_&Kz0!1Z?Sfdn+v8IrYxE9jsUu0LcF9JXWJQ-s3hB!Agn5d*bq|a$BWpFVa~WEJpJoKT4o8k0q;vJR znQqkZge0ygqDl>GC3ACg_`bku&BD|qE0&G3YQ-qK4@^;s8c36&Y=kQkWL%Wp4(Grc zB;bj%0FeTu^1v%Vg<^%!?CkTzAi-$!p{saX=^njMt*Dvv^sLGo9sY7rl#Le9JqiSBFV@vv}G=3xVnnpi-w&Jpr9`v8GGE zy@<39DN4b8Tnm|-%4mrISqM^T@uf#$Go%+&kLyf-^D_Fo@8HaK4pWnux{u1!r3>|z z5~~efvxa?uavfHAaBd7=O77{s&2r1nKN*)F!)L#<$gMB?xx4*r!+Sr@$n#!O?yOhJ zRe$e0U#It-uOD|D)zfye`5!MqM)$mkJ~uAM`f$ef*Tao(y?6QuUj<7d=le(K9D7yP zH6I*CL+HhXUi=e3wz{T#&K|?VwTJ*X|NMJhMEFwju_ru%Q!l@qj=pDigkRgZ@qgIA z{#awW-=9Q}UF_lt{%7aq;HM8_l5zrG^9yV4)$!K6cn#OR?mC=y9Qo`K^2MB>bkF zgRe7!#tI57HcN3rk%iz{jZr?aiaB!YxB2X+KEtn$jT3$23rt`5`>YxpVPKMy^5R>_ zQi8cQL1+**!Dx?gbezHDJcC!if=baLe#^TM=e`he`M;8U>>_l1i1Bq>=w@Af4aOCK zEBW!xQdo&K0;wFH5a=SOa2@8TF&xwpb5n?Ble`*JsnqE#bjaItm^>lXf@EN+L<5Y` zfSlMt~mTp^q- zsKgbd(KLmnlMAXrNahj-{SG#$qQ_cP3JX<5v1|fAljvlCNE6yNhi*<$7!sY6+k!#n zV?&RAXi%mg4J6j6G6gyi%*O$-hzNuvD{}lmA%(*Uhcsn<=PAfB1l@!YAu&Zxt6B=! z7mY;d0R@7E%o5oub&)|KkbcbYXiTqwG#6x94~iVU^BJgJFGl(W#V0<3S)9dhjuUx~ zpc)g5jSy8l=BDmzTu4m=I6T6XuG18JbprMr}MB!dC9+5_Y6^4raOE+T}Kc&%ZI>7)1ZNCJO&^lo$f z`nP|G*^56&@49c@Lop(VPdJ(J^IyZ*OJ9jl>bPTkxFcx6N&gFWzvD-DBp&T(Y%L3j zp!L{u@$fDphKJ$83*kNQxmOQgU#s!XGtS^;_fU9vLh#BB8-B9!TzFwQrUwAe;W_tM zMBMq2JAYUl{NlYUBEr#-Wk0iwqn|yB%`68#aez&)zUKw(p1=Ds!sY(kxPMyl#1KAq z9P_0O@A@dWyy&Tz#d*3{eu>>bxAUHFYKe3`c#?0q0;nt|h=CfabsR^=Pf>Y%Vyw1BAB~UU#`gNS= zkVYfJA@s^&a$Vr1i#U7~3hgvf1;k-YcX~IMyyG7@D+<_j=M5YjTS4UozkovF>yjIe zlVp3YN9?%?v1|yNNsR4djK(toLno~R;ln3B03UxhHfo_aZKBq0)6X+}k)b_HphNH} z3CbCODydS^q0!(~k;Q=AIcAh#yxS+3nWw+FNF}b(8fnp}Ji?_=YZjRe9Xn{{*;lFI>pP$PHUvJ2vuSpv9VNpx$0v=rZZ7VRkx%}z6z zokR@U6k1S3f_QWTW@eIfkf8%bh+vRqh^C`%2YCK6dPR!v^$4mJ3X>qDPh=&T2eAqW z7JCR!60c}bS?EwK_8Bz}&m|Pq0BVwoF~}sRf3!p9Rnf*L=;fF|A+*Kh1;!H;3p1tN zs}&SRvw%Wnj@}P;uM10P6;?X@Okj!ub3!7lhmS;i4zNV{7$>Oc0h!UL05S)C6n3&h z+BdY;4%2A)*g-)Jh-E>4`Y2*(gj%BlGJ&K^4G*0ew3CQizDvEG5S{PQ7(PdW|Ai31okDrAE;u2v&nnB!+gR`AhFF6Qf@<|)7UMjEv-`hzam z0$+GIq3N4GrZ7+ll=7iylcqhSl6Y|g;T*;R+F`qxs>x|yG7kXXr z8z`HBk)`Pb8AyTfLv)rCJb?cGV+!6f1b?#dKYw@Xbw_@pV~@W0d`4e4d;b7$87jy4NI=knQ{D`>e&9!IBp$6;cJ5;orbkW@0dV%&aO7EDsPSm|!P6?+UR-c^X)QxP%uojGQ&DpNnh@$i_|vB$zrb~3@lPwmZpRs`!jxbqmc z-<54AapGmyaPZH5mxa$?3ij?T`*{1wEPu`KGyH;=9yfDiomZagp+Hd-B!dCPU_iY! zgt+1|is!xrFRbE{GB;v$(*`Cl_)UiX&-*#$oC@Fg{6}z3u;t0mr&94qk`7YIG6Xtz zV0#o&;H1D40xJa4igLP;0#~FM17UL*4@rCK7XIH~zJ*q9c&_d+eQ=)apFYj%u@xkF zpU6sxYxK3lyz{SV#FPb(Nhy>-_C4yg1k@1N0R$n`o8*HOrl-k63BE-PB7{j%fe#d* zEts;HLTbR4Av#XrDs`k8p!@SI+K`wEBcsD~eTN@N##XIjeB}y|1)lKm@7DE^}1A=HS$_SAOfVRPy|7lpzMM4N=Kx?lho=X zEaU^Sp#Ve!Hm+r8IHpytF?ZkqVVcnleWF+(T21`iF@NNCQrp3XP-ue_k|@g<9h)GP z6(*Id7HF5 zfACx6fBH7!dW&S>@PMMXfT&ks^hBx)J#6f7eS==N248?Cpa^|r-x8<_rmz%f{Q0B& z^4J9b^1+XC#q>N+d+nR3RvT!SllA&|OLh**^HIu2cmi#5tncHi5K(AytMFq%B_2g! znfc~r?Ed6GvN9fG!~VUnaHQ;@nWS`P3TtK7iZ4Kd=a;)9TIUbwJofAgd_RBSMAkA0 zsBGVHpa1Sf)pBf)G;Dqq44n)IK7H@#O^*gt*OV?ykBO)sX+;FU1s6cOeXpra7d`HA zJn!pY=Z3{aq!4UxG{JRwqvscdkAPb8PuefhrlvU4PMKBzY z&*#j4XC7NvqY3V+=`PS^g~go8H9_ern0itOuGP=CrUw2JVOK4Dy=`P$#% zjyvyU!&m>Ev!8Yv-@5dlxN?3Ur#A7INFXOP&O(1KA8bq6o|(?26f3?eT> z_^y2a`#5^zb%;2G-MiUR57{1tbi0exYb!`RN7n5TNgo*%e4*3kDrfO-heRk||3_~i zniyq1>9OystN8LqFJ}8$JIIoP#l=OQG(OI`24-fDQh1=GMv8*5#st?6t>E7lx-hW< ztJKovWTZ}`!hph))WVQj6tVx#1FUk6=QL^zcV=l@P1SFJ%8}NvveM+c)VW0V89Vh! z^rsd`>W)8p?QgR3^rwa?eCT+I$x(p2lI5~@`4V8{gOSXPO{NSGofgdn+ z^e}4WGA3$cWQ!dV30ipAAVQLX3CsHnfw2~29G>SPUFr0sETtv_jmR7>86f-yjI2cc z`#Npn2a(^CmMC?EyoXy#f ziktk`W{$0m_(^d}02hrtG}kpVJxMw}N#8FRzw$DM|Mj!z&JhOnP1sLgMl-6ACVfKT zA)}CKV;H>YLe_ldQ^<23&)!&a`@}HopY{SaobqJ+%19Zkg(xW<)?kc5`oUe|(vs4V zGJX5aTyxpKaNSp~LZeVX+OREA)%2yp|dA%nRDH-88x1%;7#zQNZLtuhiLiRw-2zF!s*S_tGQv%VJ`dJ6{e3+Hxm?mp7?Pf4IxA?pjG3s$pLq>l zanT2v+kcSnU4AJ~JoRKE7vM($i7U8ia+WjCIfo)Kyz8xhPGx?MUt7D5RCnq21~@d* zGtd=?G~uGjd0zMzZ>Fl6T>15{aK@H#!crcs-)#qf|)4_xaUVznprr z#UK5_AMyUTy^X(LHo-d4;iz%=HbzN9QS@0`Z}FBRGyL2q{~s?p=V!U};>(%be+y4M zc@>*hZ^i~5MZM0Z%{vgz@cGYvmcRYuzv3^KN1QS^z>E_N2SdbpuPpAI1d}tQz>-F_y~s&%a0x{OU5wvqMc$uo`TDQcA%Aq2UxB;5q(6t$IWsMb8b z^DqC#XD))oZV!CExj4_n=_j-CnLo?u=2M94WB73u=j2`XvW^@v=+W)A zvD1@G-S7?efBj3ew8!>lo!XtZ!E6s?j1F=z0uKq&FE_o6E#EJbMe@g=!@ggBCF2vT z7+SUFfnO##_}lga*O9m{9f;p;mMq1e77UKU!u8O-wRCdI=0Fbs_tSHYUKPR-sH}qe zW*9mJD$98ckN8dmOFM@ze>rU4e6KYUKQS)6@ByVT-4o8{Y;NV&yYvy^$d6B!SD`|U zAG^CCr1-Ipzl&XungRmgcbf3>nS0KR_(`Caj{Q(U>kKJ9hMN`C#4;!{_Pa@ zyXn9Bji@N1C{kQ%7!ND7|LXs;x4E3v|NLIIoVlIlvce4?{Rj4c@l%XF?i`kFIEm)S z1l86k$N(iJh3=CKI`kK&IK1ypZoB479KQNmR@RsCTN~HW*nJB}?zoBG8~>KIulRMq zV){LlAC!x1Aie$@LzL7i0IGEV7iM4VN1uUP~kF1Zc|V` z!sbYmfftp#%c8)daMGfjBzF>}1lB4%C&^8QAfiaxXc4mQInQ8x%X;=*cQuFhAELk5 zrBSWW8jT5q3Q?^}ktH}cVD+ZcIq}@*(Blit{_`X~Co?`fjX8RNwXr3x25dg{@npiMX!qH4YDCzG34Fo3-}^qCb68v2 ziW*~Z)*^+VC~{P0_=_SXZZ)u3#+KD1v}cYoIDClP%m6*pXV*(!Oe@!j+_H7eTE6Gi z36w?R;fV^)FK~SW!ZF&|h|XdT9+@JVI)azZv8w751s++yAoe2`_uql8H8^SA8lL%t z)A6@#L`li0a}!Ramyx$C$eLCMK#WtrbJq#hm?vy(}d2Y~HdBF|v$A z85(}Usx{-NJjFL2V(|zIx<|fzf@WBOvd_$a4@>#dnEt5!01Q=vzQ^2 zq#(z-3ergs0x3iCqQDxBQbGB@$U6u>gv#t+v zNl$>iH$i=ZV$jCPfIvv%6~pM?{$&cS3H=&jrAi?(q%(w0l%i-`kmd!^biu~PFdK)* z*nR6A+<4uelQ-)u+kPU=ja#TptR<+#zNONsC7W_Ljv52^9m3=mxZ~}bz!}prrbf2+vXX(Q90Ewu76fWQb+O&@wK=)8# zCp)=-3m#QB`L+Q5bO`?NetuK>)1mU%4;7lVVGbQWL~CLd-spOYK;dacJUm4A9e+Y` z##0zR^YIu0w9GMik49L-d()qAWW!pbKYt^uZ`;q4PCSL)T*2;7eVFe{k7B$@ZG0sz zYA~<@S7ap9Qw$Cqrk+^V)a&e8wVwLy9DM#N?r2P)-~I_U|ID*-4wAG-;0IV?34F)= z&EF^Z;QJBlCdm647#ONJs0~4uLj@QbVK6(1ZO>p)NK??L)}c~^bU;6KXzj{$YSjQy zfQle9c)}-lDFq%(-hXR z^^7waZ8qs=8OB z0Z!J)O_$IY__Zpt2ln%Y&;2`%K@VH6(ps~g*79)-(DOZzKGjAOPgv?BF;Xg|@XCy} zB~GMs0_Oypf|b@XefSWSp*r5Wl@!T(4%~PX2M!;h6-sXW&NrFfe}Ge-`ef#(W^sO0 zhE`gQ^+Jpm1k&RBAu0-y#T*yE^Y3YSj){p0D$NSb@i9h6my>JDp4)DtUaPa?^iw(Y z?0+H(6;cX(-$zP`RRSp#LilWQmaN~SGdabHCvKxT(!vOjJFfdK)%{%#-FcMukx#R1 zypGq&=%*SNf<@p*%kh#0vgSDRO`q1yhmd&%;tCT(Aq$-@J>}y&@Px(}aA8NxoO38^%j*b& zrR`ZqZgUV8AtYLBd?^q?1bF}zAJu6ivlLekL4-@xxSX(BN1jtB{Msex&wUtg<9g5q zfebLRC=c&f@X>h6Ap(K12H^&1N^4amJ(MUXn9Lc%P8-^NwvV^i-WXwCIwp7DMEiyt znFFkH_!25!fRu{Wam?fV7G6Jr$pg^smb?9`w6GQ0f->MF!j_sMgeaY-{0NKzKS0=$ z&h=p8*%df5guib;c=V=oIPKb12FXo4 zv|?e2zy(O;qwYq3=F-m6A20mm9SOBmKs@sy-mNl#!crub zesdf(Jc76X2-JrN#@7+N>o4fN{e$?!qsS~r3xO!QRQ);|e(?fkPB@)CSA3G8%P(Vm z_X3YwJpoZbHj~kxyq&fJZ0XPxMG>uLgU~PF&V8hd^W0XiV1NJ5X*}$`_sM6q>9IX^q_*f}0&LVA!tOlIyRrsry{tCk_4{JiY z-7b?0)BMh#zKQ3)@^xqgpM38-xcmbjWyOkd{;@ZSvt175Ew)r+#&V4|DM3^(X-md| zEXB2G4S6{RR0Tm7nPfzpPsEQ#>Fzs7C=6L=j^?_JWI>hhU4IL9(5Bv~5!QyV))GY# zHtXRFA0bppD-(7}*ss6|GNa1`@Ad-ih0--3D-4B%(XnMLw2xx4K65wjp?&H}#6v?^ z<1j)|@q8o&N(89TQ5Z#PG>>aE*tqRP4o*!nciSCoJ@;HrI^*$#fgr9{nVp%(DUZ>{ z2u?|y6bLEHYy#`BQlM=~b`uV&fkJAHjln60ABK318nX*CjLPLyHm)O|p5n-jw^JV- zrRW_-sT7G%HZ+Evy_4dQCJu&(gQX<%Tr*U!P;~qBijtpL9f>&CRQRi>Jb^gt)A2*9 zB0{PFltu~3QLRv+k2RW^TyxV0-$qerqVd)I{D~*9%pD=`mquSPWwr)!2w9HwGOz_$ z@TCHw!LL9VETyZ1QxahXpuzJYwWvHt<_cXMqtX}!BCJ>hYf62P5GYrQ@ud<7>0?Ze zryUMiQkg;xLZTd4A<3LU8jCnMi5Dn_qYA^77%IV15Z@C0OA6=>V5SR+DRWKalJSx# zle8sjse@+!OD@DxQT&6P4Cf=_7?i?12%3ohjxhyq9fm`?blH2LC{8b`mO*l>JRZYi zcnpt-BH{;_m?$Yuzxu0i_%PgZ3+&zv`}V=yT)7i+ER2uC`t`7VJ8atqD_53_j)w^( zl9%&xHnaI|8i|Jrk0uSo@d}C69{gSV$Ja=l5|k9Chq424R}rBtBCaBYq_E&shOu@( zP8!^*Ww@KahJC}!Fz@>~K~yIza-=Otl0H%BGrr?w#&?{|(O-BqdoTYq!L56#O-~Ws zzMpE|X4qfiNh=SVB(%FZ3(J;~{@kyiPd<(4#4}hmJ_JaNPVu!V^C@JNKuP)wU3#y0 zE+dC-BVV_bqTi(!Mi2y$8mL6jYSN#b#7-YTseo?MXQbIgM%8kszbHcolmmsp2#ren zu;m2E3OKwEhlg_!9*WG%5vj#Q7T*SlA|Ve#)O?$#w`#0udbGP4wn%WE;F_+%zxFzK z#vbg#9IelOp7WcMYJZW1sW~FQO1+XWJ~m9f-J_ed8I7x;mKI)Cl*No#`kWY$mWuCi zqc!~7_A>h7(|Ey4UQG7&E9oT#!^6YWTf;2ovn0k)Q4&XiF$uy*@MDYwtj6JxLgE3= zX^gS>#?l$|k#R^iuykh^8Cy0%-xSp95mURT$dqLJQ=iTtE71Fo5LSFlo{~ng3?$S! zfiZ-w0IN0EUvo9fjlty_TMe*5!0db*XEgPpoOG^>=R;R{_)?XZtwc#V6AqD=`WY)q zSEPQwPruhir*LRt2I(A0USNb}diGAL3(J^4)MZ`;_`anY0@g#@MFQQxq#ENp<{OSy zP$BMgN?DtNu_(q`7&wcVKg`*!RqUKtPtW$5vj$}|vO;2wPY?xw!RP`%P{fTI(v485 z`ZVI08hykJ$XW z*Z+=nUg^SgUhUy?EqPMX6QXKFw%A7&8Lr3>X^v+!-pVbAn{FU`#q&|`yqIWojNC}# zBqPsrq?dxKuyW06^s8S>iia5_^k$A?ZoZNH;O(gS4$@kRMh&rX8}Z{F&)Si(a=jv; zum+KKu}hY)GN|Drn7jI$q<{Dt8g>!e8X@Qu#FZL&whRxb1kf6%H+vK_eFz~Vj7}JC zHIYHQ#3m7?3zBkJYjMs|VDX)U!j-%K!XO+7ZE;fK35oR`zScM;kV=Aa^ojxYXq&CI z7TwsVhy{zi0ngpKn&gTr`Rd2cMgzmkTgW&>8O`>(M`RooPvR}kQltgV+BhKs(xjwQ zDUZ@2iqaZWC#BV^6jZ|yX8Ke!%b3o=7i6^tz0jlGnIi}kJI;6X5Q-oOkfBd31C+5$&dv}7f&ht- z9-fsHCc~IgKVl?wI(;Vmf{F;qMkcVzV{vhjDDW}!ZMq9{j5eyIX^IUZlu}3pQn;nA zm_c|7w8Fz6d|6V2@Tk=5kQLNxEoMTW#oKP9`J{8mJVm>=NZkDjdPr z8O7Wpi=sywcnqlkndJySWXRVPY0jXK6i4qss0wN7kS@naA7ccA0+Q5VU5f8X3ItYW z3`r<5L!ttT+@PcXpS|}Em*lMPd_Qlhs!r$hnVB;2+1;7bWliy3=jg+OGM*QBH*<{#wk#cU)go= z>3IlK=P?CR;bI^v^=+p!JyaP1XPWf*@$UM)?9tZ0C3hw_PLJ_^SiCyDw(idKZvjO7 zE3XY~;FtMjj&Y0+^Wkp`#pyXbhs(MAUv&<|H&Q>+O^<6TxVna08#v%#Fty~Jm8olS zUY3I7zEe3658sLi2rnQwX59qVmXM~CJnf?;_zwB@t#Ioh>`R}6ee?gK^SCEMw?*)Y za?!X6NQDrZuF=rWnK|V&*mW8Ra71E^WFlEUA|b>;?JHskWI^M#LF)`DB@tNuyT8Q! z-fz;6HL<^dtS9tl1&9o)WoY+db|aIcM_}nNF*gJ+nCor)a^`}NQ+J*wjnS1P2uT(V zwA--%t|V;M8Hf_C0wHE7YeBV9-46BODAwml?P;Q?EDM&7t`N1PvVrBw;-aII8!{zn zYsH#xDAy|5UNF#+zLLz^3V}nn`)us>VK_*g2ptpE<$;QE+M#esaP0)lZKghW0`IP& zy|O};OJY_q9@VI_CT`hIjv`1+Ffghd?Y6_&fEEHF#7R0+41yRHM6gYyEXP#iip_JI zsOvhN52=V+A?G^W`PnaU#`iyoEf=1{mu|V0#zczc5w*z)xj_uU3s6$CJgUj&G%{0+ zRGZ8cm?DE0}J*APRAjBT7Aqe2HCCRk~(MVEH0sfH^o^|!J?c2Hpr)zV~DU=RXj zs3}U1)E$s5CQU;vEMp1YMhYznK_X&A21}HETE?O#4YdhqS&#)u3;{J+gHAtbZh}a9 z2$G3~&N7sqcAumNArUrEhniNq4~2mVpcUD$Ax4ey0Wz6Jz%D1QRkSjFG8j6DfH3Ji zdm_GeNS(Sn(ba?)iCUqRB1%nZ8?=!`FVJKJVF`p}L97fxn-t_89YRDzsEH_C4q8Y= zu&L9cBuuYY;YI2~5QxDdOgnv#MZ`#jF(w7pt=D%|ow#N_Cjt_9TDubteRw@5VjV<$ zm)8Odyo{Ie5?;a~4si!}a67lNm%S{pg#S9(`kUFzshr9=oWt3i&33k<*H7)EswWqZ zQGoDhIuW+QYiP<5+5WxA)fHl4kV@kjBW#H$ke$*e96O4A-K(fy@eBB;KcCL#tx&Wv z0&H2*Qh~Cpk<>Ueg;qovk;)*EG~N+HgK8W>wvf`3(WcQ7sXbmu>bhe5j<-;~^|#n? z_TvarBAul@JCkPTCnM<0!Carg-u;NlD(IY8PnetQL1zO@R?-0GBtY}?AwcnY z6dg(_SUbML{GKz&k1XL29-t#N!LK3lP)J18Li&cbYLLzmD@9#9nvSMbby0DGa~0BA z=KI^IT0O42^(IQMC^l}T5gAql$}lF3Ym~Hfi=29GgcfU@vtu`>p1+6Ll>@8|RZEw>j^5; z$$5)_LY!oh#2E2Xpj8GkCh%Ys1cCGs8v{lMGBE|Kfz$<(5)nnxIK)7-BZ5xdCLuIl zWDq^ZIuH<)M#z{nEn%9U@j#HK6o{zO`kja9@pXgsp8ni=C;Pjp))T8AT;u(4`~O%^ ztX>BZ|0)i;=9KAw&*i!62V}jzJ`k}sL z1#i;8O9CjOoAR=w#W5jsd72HDCBgZ`C6_)m0jLO~A&;FDK^G#_8G2KP&*TLM&pn^f z$`aS!a0|<0$Mb*USzPdnpQBnH@X0s*4!7)EX7`p^o^akye5RNjobaOd45v?q)DuVS zX~YBE@jz1AX9^lg9FK@DAlr(VX+#w$c3*@#?_A2OKS?uQrEnAG`d!LnCm0S_Fhx$c z+a(5pQps9WD~S{V1Sm0eWfGAPJW+Tula#VHH#p}IUL!+H^ph$e+B0n2v5Ucd_i*&y z`;k)Nr65|5Kp~YuNK1$s9VNj#N*7sNT%^0OgteC0&IXi((O`lWg7KsxYZ*ecL}@Sx zgmr*NYe5|Y7LN`Qg=9P)5H|FnajYIWif*@PWjW&$17v9_x&>K)T48Mn%xg>hzv7u z`fkMG75w4>e9r(`N?f;r=n}|v&O#-o&P|5e)tC?v!4Z{#m;-_!DpUxF7ziN^<`oek z1fc-oJw8UFDUczaY;-|H5DCH~W55J(p~1xrL_jHp3-weks1Z?vo(Av*pMa8N3f#Y( z?2Q&6CC#Kv3@81a7lGNhu8DZWd%`N*{NW+lqE> zK)0b} z>x>`$)z|WUN0#YqT;TaH`EiaPJIv3&^p%`;`~YVbeNZ*N(P-tS-G~68fhs~N@ZA}- zQq-eW){2ejImhI-8yL)OU}9QWyT-;Uuy$e*U)8kp4pK!hkhfb{EoloyP?0Dfuyviv zEPz}pe9$cWF*G&RaKh~TCQNipMiU~2vLo26J2cght@E4cF5XWVmAI~_5s}J9GCVb) zM1!j)xXj}_IYoaf-7Tk(8^z*q5jQT`(3?Te&7;Z*N+$|bOFTfq(J7P=4@!^)1u~HJ z3JTw*9*(G4!x}*zJ=S{6hK=-gZ05*acQLMxlPd_eMCyRE24$P1J3x@vsUs$g$4n}` zDll0OVLetU+5)aSd=JI^s6|&a)>j|dMYNjh*pQ9-^J*Nv5FuA^QY{g-I?dE zYp>!1@BK$srA8Tv6M^6)Sydx5le9ar0q?QFljq5;32CNT3cWM{4}m-=LL;ElO5X({ zp=D5|O#yH?$UDS(gmw|BIw=`C2x9Pv!XYd~JYHyIR7mBqK9W5U{3u$9;$$jf-6Hy$ zT#A&quEmu8mxC~5ZV7w_0lc$Fq3}`>g}?-j4JBC&1fhs6gYq61DzuUyizzBjAVP+S zQi;;^ovLr9JJTVb9-pYb{Mx@3ccx|)Zh7-Med*EE+MVfGo&Rg=Kw=$4tk-&d9rZ}U z>g52-O>%Mi+tFiFSlybP#ST_kTN~1Dd=h&`fs-*!&$&bia??SEbP!!6b2;_4Il5vq z&8Pl><})9~^n1{mCHtw@61Qza%+6t2EvQO_QppOk91~9*r}@}FQhxBy8H<2$fmWx_ zhBGg~#fE0MMqwwk^In>ruWM*;f!Pkj!*?ME6GCASBTKK-hVImlJ}^y{FCf&(K2>K^ z!Ka3-O`KFzDx)V%(o3iaB4UG@y2${_A!0;%hXqO^qKOC@X@sKR-@xsE^H=x_pU%b4 zc@}d!cXQzWYZ>glj+y>ePTBqxLc5Qwp*pchIDV9KcP^lom$1qqREF0LTIE0mG6Oo` zE3iX!z6taUc5#hiCFtqE(r5meo0n_OeD?R#ERM+91x23I2!U(o^oki&Z4m_8S`d*K zp;FLah{>Ue29t)TIHfVlal+QjEo?z4O^gjvN^Ct~Vfzk3tQoDHAa2@0e`Zt4LGvCX zBxH`NHH!!VKdcBQqGgA19q7$(BU6^~aE%Qcx6ztiU@%%l)FWnFZA46#qgDolGKdgS zN+6}g#Kh*Z!Xu=nCTGuvn9kaCE$4pl{z)MTxYrlviRbx`dHqY~SsutSMJ=6%RL9NG_6 z#CCFw&L9s^DNq7w8>EtmqDWLX0z$QkW=voWDRjy(ku^CP20<_e(OA52NRcB%gOdTs z2ug#i5sknwMD#X*nFXyFRAVO5C8>tVP+}K74K0(Qtb^r6m{bI1h*?Nf*VrWCds9IM zT4qx!o&z%tFm(>46e|DDbRib~wRcTG+6WINM{g?*MXT32C|zYC4?`w0kG*Gf(;qNtPq z6H36+63w{6v$F>oXV(So+Wv+;n7> z8}GZDpLxlTvFns`*tdFw5HdtQOTD@XlZKiWM~@t5byQ)x3K<;QHsq#&AVKA6w=5~>lcyn~3E+5S8e*~W(vt}1XY;9Y~+ zzK1v*Fj+i?SWt+vB9voXzl*OY2qjP<;H#2e-bwf_f^N0ZI>SrQT0n@1pnymeP-~A2 z3WH}-k5L&+d_x%3%;X&=tq!B56Nt=k`dMdlbpJuh@iL)f2-ebw3?ntjfY6eN04I|s zMhK)-;3|Um*bvdqW4e9rx#M28HG%BBGa1Q-zS+#N!$;XLo1=tdcFR_}vs-W>AgU26 z%Qpvo7;k3Zx%3VAgu(o^=Ld=W;D^GvMkYl$`VWm${Hstj4Hsp)In)L z#SEJXvLNuskAPi6^%h_*hq{YZ9wQvaMuH7E8IVB}ltIUe=tI&jc!(xP$&ySq(Af^T zX76CY-EvH`V<-9UCy~u9Ao?@lEMaYxaOeQ)z&_?&!?ta^*(5b`@gR)GI3q!7f)Xf~ zC~Y#T1kOYkd;?K|)-=u$Lio1-wtZys?N6+}vP_Tf#>DEo|MbBWrq3Sw5cjU$1i+@& zHZIxmBD&e^*Su~Q9G}?#ZjO%k5s92Kb2gXm{Lu$3SNn>0-TvPhHY+@7%d>duw#)zJ zu8FVt)WP?0{jn=KJh~4X8a5OQoW0>+{*v+WIecB<}vxb&bS2h*+=ndKC4s$u}N0_oW72w)ofxn=6U} zEd@(!b>c_MM14>)i7Wv8Km)(6@R+EG&ZCehB~elnWr?UuI*o(=PO8vwXCWC}a54Gm zyC`1tLu~ABC7)@tMM;LE5lua&S~|hacYTp-zIX$tofvV!=IwOG6T-?72F)rmX3TbH z6A-8;(BBMs!Fb=jgw+8kMZnU_+tBVLkkD8#25_l!qJe4*F`K6U0=0);A9>~un!E3! zWk_@<8Jt_#w@d|sM za1O;}#GPNbnN9QaoSEfxHgu6TqWWDrI%BjpWF{-fT3weoE+%Km4!`D!6zu`6f-Q9oq zRj>Wc3+`fPZ_ih~wm3P+|9i_D0l0tdwto>sTz~8n{LbfJ%3^u&L4W(y!T0gMZu&JY z+xg?X@u`3Nu={$VJj^?9dISHo_pgXNG|>IX-oHQz%?nR|B`?3=H|gh_9<#j}fAY#4N>k$CN8@@?1Tb?hk>pKY~mJT1Hon_>Cfyy-$0%1k+j`tRw1QKb$4d5eA zS^Q9tcRH{s)mQL^4}5@2 z>Mmz?=P`HRMtAEL$aDe*{dq7Q1_$p$4_8t7EKL~FHyVoBG;1qdvPregG%0t=>+VUI z)JYE!L&}11kc}o_9sU7PH6BDn%K{$_K01gET68IW4O*e2rm+n=KqDhFyE>fv1D8=1 zhH&%_miI2R_l|ikcSu?wNfu^2N4cEBzhkuya`FZ~M z_kV|MG~nX7d2$~>MMP!@nWil@PD}1o9rA^3Z0-cQt!h)gYWf>bp)5;2`-Lyk z+O>@=EBNR~KT1_(G{GaqkkF*gjWr$I#vKe+hb$jE!Qh^~+;Z1lJhj`RBO;qSIr)Z7 zC=}LOOa!S5oQSlXCDslv!8QT!J>FGF=h$m&Y*kVY2DG~^#;Yp~PAqZ5b)RE(aFjcS zaN>i9_`yxPx$oHh(1vp2kXeD71fr`k+7MlXpg?Mw@)4rLM+q@UXh4C|ZCWlz7mD3K z_%tqj=J!)f#~pKXThciJ6b49{2Q(%5Y{QFQ`C@iVR?&ZSBlDX#L!G)=6X3|}e}f}0 zx{S{99puFf%dVtTL}ohk$fAuxpr{EdCmM@z9ZVdfHf&^VEcjp;viW7dz$MRo4%-%X zA%JnYhHXkFqY;@Yh%tf)bn_N7XIy|h<9sHUKAXK?`aGX|-~Y!c2+lq8EX+N732}sV zZHyG@T8!B=K+&b}Ip;8~Y?_w-?Ew&PSozk|mmW>McMK~5etYh*4g-Gg5n*}+!; zh(ravZ*UWzKJ)=D-T5PrdfhA4asK|^KbfvYo*b;N)k`VO?Q5)?7q8}ZS6z+`H2@3k zQ@C*RC1f(^;OHK1Ui=I`I{x{Fk38X= z?@6|wKvkyzJMTRq1f)u7(LsO^f?OMRZrRP2A9*EvFL@T9_@95sfwdvec+pS6yZ#Io zSKyT0pakQ?M-k-++i9U|$6UJ)?L6r#y#Mk|P6!Yw{~&cS^i&_=pb3!Y$ng+&?-6{i zkg}5&)JdyR`w4`A5Q-QTrE`cv!Nd_SE~CGBAGWTN&wp%yzs8Q= zgEj>Mfsc-y$hK{P{)Q3x)jjmy7NIQBLZsG*&eQ(+kibsv(?G1r!KEZ(Cv!$Z(d*1` zwrunBmpua=#wg##hJdqyp{+1kAa|Dc{lz;#D~>HTY$Gxbic#gTVtQDBZiK#utE1q4 zqYyYI6>Qnu<@LY&X3qP*r}3%xznd#Q_6hE|;YKREMtg1(Pv5eGqOORh#n6K+hm1NI zr#5IoIbf(y$8rI_t)=Depqk5kS)pKCwxm#lu~b6j}gxpeNi54m~*vKjCS z!fFB$(ww|5wa##L^KJP(`~AUV13)}bSC%j*Q(E?8wT@l&$U2C}Z@!cpk6%S3@b~xp z$=3uTK6LLprvrY$lea#XFC6*EH?+TRyZ#qX0*IeH`*pnXasLf1%~y06j_|&_{)qS9 z^@p_dLkkcOkM{CQpSX;PTLWNE|MC3t6aR<{=AZUe%hkT(%KP8N+i!d=!)BR-qq}+C zr(VFHJ@<=bD*viw$NST?@c_20$=f}Q$#J%3GF&Az70O5i5upl-PJuErY@6TBOmQD^ zax95%RZO45yQzCrC;fjBp^`*zXq1LA44VnwOt{P#&g%6TRXIcF*mw2L#*2v25=)Jz&|`vDOeGk25eY7V%^(CSf;W;_Hb`#~?HsRr zNSRSj#?*uT1g}8|JRT|1`HaC&n_UuR3Ut<@+uuxo=NfTt4)MgNVMjy8cin_tT}}>7 z!V_sx7>y4eAsa%lU<)9C$_Q?iYH5|>%U{8!*Zx;#qo5(MaT?SJit%^}MTW{EyDmBh z|M+v!5fA|%Bu8KT)7bz17RvYj2}OSnDic|Nn^%sBj>)Kw7krVIw zGs?Sf10dVBi_I^2HL@rk)RDL#d+cf?j{fr_FSF3z#gn!?i))Ww!F9(z&f(F0Z0nx( z$j3VPlU;}>EIfmqy)(Zd5OH{PA9t_b0Kl%^*}Uq)HzUPYQ{^_bw(|2A{tiET{+k{& z(0`zQ_nMcV1Q1W&@?73>$%noQh&)iaD!BZ#mvO=T(|PsBzK3D6%>8S(@z=M#nV-Ah z*B|m&u7ikm5V2nC^;PwEqX&zq-P(ZTfBBB&lm4iu{RRDJzJT_57k$;sUux1ez7wuZ zUTNxjgpVF0bP_}238Fy>MWY0nGdKb=Mi2!nUCH&Aem~#$ve(nmZOUqha~72;@+RUl zg%5%l6j|F~Lrm7H-XesiA%gaZC>V|gWFfLmcF<9xE_?!u&v_p6Z~a5$#u*wV&=$I_ zZVHDBHqCgt2;M@LfwPJJqyQ}wFlZc@2q8}c8VQOFBgO;)L^I_W)DSF6=Y%-*^jC?_ z?L?%BfkH_pOULNifX`;I-ZR^oB{vd5;=gMF?QRzzdY~dw2;x*@5nO{I5`0D0oug61 zMD=KZ)>b%m7ggO**A}4_emLO7+6gA(hNv3IGmg~}y>^slb%k0>N;C_bcX4dx1jBL} zC3Auej6;o6ie)!M*uX?W%jJkDX{4jA6b+VvgSpy~M+nk0H`}E=c98e|%3IhBY$-IS zZ0XP(KZH>^VpX#gEuF&9FB(iH8Mus*$yq(V%t$UXqkGKC23so*+;=GIPtO1(UGug*DS{l z9b+v&$fj18iV-f(khP$R4!l6C#KreQq3|e^CA-w%QFXxQZDhxwgho0~(JN@r&X8w2 zaIQ{4YC<4XF?Fx<>AWd{3?88rx4icsiJ$y5=Wm>4Z8#*}dk10h7$#4yU`iN-5IAKB z-l76TEHHvN2X%!KL&{3gzT}y75j1XsLQEZtB{U^kXGv%s8dRNVe2ol5s|kf*yXkQJ zCw>g~zuyUfk_Ebzaqqa{v)}VLe(KlXLPvL)lmprxY6T4eDHYuY8l~_uqKQbE!U=;g zWJZC~SYIQ2$z-W!rrYQI=l=wEnT%^b`d+^G!t>$Uo58J3yKAHiNRqBe0=}skoH)kp zriE|G@7SV$bRz1(Rada@|9Tb8!F}nww`t+)1`#LT{paj^-7CL(Qs&7|r*q+x9<=P6 zR^UnbW6!l|a^%tHLA>y^S8(moD}cy{?tLe(y70}9_@2)m{(Fv34gm1OXS|x57C-Y1 z?eCG%-jmPw%su`=0OBj_Ujh&}9{&_K98bt;HlOD=p7x%H1Q1_YJ9~ThbVr zFCKCm-w6v``qOsC>i32RwptJ*L~~v14w+oPkOi z?yUpSX7o&?FDn*`jFt=7p}@)srVTrSVPa-jj3uRSFpXg-Ew0-^#+t6osZGXFuUVc% zr14~~ArBf!gUmEwFe2q;gxC<3pzt#|)(}$AG=XkwjukuNIB;G&nbrE1N1K8wNILC# z=6p`4=g<`BtfK7|HYx-e!U)E0l{!KuG7ui+HBv>IT3~HJ8%f@2is`1UyPhOml+OyYGhu$I|s*pffu|(e6Mjh<=Pzjz|M_03V3TprlSfI9DW0GlO71 zs;*M%bO7~0-!lZf(!^*_hRd14Oh@OE_`nz@f?7OAEFBI_M>bTV!!?_?bNPS$Jvy?@ zcsL+el3IEQ4(UmqhM6w8GALzI>qdYDR5_+>CYTtIK@z>g5E+$A%&3i=`>Y?~+SO%l zy7{v_ZecreaevYx)yb>?okP%A+YlxrY`gO<`yKm(!NdREtt_$sH~tGt@BOQ9%J$sa zfP-)TwFhR0_)78d!|mgnA7i22D_?r_%RYVk4>6n1GpHB&$lkx;28 z*idZY>Dzz!8wL^TE4Fudbnn--jt|}Y&Xdo7^6b~rF*A?qea}4Q-}BC!-@wuFK33{u zTzB;2e9yM$Kjbl82NCNaV!hT2NI`NBl>=cGwm#~c$5)nYJ#l!H| zGc!HhhFOF!!Aex_i6W-d>QJGggKo}^+c$8^kG`Ca=~C4rq*M4<5m6Z1q?zxTISPR2 z@nu3_qE(RPIgP8ab%jzI88lu-vd#?B72p&L3kx)-p2Np(zk}!XwxY^qMBV~dgB*bE zOzBHC=vJZwp-BM<6_7(P$>HdMLErSv#RzI?D#F?gCqbylH70eEU0 z5=}E6vEgYKkafB=))LVuR7#!}0enpi4i{4=B7}fZ20Ojava$rv=NglfX!CbHr5vsfwja(vBk*L8Q`Bw!?y z;e^IVf)dozkDum%ElLZ7V5)NgiKKQGsbO=cixG-KCds471#W4=#FiXLu#6P}{TzZG zv%gM_o;-jF(8?svEi-E*RUH@sv1`yo+F1(^tf|PPDe2gN51L71S@WJCBcW=D!Qz9* zCo@*05kxztr44mZNZC-X9_C3;JC7fK{`1)PnVb3Chp%9FSJP?1VpcFyd%C?qYf_-K zB)2{C9I&1uS8O}uOxlYF3HR^E&ef=3AbOf|j44`ZnPJPC&^Q7bC3FIU!4iE0J3$#m z)CS=^-aC}Yk^P)7qXC9+?$H86kRttI13U7d=f~Q?#-KhUpU3h*md8 zz3VTjp7JzA*2dP!wFxgk7*uprq#*WkU91p1mt5m@gh!~}5DM72#r!~8gwb2l*6*U4y zgS3HaxJH;$oPF5~xbe`PoH*C8>C=l)xs-dNYM_A_$ch4GvM=i-zR7jaJ-iNL`5*od z_rLxZaLY+RJNwKRu=eSX6Px<$-sYj-e_YbR$*uQos*B`s`WEUfubbMoVdjA5HNE0QuFJHqI z`~I5e?0)grw2teKef;F}OLzX*qrZ0x$y2w!fcM|?b^vZ$`ocqkh~eG9^VY{s>mXvi z){B%x{ZQ3=()aSj`>JUU!Nb?y*ZdsIAADE3fnDSjp0-RFm2^=kg~^{?T4xtSf46)LxiQbkh7_I#S@Tpfcw z0vk?&ya8K-?s?} zFYgdTM21M?eR4&Sj!{|D?r$cyEv{c#VWU=@SvxwxapJ^;`E$?W^ygj9Q_emU9~5DE z6?1q$Eg_iQv;m_sVxA!*_@+b_8k&F)6{9=vWdBv4W^nifOUpxygr;wZ!XR3PMXd=t zx6(I;rO|*a>mYN3ijh{9fp2h)C2wVT6f;&3DW3=)M4mKbF+_#z-=(n&;Z5h8~yW82Qtsr-oGX9y<8P$Qa*DE%~PS|X$* zU}>Bsgn&{COb>KLa3!G=(SoXrSRU<)FqRZ0hyM}Y@DNPGQ?yJ=``e$=seZxDzh85vh({c=bnH1KWsW< z58U!4{9KL-S#lW@;0aXY2{UuwnyiSw9X(9PV0DFiU;Pt6BtPYJcKycN=s)X)T)(GF zRYBHHoLGR^qDFVNn8D%t!N+T$f|zJD*~Km7_n_45D78YODdfcGpeFVi?jtC$69q6b|h zvWsYHd^N__E96+bbqvZif*%vC!I&JQ1-`D5OO})W&ZRIt5x zK|mA%MQ{MG-P+iwc-5YOqb5=WoHw-FDU6SD_g!~0z2j1PY2(BVU2C*%L$ggjnK0PDhvt^8h~^Z2Jir2I zg%T1UO6D(m97k^aJj;b<`p&PTiV5hnMn01Q8OLO0@vsC}SK)qwsf9qbJ1o5V7g%`B zn~-t*pzGZCt3M0QlI(gE^FQ%(?0?G}AMm?>JBBxQYixyY2P&4%?D-42m-6VDtGQ+A zUr!rgo!K#;xa&^=c*>UNGT+?(khS?WkNq8PIPzKc4ZlIa^H<;aT|Rl&pYtCs`2}8Z z;j2ka`;_k<8s8IBv9*2S8P~nFwQJ+LUo1W(JUvI}gotzW@0j-62lxKb_x~ZGs-=Uu zSNse@>xZqbv!M_Ir3-YMT~uTUA=EIZ$`PC;6c(X8xmJXyJ&(;(+iEu^X{bVl(G5@< zEftf&A*5-uY1@eop-L&5%_hxelYDlL{k!j=aoY`S-gPl9im-W(6SaSOs3wG{%VVGX zO#bW>pXQpPNzWfO^`1eb0d=NubDZHXww?Ruxhj&}$j6*AAnC0v`puFCjQ=Rpa1GDe+}qBii_) z*7Sz@@ZyEVhT0+$6$L$?6EtK}(K2&nd-q~y&ck#UDD%Udck%g@qht6lFhm`VumzLxm=GKj?{K-r+Z4RPxdC2eZmYBnXL=DNFq^ zQniTN(@chAl4i=>1)K3!FdPjS9j3=xIYm?A^O3K<#%G`g%Pf?)XgD|zCso#eJ4BBpX4 zkD%Qi01Z0;03ZNKL_t*TQLP?g|K5XazwEJSefsS?NmF#Rla)QUGQE8l zG-Z|%wWpZ7>`D$Cxt8fI3vl@E8md^-g1SgjdYcv?iXZazYtQ|xnY!EK@wcu#WO*u< z{{F8Re&L@0*#6dcB8@q#HeYPMJ@z*{IrDeEf7h$HW$9lzU4Zqc?)o6(st#0n!G%Bl zkhVEBE#Cd?f8{s7@G?Gs@S^}M=ZAUs*M5mVzxB6x$)#`NMHj!GMBmqScvSW8v1*v! zS=4<`{KR_y9txhG6C%#hIr?`>s}I5g@3IL;KUl-t$s}ddOMdcUtLv=ED<}&RJWE=m zFTaB37rqQxg-aXg(u0mz?8VINd<-He@?t=&I#}ybNrg5Bs7RV~NOgMnkt9jjaml0E zf7=}_?Y@Jli>^R6nuM}KQRDGj@7S{ad^TTkCExn$4O~??!gzvTI>yRd-pTB9YHN=6 zkUr_LEWYF2EWPm!%-sGl*t7s)4UuU*X2p3B0vSL`Nze)*LLC7Opky7;>MT;pH31;Q zS`R8Fc!-D@VsN4XA_F`@XoLs|Y1SZHJ%qAGsuB`uOr0^>I=-vZVM@W#)fJMch0qEW zIh>zBFf^hr2M!!#PjV}+C~0q+BO8orkF2=CUEjEy#eIiq$Ey@=4b3_ag110XQI;9r zI($_jLxp3lZ9<`>Mo7r33K2yd3zn*KOvO#QkMHmYSNt?VMa0bn+))nSx*H)Ri3AzN z6iAFw*x+e|7`JA1T4noRAtFxW^uxz;wirK89TY^$*-jd9#@UgRK!Wn z;vJtSNJXLr4$JUJOf|`AH)8zMETb%EEMRo70hMKWrBAbE7&JOmGU4cA#>(B2x$~zO z?>j;?Jx>}58uPQD6{91ENTecY�`3f&?T=_v(0=$}(rBxvQDM>X=kWyi_PcJx6eO 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 IZ}RVd03%F@hyVZp diff --git a/docs/docs/development/boards-shields-keymaps.md b/docs/docs/development/boards-shields-keymaps.md index 4444537e3ae3..4644ee793f24 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 2e468fe0b572..62d71f0328ef 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 000000000000..0a00d70141f2 --- /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 89f057a83a7b..f118c0baf5c9 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 497557492822..8ca382c552e0 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 083/179] 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 92df03c3cb8a..c266cf60663b 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 084/179] 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 c266cf60663b..6305b7412c10 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 085/179] 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 000000000000..bbaef0ff2140 --- /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 000000000000..35f8b2d1eff6 --- /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 000000000000..eb838b24953d --- /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 000000000000..eb838b24953d --- /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 000000000000..d456100ab747 --- /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 000000000000..08e2ac9ea8e2 --- /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 000000000000..376bcf26c650 --- /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 000000000000..47d49a4c9274 --- /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 000000000000..1fa61286da75 --- /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 000000000000..7f281db956f2 --- /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 086/179] 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 6ca433214eb1..bfcd5def4da5 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 bf1bd1221daf..8ce5ffdee9a9 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 087/179] 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 3dcc710cd7b1..ac9c5341029f 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 088/179] 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 ac9c5341029f..04424b48b094 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 089/179] 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 69ee0fc4d9a7..c4cad7c0d332 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 090/179] 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 a0c56501faa5..b0f05aedb27d 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 091/179] 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 a535a4ef145a..96f729b9631c 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 092/179] 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 f0450b195b76..d291ca8b403c 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 093/179] 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 6e79a858d201..1d7ed9ecd7f1 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 f3b0da3d2c94..cac83fd3b6c6 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 75b9fb5af432..c36487970801 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 4f138b0be34c..698bf9ddbbcd 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 7476bcba145d..08dc59d16d96 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 eefd76bf6d94..b3b3420eb71b 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 094/179] 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 1b0ca9405b84..cffe23b06273 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 7c7d9efef493..b40af365ac8e 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 08dc59d16d96..9e29c6f77d8b 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 b3b3420eb71b..00ba5b2f3c46 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 095/179] 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 65cc1178c71d..a85c58a64cf2 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 096/179] 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 f54dc013e1f0..439c90aadd21 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 097/179] 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 646a5db751bc..7fa98af2783f 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 098/179] 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 c4cad7c0d332..93a980c28384 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 099/179] 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 93a980c28384..fbc859e502f4 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 100/179] 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 25d4466eaf97..18614a4e1904 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 101/179] 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 e4cfaeab5d4c..a2affbf21474 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 f09006ed7163..a9e4d642e0ed 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 000000000000..fdf2b15cf258 --- /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 000000000000..24a8b033a558 --- /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 000000000000..942d5ae4cf74 --- /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 000000000000..fdf2b15cf258 --- /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 000000000000..fb5587b1c126 --- /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 000000000000..677a253432d0 --- /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 000000000000..fdf2b15cf258 --- /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 000000000000..1df24b0c26cd --- /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 000000000000..b48332ffe224 --- /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 000000000000..fdf2b15cf258 --- /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 000000000000..e35848cdc527 --- /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 000000000000..77398582f80b --- /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 000000000000..fdf2b15cf258 --- /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 000000000000..d72f20d61e0b --- /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 000000000000..504318f75042 --- /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 000000000000..fdf2b15cf258 --- /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 000000000000..a330a93c147c --- /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 000000000000..7061eee772f4 --- /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 793e350dea53..1dfb8e5da3fc 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 102/179] 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 eb1e552a40a7..4e6761476d7f 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 46b40dee46aa..02039b8d5645 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 103/179] 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 068fdbb439d7..94438f34df2f 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 104/179] 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 dbf3f6e21b52..50de9526ef26 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 105/179] 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 b0f05aedb27d..ffa36ca36e98 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 106/179] 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 a88cc5ca06fd..33ce12567e71 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 4e6761476d7f..42e270372fb8 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 02039b8d5645..e9b36f2eba42 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 7842925e3906..c45a6243b604 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 7dfd51e8356c..9a2189d1e2f4 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 21a4efb86123..d493c582b32b 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 a309a787f5ef..3dc336134412 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 04f32faac01d..c03433c56baf 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 bd69bbb18017..ad0c2b1a8fbb 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 c171e2bb8922..ba92f893ac3d 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 e18414be847b..39b62fde05a3 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 596757636a24..82fe2105ea19 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 9160555ca31a..acf542d74b99 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 1e93762cf723..e507f2c62f3f 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 64eb32b8a90b..4664debf17a5 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 300fb4ebfe68..d8d468edb948 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 0da8a18d6cf2..cdb57b6bfa05 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 a4295d1e10f4..36306757e2c5 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 a5e6fbe86ae7..97cecce15e3d 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 57ae5ef66e0a..56eef359588f 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 7bf40b8bf46c..28f8c811d31f 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 9f4915649aec..07e71826c902 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 a1683f3a2f3e..d5e8cbebe31f 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 a699a81394e2..22c5f6479f1a 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 2c1d6c71088b..ff57c07c9aaf 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 24a8e5cc747b..fa02421aad54 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 69dac3f230fb..1c1c5604cfbf 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 5a1eeb13b6d9..29de8d7e1ff6 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 bbaef0ff2140..3c8d5f589315 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 51fbc28c5c8c..4a2b897368b5 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 013a0a7c9899..e3655a9e3791 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 897184f66c78..70029f0b8162 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 76bfcbd441a0..77648afdf5dd 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 c07533588c08..32be2a278f4e 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 8a70cef2413d..3fb4e8f63a9b 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 0fe7212d3db3..6b58c30122fc 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 000000000000..3ad41dac3e9b --- /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 000000000000..94bf7f397935 --- /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 847a47abc2b3..5ef32d204171 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 71b243d34ed7..3480101d8acd 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 a4a7be58df78..8dc0061c6a9f 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 8bbe1a7ef292..135770a64462 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 baf48f584405..d0c33f2071fa 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 a2c6a2871dc4..f3d06d65a39a 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 107/179] 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 6e3d9e79f94d..ff2c6c696305 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 ee7b13f61a6b..1e0576c5f7ab 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 71fcad29d2d9..de65fd49f793 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 3842a31f55b8..7a9612b302d7 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 46fdde3ce41c..5b215b93a845 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 3bad290159df..6d78cb3e58f2 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 1728a7f42fcf..572652ff8f22 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 e586316f4f43..b00d0fbafbf5 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 8f54f3123096..e7c6e95f2a99 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 dd5f4267b387..184061ac381e 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 108/179] 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 5a1e238539e4..029908c0141c 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 109/179] 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 b10aa20b5f77..4d2e4603dfb3 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 110/179] 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 0985a605542a..b42f3f3d6375 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 6e62e1bbfe78..167460c66948 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 bbfb770e3a97..7e4f673264a0 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 d7f349d97b55..c43bc671a8b2 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 fe90493142b4..22186a1da93c 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 add7efa04004..c47126abcaaf 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 e24b502867da..77b431b65b4c 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 587bc7aa4502..3f6670da725f 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 9423e1af92a3..b967e5e26719 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 439c90aadd21..d250cb015056 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 a85c58a64cf2..e384e504fbea 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 0f3eda7bf277..da06d2744c4e 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 e1bddbadc9b5..817100321529 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 7b8dd676bbdf..e8f7dcc87a11 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 e6c073cc8aa5..6dcd733cdbe7 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 93c7691aa33a..2a109fe8ef18 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 4104cc3a8655..fc3b25e03e2d 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 cfe4342cf8a9..50249146d72f 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 6caa637034a9..aa65692932d7 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 aec58878562e..2e8c6f6e7147 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 a832860e70b0..e6794e7bcee8 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 aed22c4276da..a45595ff44d6 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 d291ca8b403c..12f15ad4d17e 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 052364456cb4..0afdcc2bf35e 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 84ca3273b19c..e68d0f92de92 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 7fa98af2783f..e8cb37890aba 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 6e158b038f14..8414a012a30a 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 9a1dabacdbc2..d208fe497ddd 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 21fdef10c9b0..0211f818aadd 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 cb246814bf68..74a7163b9861 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 cd84da88883c..e7ff3232b516 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 c06a13b7a4c9..0fc62b2f4e9b 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 7936ca166085..8e1538281ff5 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 111/179] 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 59a38fbf7e92..6d7f46d1e9f1 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 ef5b55213248..129530d4a5a3 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 78cea3141f8e..0817b6e0a74c 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 f6c9037e68dc..ec6da15934b8 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 320167027c7b..3d3858449c5f 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 1df14e6baa55..feafbd0a1321 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 026565cd00fb..01908c0c152a 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 9fa4531bd0dc..6e9faa668183 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 35584d9c8bbc..e0cf47f987d8 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 ff2c6c696305..5fdd3a7ec863 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 1e0576c5f7ab..18a9348d8ee4 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 de65fd49f793..705021486857 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 4ccce69f4e9f..57862b0d6f42 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 36e98affd1f7..9afe2d5b4cac 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 d81c39e24d83..3e16ceed145f 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 60104a69aed0..3f230812f4bf 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 09e5525ec570..bc35d0023441 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 2fe641fa7c3d..5f26ebc3aab2 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 1cb9c5f77ec0..04750df54cb9 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 555e1f4a3ed2..804a21d91232 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 fcb24f6fbbd8..71df73440e77 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 b422750c60e4..287679e16917 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 78d00bb7dec7..66c1264a160f 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 8a184e4aa68e..307482e7cd42 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 1df2743641b1..0a57f16fa4b5 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 b87e87ee6d43..ce22da4d71bf 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 3779351a87ea..a11c40398669 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 66f09271437f..ed8ee813c58d 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 e3b41355eb85..07caeaa76d5e 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 0592299e2a9c..fbe96cc237a3 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 5acb26eb08bf..aa9942ea366a 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 998fa2d47414..6a3481f3e0ea 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 6a003d8dd7d3..5a8c625e0790 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 4d3bb7ae8f13..620e19b4b882 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 38a6a8e526ec..198fe5a16883 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 233ec62fc95c..c3a3ed30d034 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 33183546efca..405d1365b7a9 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 504c2c9c8581..3f772cdb1d9f 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 5323e943ac02..3e4e9238cfef 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 f579bc398c03..9398bcbb7131 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 c75a879f702d..6ea59f606499 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 b40158c3af3c..5f4ac5d235b0 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 3d1a36955122..76253e208d65 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 01104d1cd7d1..ab42adaa13e6 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 38777ec849c7..fa6e7cfe6931 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 b3e2323b9a90..5f8cd7d76972 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 072408605cf7..443d9b1b4894 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 735f5751d0aa..cbdb17723cd1 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 786d9c731a67..9e92a83664cb 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 029908c0141c..41fe2e15dc41 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 159c6fb25f17..f633ddb728b6 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 3f66224126ec..540f7c3eab0b 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 617d5aad8ecd..529e578234fa 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 a1eaaf86195a..fe2155b7fd0d 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 79b805b6bc06..71cf23225f3f 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 7a9612b302d7..8ee5bb5c30ba 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 5db8aac2b26d..690ac97175e9 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 a9e4d642e0ed..6ea2fe97c7b2 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 215da41d69ad..2765db9f3ca4 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 ad29cb0a79c9..033f498b8751 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 cd2a5dcd7f38..cbbdd0d91aca 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 5b215b93a845..c86d732aab64 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 effbe4ac887d..e5ba346e5364 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 46e49fcc57a0..c2bd0ffcb984 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 1e7eb2b08c10..613ecbad7e61 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 366abd8fab35..7aab8ee32c0a 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 47b11fa44256..0b983c847096 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 3459cd22a569..0af07f8146d8 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 c4a34a940881..ed6eedae9d79 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 267b81ab8722..2293608694c0 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 6d78cb3e58f2..ddb4aeabfe7f 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 cce39d5ddfa1..c05b83eab94f 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 a682c6fe2aac..73a700eda5ff 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 2ba057473ef5..eeb2242db6bb 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 4d2e4603dfb3..aee90d5d8a50 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 e434ae170bcd..2e2373302d33 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 572652ff8f22..9ba02a5ce4c8 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 3fb4e8f63a9b..52fa3c691ee4 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 6b58c30122fc..7c3870a8de59 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 3480101d8acd..e35f890ac6cf 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 8dc0061c6a9f..c3ddd07cf4de 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 135770a64462..1c6da4b90347 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 d0c33f2071fa..fdfe4d9cb5a0 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 f3d06d65a39a..9ae8b540e9f6 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 337600106080..9c824f44d713 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 471432a8b01a..0f4a5547cc22 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 2c27ce741088..95be678e4643 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 435fb24de750..508ee971d69a 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 c4887f73ddda..dccbc7e097e6 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 7f9014da9a06..34bc39dd2abe 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 c9ef6aa7e647..a134f34186d9 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 bd6234c92a46..79326ccc6d4c 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 3dfea25fbf27..f44d90dda9cd 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 bb40584e53e1..7b9be89f2d5d 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 94ade9472438..bec1e6e7ebda 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 1d70b2ffa348..3f4c967d0688 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 b3555569f0d5..ae1f05037ac4 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 3d9830bf797c..f16f54d292e5 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 aab09cecbbc7..654f683fa68f 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 b66a910d3d2e..2a6b5d39da20 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 e233b0b8ed63..3a11101d54f6 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 3dd3e874a562..930714b092a4 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 b00d0fbafbf5..0f06a39a339e 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 c7cf28810253..f9db8b1ced69 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 ae604a7b9ee5..8ea670577712 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 e7c6e95f2a99..47256608fd78 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 18614a4e1904..47c3658e9156 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 184061ac381e..9873de4f1cdd 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 e94a59aece85..82cf7e015d0c 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 aa690ab25ba6..07d3ee3f9275 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 5da5401d682d..cc20c72fd638 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 3f3763ae04a4..eb5398c42d6c 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 146e7bb7ed94..cf04ef46c8fb 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 4b90cf961235..f46c70a0a922 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 bcabf377ca76..00a5942ecb8b 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 af98613e54f6..e65bb296c9c5 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 112/179] refactor: Remove deprecated Kconfig override. --- app/Kconfig | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 358d5d144f06..cf2cc6b3c4f2 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 113/179] 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 e0cf47f987d8..b452a9d2c661 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 5fdd3a7ec863..3ca300a382b6 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 18a9348d8ee4..586e0d95c799 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 705021486857..d2121273724a 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 529e578234fa..971816f2cd33 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 aee90d5d8a50..a7037d0cfd82 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 9c824f44d713..dbd1a3e6c0e7 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 0f06a39a339e..994835922780 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 82cf7e015d0c..5b952dfcd381 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 07d3ee3f9275..6b767baa7c1f 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 cc20c72fd638..fa4b77185faa 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 114/179] 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 50de9526ef26..55055e9a1e76 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 934dc4a02ea0..267035c9fb11 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 6d7f46d1e9f1..524aa17e5bf9 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 129530d4a5a3..6362b39250c0 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 0817b6e0a74c..2817827493b6 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 ec6da15934b8..94e38481dd19 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 f43781516e0e..0756ed386b4b 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 43c7c24e5d33..54b30590e1cc 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 049ca82eca87..000000000000 --- 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 feafbd0a1321..000000000000 --- 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 01908c0c152a..000000000000 --- 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 b452a9d2c661..9909a4cfcfa0 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 3ca300a382b6..812a899d89c1 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 bc35d0023441..655af3dbd74d 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 5f26ebc3aab2..7091f73e7399 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 04750df54cb9..82c215723296 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 804a21d91232..f9384a667e54 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 75e19c49745e..000000000000 --- 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 43fa751103eb..605c969df591 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 a8904360f921..28b7541b8199 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 c4c6f80c5e89..d9e07b797e8d 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 1195b94320e1..a47cd5056430 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 33526008ee1c..eebe41e743b7 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 41fe2e15dc41..46af56fbd843 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 971816f2cd33..1511e755d4f0 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 71cf23225f3f..6d44b5f5e9fc 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 8ee5bb5c30ba..4c9fd71186de 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 6ea2fe97c7b2..30350ef24cee 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 c86d732aab64..e84f1fc89bb1 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 e5ba346e5364..d540abd93af6 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 ddb4aeabfe7f..fc685124860f 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 52fa3c691ee4..e34f8a533cc9 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 654f683fa68f..e35714da10b6 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 994835922780..c4e304d4b312 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 f9db8b1ced69..b07133203ca9 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 8ea670577712..3fd6b116608f 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 47c3658e9156..0ed2087a49c7 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 9873de4f1cdd..efae2bd975be 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 5b952dfcd381..ac073c598695 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 fa4b77185faa..f7b0d587b268 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 e65bb296c9c5..6d026f2b0e5c 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 115/179] 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 21a7fd5a90b4..5b69e18043d5 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 6305b7412c10..f472f755c9b5 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 c6566feb932b..4b10a28b12c2 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 38c61eeaf564..e8a9d2209e46 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 116/179] 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 000000000000..c520a3b73392 --- /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 000000000000..d89e53f4a8e5 --- /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 000000000000..21c1893d91f4 --- /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 000000000000..b14e0d04d478 --- /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 000000000000..21c1893d91f4 --- /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 000000000000..d89e53f4a8e5 --- /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 000000000000..c8973f5c2941 --- /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 000000000000..9b9c1450d327 --- /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 000000000000..a6e91afd703a --- /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 000000000000..77d8d664dad1 --- /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 000000000000..26a2ca640255 --- /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 000000000000..21c1893d91f4 --- /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 000000000000..b14e0d04d478 --- /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 000000000000..f0db8ed14dc5 --- /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 000000000000..efc8e080f15d --- /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 000000000000..21c1893d91f4 --- /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 000000000000..d89e53f4a8e5 --- /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 000000000000..21c1893d91f4 --- /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 000000000000..b14e0d04d478 --- /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 000000000000..4ce594085b54 --- /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 117/179] 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 cf2cc6b3c4f2..01817107dc57 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 118/179] 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 51546006316b..216651a1a26c 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 119/179] 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 01817107dc57..824d2700619e 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 120/179] 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 327200a8f57d..4af9cbdfebe7 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 121/179] 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 0ed2087a49c7..048b58b4cb8f 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 122/179] 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 000000000000..18b90f21ffc2 --- /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 29bf0f8d0c17..c636ca316721 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 b8e4e8055e6f..99d51a94334f 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 2d8f0a814161..4dbdaef529dc 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 42e270372fb8..305ce72e0e41 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 097872f5cabe..52439e4f3ca7 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 e9b36f2eba42..0fd0fd6cb0ad 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 000000000000..4a8ff82c0d4e --- /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 49d9d6beb330..3fff0835b90a 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 d5fd8958ca96..c755633e4cf8 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 000000000000..aced76b4bc3e --- /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 bb058da879ae..c982f88eef8c 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 9fac3a30bfda..48936a04704c 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 000000000000..18b90f21ffc2 --- /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 6c9d081c75be..ad5ef27805fe 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 1ff025ec7381..a837b7d2875a 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 206e51c2f176..667cf71aca2f 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 000000000000..a54c25988384 --- /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 000000000000..a53856901eab --- /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 82951b5f3124..48186ac9c2f2 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 3f6a447d77a2..b51929b0c8f9 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 fdfba5070341..656873a0bb2a 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 efe924f29f5c..335a2d75b12e 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 a0f7417067ae..9fb68562fe2a 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 7f833ff555f8..9ade364d4c3d 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 112e0344ae4a..4af1ff86a7c3 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 06758784e589..43ba40e2dc3f 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 000000000000..8751bc4bd58d --- /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 85c5cccdc080..c1330319ea29 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 000000000000..a53856901eab --- /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 e324cccc1dc1..a8f25c37d066 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 e32886d05969..1adb9217c8a0 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 5a74582a40e9..172859aecb15 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 5a74582a40e9..172859aecb15 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 e5f84063fc5c..172859aecb15 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 000000000000..172859aecb15 --- /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 000000000000..172859aecb15 --- /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 87c8da215f8d..172859aecb15 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 000000000000..172859aecb15 --- /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 61950d18d524..172859aecb15 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 da7deed12208..172859aecb15 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 000000000000..172859aecb15 --- /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 2864fd603b91..172859aecb15 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 000000000000..172859aecb15 --- /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 b774b4ba712e..172859aecb15 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 b1e7fbb50fbc..172859aecb15 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 1cff5f7794d4..172859aecb15 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 80d0c8984e21..172859aecb15 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 80d0c8984e21..172859aecb15 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 69bfffa08113..172859aecb15 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 000000000000..172859aecb15 --- /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 360e70988733..172859aecb15 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 000000000000..172859aecb15 --- /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 d7cdcff75dfc..89ba4f9d6ed8 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 000000000000..89ba4f9d6ed8 --- /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 0a08c7707847..ece699e26d9c 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 000000000000..ece699e26d9c --- /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 9d9ab734c0d7..27d76b0767b7 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 9f6fad1c90dc..fc2667f3bb0f 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 3a0ad4624ca8..c9a0e78840ad 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 3a0ad4624ca8..0068b5b2c9d8 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 9d9ab734c0d7..27d76b0767b7 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 7b12c252f3e0..5074d0f91764 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 9d9ab734c0d7..9a4f3170c1da 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 9d9ab734c0d7..9a4f3170c1da 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 d67e46f9c50d..172859aecb15 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 000000000000..172859aecb15 --- /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 b52faac61ce3..172859aecb15 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 000000000000..172859aecb15 --- /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 dc686af8ede1..172859aecb15 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 000000000000..172859aecb15 --- /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 f869db5db1d9..15c5801ece3c 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 f869db5db1d9..15c5801ece3c 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 0087208cf17d..172859aecb15 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 0087208cf17d..172859aecb15 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 eb838b24953d..4a6b717dfe8e 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 eb838b24953d..ed03ed0d3925 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 0087208cf17d..172859aecb15 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 0087208cf17d..172859aecb15 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 fe7fbf18b7e3..62f201408ae8 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 000000000000..62f201408ae8 --- /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 d8a647e9dd91..08379e3098d5 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 000000000000..08379e3098d5 --- /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 dd7e34c4a97e..08379e3098d5 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 dd7e34c4a97e..08379e3098d5 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 c2dab5a6eeea..64d16572be63 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 e53b149a9b35..b84beb931128 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 252329b47cc1..64d16572be63 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 020701fdadf1..c70ffffb6893 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 123/179] 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 000000000000..420dd5c3627f --- /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 000000000000..f1a3e2416fef --- /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 7b445a290123..a52f3302c8b6 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 124/179] 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 94e38481dd19..6555e5c1d9bf 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 125/179] 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 000000000000..b60ad27c0b1d --- /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 126/179] 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 b60ad27c0b1d..693d93dc8281 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 127/179] 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 27d76b0767b7..9667edf9b948 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 fc2667f3bb0f..21383c701de0 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 c9a0e78840ad..0068b5b2c9d8 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 27d76b0767b7..9667edf9b948 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 5074d0f91764..09b57d1693d6 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 9a4f3170c1da..0cdb933a5e4d 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 9a4f3170c1da..0cdb933a5e4d 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 128/179] 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 9667edf9b948..b8b07258399e 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 21383c701de0..d9cc083572da 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 0068b5b2c9d8..2a1b757d4340 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 0068b5b2c9d8..2a1b757d4340 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 9667edf9b948..b8b07258399e 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 09b57d1693d6..1cd19db9c382 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 0cdb933a5e4d..b8b07258399e 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 0cdb933a5e4d..b8b07258399e 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 129/179] 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 f10d18af4a11..12b5e2b33fec 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 130/179] 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 89ba4f9d6ed8..3e2241a2a109 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 89ba4f9d6ed8..3e2241a2a109 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 ece699e26d9c..54ab9feca7dd 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 ece699e26d9c..54ab9feca7dd 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 172859aecb15..741237e1c623 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 172859aecb15..741237e1c623 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 15c5801ece3c..28e9ce69c327 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 15c5801ece3c..28e9ce69c327 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 4a6b717dfe8e..5b9ce4a87621 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 ed03ed0d3925..9e168625086a 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 172859aecb15..f1330669641e 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 172859aecb15..f1330669641e 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 62f201408ae8..54046bf548e2 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 62f201408ae8..54046bf548e2 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 08379e3098d5..ad66feac7f66 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 08379e3098d5..ad66feac7f66 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 08379e3098d5..ad66feac7f66 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 08379e3098d5..ad66feac7f66 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 c70ffffb6893..c1dc68d31771 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 131/179] 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 2293608694c0..6697b9b1bbb1 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 132/179] 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 7c3870a8de59..58de09ae4031 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 133/179] 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 000000000000..b1342af4d971 --- /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 000000000000..5ee7c1036960 --- /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 000000000000..5c1c22645467 --- /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 000000000000..b1342af4d971 --- /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 000000000000..d71c3968318e --- /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 000000000000..6d88a9ea1cbc --- /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 134/179] 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 824d2700619e..794b6762ecd1 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 135/179] 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 794b6762ecd1..75a37f6386d0 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 136/179] feat(core): Process log every 100ms --- app/Kconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 75a37f6386d0..431a1bb1fbe6 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 137/179] 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 413678a7e3a1..ffd3e3f1d291 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 b07133203ca9..62d0cf0756e0 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 47256608fd78..6c616d5e8240 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 138/179] 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 c45a6243b604..492239c8a57b 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 139/179] 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 12541ed868c3..d881e6b0b832 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 140/179] 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 4644ee793f24..77d8361a8df6 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 141/179] 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 71df73440e77..df18385f529d 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 8c6c28b38482..9e54695fc190 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 000000000000..48deee5c6c89 --- /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 ed6eedae9d79..72e33ea46b0b 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 2e2373302d33..90c89c15e737 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 c4e304d4b312..825246fa95fc 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 142/179] 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 825246fa95fc..1f55ad03d30e 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 efae2bd975be..1b92147f8ca8 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 143/179] 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 aced76b4bc3e..ace80f10aaea 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 c982f88eef8c..fdc65d6bca8b 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 144/179] 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 3da50b57e5d2..a647e88363fd 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 431a1bb1fbe6..ccc5f42d7f3c 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 000000000000..17850eae2ff8 --- /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 d3f084b0403a..ed1b4cd0001c 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 1fc60fcf24e7..000000000000 --- 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 000000000000..0da3b4dbfea4 --- /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 000000000000..d20777b8d98f --- /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 df18385f529d..380fc76f9ba7 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 000000000000..e12278bba1a6 --- /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 000000000000..bd31170eda03 --- /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 000000000000..2d58218d8ad8 --- /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 72e33ea46b0b..000000000000 --- 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 000000000000..a82267a55e90 --- /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 1f55ad03d30e..909fd20de878 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 000000000000..bd8a50bc5bc5 --- /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 225ee6f39c4c..29906c909dee 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 a52f3302c8b6..21585747a5fb 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 145/179] 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 bd8a50bc5bc5..02e56924bad2 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 146/179] 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 cdb57b6bfa05..53b441cba085 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 6304f5d519bf..52df937834c4 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 000000000000..7a0b5b6c54fd --- /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 000000000000..4a50000629b1 --- /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 000000000000..fff2e051a18c --- /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 000000000000..bf84c82cbe14 --- /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 000000000000..d00b9e4afe02 --- /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 000000000000..ee69730c2e27 --- /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 147/179] 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 1dfb8e5da3fc..f267e4a4ceb9 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 148/179] 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 9c3543dd287c..9e523a36c581 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 3d89ed7b3211..b1e0602d54f0 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 f472f755c9b5..82b156e106c4 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 8c2cfbcfced5..000000000000 --- 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 d048a03e0ab4..91e65e6d31e1 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 4b10a28b12c2..100928368e31 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 000000000000..a6583d4f71b8 --- /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 02adf09cd1f8..7687fc6ee268 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 2730549a2349..aea29cf0097e 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 806328d92345..2a1f0b48af9e 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 237f5c450dcf..53514d644990 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 4dbdaef529dc..65092dc5a05f 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 52439e4f3ca7..980c990020f6 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 2793c6fac4e3..b6fdcdf26ae3 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 49433df8f5bb..dce230ae79f1 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 bdb188df051a..edfec32e93ea 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 c1330319ea29..a2e56df3e8ef 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 679e1464eeae..861f1d2da9d7 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 32db57e9919e..96bebb336973 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 c43bc671a8b2..f0e60e7d1096 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 1e91fdcf5c70..54893aedfe11 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 8956ca9831b9..cb851c35cac1 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 0fafe8a18c7d..080a23929192 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 cba93d035e92..c72e3ee1b81f 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 34cbd34ea3d8..6778588bf137 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 279431006d3f..ccad150c7761 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 e81afcf8da16..a9c1c287f197 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 d250cb015056..74ecc4071e94 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 3f830f079e91..f53c6b5bb873 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 e507f2c62f3f..55ee6c87d307 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 e2b708ca6c37..2d3f5166d5e2 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 8594c1171f34..62484728ff81 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 72fe2251d79d..104734389bbf 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 35bd5895efc7..c8f69a04a539 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 4545756085af..bbaec636080a 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 82327c329af6..80678fe60925 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 5b0c76234540..2a7ac8057a32 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 4af9cbdfebe7..0c48c1285f73 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 972884dbe440..83331d1097d0 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 24099f61f830..0e976f86b338 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 34c0298ed6fa..2b1eb3910b1d 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 5dfaa46b74ad..f0727dd4e684 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 4664debf17a5..775bb56a960b 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 6f43393d52ab..bb862b8d9ea7 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 53b441cba085..82f48b4c4fea 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 c52ab05abf41..1e61cc6bb743 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 36306757e2c5..d5bfab3d79fe 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 35e049940557..a807843f08fa 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 4efa10699ffe..1a296a8c6b45 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 56eef359588f..b6bb37d852ed 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 1df0bf38f0eb..e24d75e70d49 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 50249146d72f..fae463c92a8c 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 9755ae0b3ea6..a51659dfb12f 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 28f8c811d31f..8c0b042e2cbd 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 b8d47b2a0eb7..e3fabb3e8544 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 2e8c6f6e7147..ccdff9f7a710 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 c66f2aeffbc2..b7fead608bda 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 d380a599746b..1c212cd4544c 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 23c796eae80a..c02aad75b64c 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 13f2c2fe248a..baf1eb10315f 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 0b4ac21f848f..e3dffa3446ea 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 ec4665a3fec3..fe0a6f0760f2 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 99f2aaff21e2..e5ca437263a1 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 53e8c8c121e2..6fae463f4247 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 098c9f02ef2e..76ee5ba76739 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 9e51c2bc00bb..28e46a56c6cb 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 411d3658a172..c9cb7d43de4e 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 8e42d55508df..bf97d34b761c 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 4825a39f7854..9c0705a6c334 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 a45595ff44d6..c88f703beab1 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 fa02421aad54..c4a67e65d20c 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 0b7f32e592bb..77070db9f5cf 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 db44eb690aa8..cc4c52553556 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 90fd66d1fa58..b5b8a8413a3c 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 4243f5189e60..dc71a5cf29b2 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 1c1c5604cfbf..afa710ffa902 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 29de8d7e1ff6..03078cd66721 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 864321cc1563..822342785693 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 343304003084..c1d34ffda175 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 3c8d5f589315..221bf90af29c 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 1fa61286da75..10a195ff08c7 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 7f281db956f2..eaebff36da29 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 4a2b897368b5..ac07c935a91b 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 136e6927f47b..385d2022fa47 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 3dc954c33a9f..1ff5ed5eaeb5 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 3811423eeee9..81ddca404dc9 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 88a53a2f0e01..14063d3e46ae 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 4b55bb8d1837..905605e903fc 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 f301ab999bb7..9f76e7eb7065 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 087ce251c35b..12709fde0b30 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 0df94a2b59e6..ca6e23c3183a 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 e8cb37890aba..11424dc8f25e 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 8414a012a30a..5710aeaf3926 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 04dc4c0de4e0..132793b39876 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 70029f0b8162..5a77ca11a14d 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 c21dcf07d92f..a156360e6ab1 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 d208fe497ddd..9583499c2fb2 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 7ab2632a2729..0e0fc7954c19 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 77648afdf5dd..c6024694badd 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 0211f818aadd..82639edc8f6f 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 12c036135888..4a60aad9cafb 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 2db84bcd5a3e..94952813edda 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 009476855ed7..e6f6757d49a6 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 8f01effc5117..82e1517dac97 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 d4a9ac7dd5bd..46fc7326584a 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 64b3939b470a..57603f3a14a3 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 c1c278827765..cd4ee2b651bb 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 8dacdc2afb2b..f3bfcd5fd5e8 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 9e9beac2a546..45da69faa493 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 e89d8b2422a7..929e2a29f735 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 1a914a7ff068..d094b5c42af0 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 66c1264a160f..3e307f854f18 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 e75d96956cc5..9ad2878823e4 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 46af56fbd843..41fe2e15dc41 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 5ef32d204171..4c056cf5e00f 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 d35c72770847..a02f6c64ffb4 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 a99c15d97f8a..325da627d2bb 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 aac330f9019a..337128226d35 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 995f27ee8961..8eb5e9ebd6b7 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 91bf52353dd0..87d21be19364 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 e3cbf43707a8..8b7b4196266d 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 c228c475b916..457378829e7e 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 3d36421383ee..ba547dc2e40c 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 0622dcd04740..0da394b59835 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 4e68105fb594..f9537344334f 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 68736d8fbcc9..c6202365b217 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 0f45792ddc6d..8d81f35b6d7a 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 ff0b749330e3..497cf1aa955d 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 2518bbc90ef4..cf7e79f7f221 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 4895636e2b10..0c55eb47db63 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 0c4a698ce052..248d6e75e001 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 3bacb886989e..5af94d45b3d6 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 8ac8316b18cd..88351bea6d63 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 7ca3d77dfbbd..4b658a73c40b 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 0c38721de340..78b8ebcb2832 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 040cdd3ee78b..38c8668ca5f9 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 11d033f40d9e..b5834e06d1e6 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 abb31b4b3a1a..a540353b0ce0 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 38575e9a2048..76bb2fa3787d 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 21baa447eba1..882f33aa6a89 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 cd7ff384bfcd..0fc0b848c3d4 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 b84aa6265b74..5d0fcbfb2e56 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 bdfaf9d3d9e7..fca60ba8ed16 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 c0fd1bd184b0..5d0af9ca1bf5 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 69c19676e773..6b1383523db7 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 8f90ffadb4ec..d895df02316b 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 706ca5406040..832ea7ef7d1c 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 11d033f40d9e..b5834e06d1e6 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 d1d2b756c325..7560a05a1834 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 94d9a923cc25..b915a6a9339a 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 6ddf87f895c3..a6ac1507c24a 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 930760553aba..9965c9b3773a 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 2698f0553ee6..6d016501b189 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 040cdd3ee78b..38c8668ca5f9 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 11d033f40d9e..b5834e06d1e6 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 abb31b4b3a1a..a540353b0ce0 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 38575e9a2048..76bb2fa3787d 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 21baa447eba1..882f33aa6a89 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 cd7ff384bfcd..0fc0b848c3d4 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 b84aa6265b74..5d0fcbfb2e56 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 bdfaf9d3d9e7..fca60ba8ed16 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 c0fd1bd184b0..5d0af9ca1bf5 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 69c19676e773..6b1383523db7 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 8f90ffadb4ec..d895df02316b 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 314b7334b86b..dc96ee8b094e 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 11d033f40d9e..b5834e06d1e6 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 d1d2b756c325..7560a05a1834 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 94d9a923cc25..b915a6a9339a 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 6ddf87f895c3..a6ac1507c24a 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 ee0d5e80a662..13a58c3e396e 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 040cdd3ee78b..38c8668ca5f9 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 11d033f40d9e..b5834e06d1e6 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 abb31b4b3a1a..a540353b0ce0 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 38575e9a2048..76bb2fa3787d 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 21baa447eba1..882f33aa6a89 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 cd7ff384bfcd..0fc0b848c3d4 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 b84aa6265b74..5d0fcbfb2e56 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 bdfaf9d3d9e7..fca60ba8ed16 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 c0fd1bd184b0..5d0af9ca1bf5 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 69c19676e773..6b1383523db7 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 8f90ffadb4ec..d895df02316b 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 adbd648eccce..b733e3a2a06d 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 11d033f40d9e..b5834e06d1e6 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 d1d2b756c325..7560a05a1834 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 94d9a923cc25..b915a6a9339a 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 6ddf87f895c3..a6ac1507c24a 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 930760553aba..9965c9b3773a 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 040cdd3ee78b..38c8668ca5f9 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 11d033f40d9e..b5834e06d1e6 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 abb31b4b3a1a..a540353b0ce0 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 38575e9a2048..76bb2fa3787d 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 21baa447eba1..882f33aa6a89 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 cd7ff384bfcd..0fc0b848c3d4 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 b84aa6265b74..5d0fcbfb2e56 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 bdfaf9d3d9e7..fca60ba8ed16 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 c0fd1bd184b0..5d0af9ca1bf5 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 69c19676e773..6b1383523db7 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 8f90ffadb4ec..d895df02316b 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 930760553aba..9965c9b3773a 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 0ddb7ab6bac0..c8e744ee7f17 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 f437989325b5..f4d034295a8c 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 3b14e416bb7a..0a4ad4ae414a 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 644caa262950..e25d4b187ff7 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 644caa262950..e25d4b187ff7 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 6a2391db66db..a281279259d8 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 2f3b943a70d0..e6ef4f490bec 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 c264a9aba44f..c5cde5b499b2 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 a075a4436141..b8ae76f1bc8f 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 6814d5421e52..2546712672eb 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 b814242514b5..dbb2df5c51ff 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 26af56570050..b01c625724b4 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 9df2c1527aa3..899303280356 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 5f9375fb8566..acd55e83a7e0 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 1b175d445e9a..7e1865a0e290 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 0e9a2d6a8cf1..e175d60ef7a0 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 3f49005af22e..f3df27cabd54 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 10d0dbf8ce93..8c4534f4f9b7 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 3d6494dd8e65..e82182c478be 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 d5f372f198d9..a36b85d2568d 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 b5249f7b755f..ed0e8ad1be97 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 96e4e8d96754..9311fdee55a6 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 2dde6d88c48f..62ae301df0f9 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 d0f26b2f7361..230e9566bf12 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 9febf08c5843..79567de9a625 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 e9b87f4215c2..e89faa93ff14 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 33115453f0ef..f52a6bec6b73 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 2d078ba5f8db..63aca99b2087 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 4470fb2160cd..18d09ebc0d9b 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 438880d5ef3c..4760026997ec 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 067f2379367c..2fb661a7f1e3 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 d58641bd8923..92fd1e0adca3 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 aac6725e5789..1daa6c4f3bca 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 66bb72d81459..1be65a5ba332 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 bdcccf3327f5..a90bb32ede58 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 d4c30fbf9c9a..f811f7e92a15 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 c5e1c8db6e52..5674c4eaa8b3 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 6813393e5d78..142b823659f9 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 f4c7a2d29a41..bcfc21d20d59 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 0fec2e40fea2..6691437e7384 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 8375c6f63920..942ecfc0374b 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 ec12a286ca42..2aa52c168ddd 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 f4ba2dfe1e4a..3cfab946ec47 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 fbc859e502f4..c7333cb36a92 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 7c933b032a36..95d47b9f0bc8 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 f90c74889e10..90f9cdcfaec5 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 4c3868ec45d6..c711dbc5b1c1 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 8ca382c552e0..4c2bdf3b7304 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 149/179] 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 7687fc6ee268..1375a6ae7093 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 ccc5f42d7f3c..25a99b551b3b 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 a67e9a51d753..76a204cc41a5 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 176951857e47..d1c82811d281 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 e75893d64699..d2d1c65cb8f8 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 50c273c764ba..1e2c192dd6f8 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 0e6743d3ef2f..ca060885f16c 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 bc271af3f739..e27940157b21 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 5d911ec6024c..732805ae1995 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 53514d644990..cdb8fcdd3fd0 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 18b90f21ffc2..15c48509202c 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 c636ca316721..f19526011a64 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 359e237dda5c..d57a6b7efe30 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 0f0a9c6e3411..24c0a8b5b0c3 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 bad1e7cdc7c4..e7cf1a48cff2 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 3858ba46715e..6e4900af53c3 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 8b2f0cb41bb2..0cfe184a0908 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 b42f3f3d6375..25ae269d306d 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 0e686fd98791..b24dee1e82bf 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 167460c66948..6c26756e35ad 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 33baa11072e4..ca82e33068b6 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 33ce12567e71..a161230c1fb3 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 f203c9f8b1cc..10be54cc6978 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 72d0b8f1bfbe..2b9eeb14bcd6 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 65092dc5a05f..9f3dd73a8197 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 980c990020f6..3cb7556f9be9 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 ec8dad6836e6..ba09e2dd43e6 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 779d3123a39f..2e30e3d048d7 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 e2730d211243..14be837d9eed 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 f95fce0ef13a..e8cc6a7a8845 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 ad96271ab3fb..70ee895d8ddb 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 c59cb902c35c..7cf43bcb9e62 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 55055e9a1e76..618a55914079 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 646d119c181f..71ec94117380 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 067c2fbe7a56..a872fa1fa014 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 6aafc613ca83..8c7746dbb8e4 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 7c5cd12f95da..ed6097ec6b9c 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 4a8ff82c0d4e..df43c407eecd 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 3fff0835b90a..f80070331558 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 db7cf3983054..dfca4f1b45b9 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 778f79eb6945..88db9ee861b8 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 39cf15405ab3..f3347df9c6e5 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 ace80f10aaea..9b0e198d3963 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 fdc65d6bca8b..651dd5555565 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 edfec32e93ea..3a35716321b9 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 0c9fbc79d8ae..ac6828a4bbe8 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 4a80b448ce3b..8dd165123585 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 ad3fefef3156..ada59dd9f2e5 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 b972451bb5e9..f1b569c05db9 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 18b90f21ffc2..15c48509202c 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 e29df2057a65..4ee0df7fc43d 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 ad5ef27805fe..0c0a38230543 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 ed2b35f4ebf8..b2fbcc819704 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 c7edeb8db6f2..c9cb652352ba 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 499010390cf9..b2927ff2507e 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 4e1679bae02e..50a049bb9260 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 dc22c40b566e..253e6b77d564 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 12b06621781f..233ddbad4607 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 244242a9360d..441de5cff7e9 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 751d592b9550..7d752ac6ee66 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 537aaed35b07..01e342c0df54 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 651edb94166c..76ece25f786e 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 887a31446c52..923efbbf256b 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 a54c25988384..22bc11d40134 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 a53856901eab..35a46e5ae52c 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 48186ac9c2f2..68331edc692b 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 656873a0bb2a..9977617c7683 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 9fb68562fe2a..300838ff1abc 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 9ade364d4c3d..86bcb5e57537 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 8751bc4bd58d..8a9e9fc21abd 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 fe15e1a9f9e2..28b7381fb034 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 913c1c137d16..d1304da05886 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 9723959537c0..5fdd2c21aee7 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 7e4f673264a0..651380572830 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 a930b90f264d..39f35db6b504 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 ffa7ffd648b3..1596077fc1dd 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 78ccbabd6fcf..f5089119c138 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 9a026adf0d80..1831194289c7 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 df63427f8946..b5a490eeab69 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 0763888513f6..0f5b7f96d848 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 94d12c17b630..c4fca8e1f31b 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 ed3317f1c738..3037ea3e14b1 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 a53856901eab..35a46e5ae52c 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 a8f25c37d066..b056f7113e1b 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 673e3b24c6a9..e703d7269af4 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 266f8443b456..11e62cf54c5e 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 5b588b45ffe1..6eb9e2a561ac 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 f0e60e7d1096..dfc352d79d36 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 2c1ed79d0e6d..f8a8f700348a 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 2c1ed79d0e6d..f8a8f700348a 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 70080286ece6..a2ddaea4eaf8 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 452786d19014..51671a803b45 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 5b9ca9a12fd8..58dd45d6e9bf 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 844d4332b61e..cab78898de82 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 53cd1986517c..2dc40dbe33ab 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 6058f29084a1..928f432c410d 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 4840227ccde0..28156f42e825 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 eda03ff90978..0f162a33ce59 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 0034317e39c1..d4aed65c2f8d 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 7e9ccf9ce5b2..7e41b04a4895 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 4750e43a8c58..5746abbe42ca 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 0ceb9127048b..c5547920658f 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 22186a1da93c..18a2085c3b72 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 3f034d955a39..9e9210536400 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 30bd35e2ca33..897c6b0bfdd1 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 cda55d0700c5..7f574cea67a6 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 1ca779f3ff1a..53ded4d779c0 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 2301af94f1a3..69ecef8da446 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 ccad150c7761..40e9a39fd025 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 0dc5d64f7592..8b0efb3d2602 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 e101ea76aa2f..278aaa4472c2 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 eca025d1464e..e987d29a65fb 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 b9041c371fe0..9af22fa1f278 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 9f52d0d35d51..dfa5d9cf926f 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 59412ff5c7bf..e9f8e80464fb 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 acf542d74b99..07dd07e9c0f9 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 3cac86fe2544..099680b9dbce 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 a9c1c287f197..0e9eddf967f0 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 53218a860c6b..0555cf41757c 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 fe7e3c78bafa..117cb19efd9b 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 1d7ed9ecd7f1..a8a0cfe7bf2e 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 b600383ad120..c5d03f4ee7af 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 bb5f0735d5bf..affb1c53c920 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 ee1cab0e55ac..2c4e2e6019d5 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 ca464c9580ae..57dcfd4b2718 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 41436e975ae9..fea9ae1ccd78 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 2a5c8e397adb..c00e97a41ee7 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 ceeb5f635675..bf92dbf1ea54 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 b967e5e26719..f963ba844349 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 18382cce2da9..817a83d078bd 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 55ee6c87d307..70a312c10d55 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 2d3f5166d5e2..b0e9a32ebc4a 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 43cab0b1e188..34a87e8e311e 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 b3cca293134c..5814e21ef556 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 a2b760753288..d109fa66ec95 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 464b3f5d12cf..07fbbb70bf96 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 4d4195ef7594..725141921ca1 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 4a59379e5c12..2301515396f9 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 b887870c8967..a07ca714961b 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 2e337410756a..ee28c7ace827 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 99027ea9510b..0902d6878ef8 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 42dd0f521662..0d3cc63d14ae 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 0c48c1285f73..1b40acba7c40 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 83331d1097d0..b68bc99967c1 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 370bd22265dd..764d8101155f 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 0e976f86b338..a0caf1ad56e2 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 7c00d0a5eed4..209c2277071b 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 2c52fca8035b..eb330d31ab25 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 2ed712a208bc..d2375b18ed3e 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 bbdafbae81c0..2f3d0a17c442 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 5b874f0367ce..efcfa21458be 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 2b1eb3910b1d..8e7727916897 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 e7f9d5b5ed0b..e402f03b1c53 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 cac83fd3b6c6..f646741bf7d4 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 b5b1f97b7cdf..0c6683f4f76f 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 8a24ace0d1e5..8f4807232889 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 f0727dd4e684..b7e74c27c63e 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 4466202cdc82..3b7f5e555513 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 c36487970801..668c55139ce3 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 775bb56a960b..04beb792c4df 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 88fd4e5ad969..37a3cab59cdd 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 bb862b8d9ea7..1d12b85c90f4 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 7e132cd97e78..f0476b41f2e0 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 698bf9ddbbcd..604f48162058 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 82f48b4c4fea..2d162736b49f 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 52df937834c4..a9d5ac4fa930 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 172859aecb15..8754dec63bf4 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 172859aecb15..8754dec63bf4 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 172859aecb15..8754dec63bf4 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 cffe23b06273..b98240e495c5 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 a8804dd9f6e3..9a2163db5498 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 1e61cc6bb743..2e10cd37df46 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 20ced548e6b2..d89a077525bc 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 b40af365ac8e..e61131bfd53e 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 a8804dd9f6e3..9a2163db5498 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 cee2e2a81ea4..67eaeac226f8 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 9e29c6f77d8b..acc806cf0903 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 4a50000629b1..0cf91c60a076 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 fff2e051a18c..d74757cad7d3 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 d00b9e4afe02..577b89dc1342 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 ee69730c2e27..88ed658962f9 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 00ba5b2f3c46..72d970279923 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 d5bfab3d79fe..7388a4b9af08 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 1736c6eb525e..46ea96400fba 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 5f2cbeac62ef..438f9a9d924c 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 1d6424fd675d..59fce1b0e5bb 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 2f3fbf5c01e2..80e89529566f 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 97cecce15e3d..e77a9c2208df 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 932e33b32013..1b3bb6ba819f 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 1a296a8c6b45..ec520f6bb8ab 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 dd935c7aefda..7df3277f780e 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 daa53651ff31..b95332d9845d 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 18ec806bd7b4..15820ad2966e 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 b6bb37d852ed..62695c2020a5 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 dbf7ba010d6f..2d91c58cb471 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 a51659dfb12f..a1fc1e28e4f3 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 dffcaeb18170..5bdfe710a277 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 ad105ed99290..a46969540c3a 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 4ed58c4999bf..b1414b96dcd2 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 aa65692932d7..8daa6b7cd7af 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 18d06511d865..a2ab259321bf 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 8c0b042e2cbd..d05ae0458039 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 ac79eab6a25e..47543760b6a8 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 e3fabb3e8544..e02aa5546f4b 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 307776e721a4..d38f50da8761 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 5475c31fbeb0..4dd29016de81 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 07e71826c902..80e65351dad7 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 389caa269ff6..1c961aeadc85 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 3e2241a2a109..ac6c51d5c90c 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 3e2241a2a109..ac6c51d5c90c 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 b7fead608bda..13905092e647 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 d5e8cbebe31f..31ac7cfe7dd4 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 44364f4e387a..cb6fd15ec880 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 54ab9feca7dd..45c552633ffc 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 54ab9feca7dd..45c552633ffc 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 c02aad75b64c..5b90f6c19ae0 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 baf1eb10315f..cd1176401b79 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 22c5f6479f1a..d23784096125 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 55cba78861da..fbe4fde873c3 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 eacdd41a7119..49ce0f23ad30 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 bf9ba7cb8a41..f95a209cbff5 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 b8b07258399e..706cffbebea2 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 d9cc083572da..e00b599c61c3 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 2a1b757d4340..45ba34dedebc 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 2a1b757d4340..45ba34dedebc 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 b8b07258399e..706cffbebea2 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 1cd19db9c382..5b5dbfb1c3b8 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 b8b07258399e..706cffbebea2 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 b8b07258399e..706cffbebea2 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 784d25a4c58f..ca00d303852a 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 28e46a56c6cb..db618287bb67 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 d205e58fde51..d30d30f14905 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 c9cb7d43de4e..f7dc4489918d 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 bf122b5ea5e9..32e30ad513dc 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 2df91c1115a7..8e6c601d74c2 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 9c0705a6c334..d2d72d0ff1fa 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 322dca7954b9..d68029d8805c 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 f2dcfed0c0fb..09b146377d4e 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 741237e1c623..8590149e2bdf 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 741237e1c623..8590149e2bdf 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 53527971b971..5cd94faa7770 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 59669d336c2b..9bdd2c5f520a 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 827273a47a2f..480d3f846500 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 c4efdb97312a..442bc0bdf529 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 a7c7c614b2af..277f1eb38859 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 0fd4374a3ad7..71ec87b2b947 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 4ef3874404d5..2308e284c7da 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 6d050cb4f487..05f3b406bd0e 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 b5ce97f93109..b1e6ed0e4647 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 51e04ba7bc75..77a9d85871dc 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 c4a67e65d20c..e21111e969a7 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 eb02c45f8f70..edbd1b57cd7d 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 28e9ce69c327..1a51eb167361 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 28e9ce69c327..1a51eb167361 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 77070db9f5cf..a374ad1768b5 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 cc4c52553556..7c750f9f14c8 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 b5b8a8413a3c..abbe945045ab 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 dc71a5cf29b2..ad04ae24057b 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 afa710ffa902..cc598d6720fc 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 e23a97a133ff..a865e8396259 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 13bfb3977e69..057e60503610 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 53b10e601af8..65e5f3307304 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 03078cd66721..a28792c7bb1b 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 3de10105976a..1efcdf002125 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 aa52594882e4..a1b7b64382c8 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 53218a860c6b..0555cf41757c 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 822342785693..89563f42917f 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 c1d34ffda175..e05df223f5b3 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 221bf90af29c..e54e2b4332ff 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 35f8b2d1eff6..a64f47dca155 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 5b9ce4a87621..0eafa7043336 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 9e168625086a..6601d27d4d8a 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 08e2ac9ea8e2..908356c757b6 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 376bcf26c650..b8a9103b1d65 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 10a195ff08c7..c4f12ddaf983 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 eaebff36da29..09da298cd7d1 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 ac07c935a91b..83cb1bf687c8 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 abb05282edad..7d92134ccd9b 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 f1330669641e..810340f9af4b 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 f1330669641e..810340f9af4b 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 a999df6a073b..ab568a0986da 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 385d2022fa47..4b57beac6440 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 1ff5ed5eaeb5..f62d24fa4aed 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 81ddca404dc9..ff1d16d329e5 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 14063d3e46ae..52d62c9d8e98 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 762d991b4ab4..951ab9fb9a14 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 905605e903fc..abc3b7f7d278 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 c1b0f50f1b57..c7bdb4439aa1 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 ba5c21ffb138..992eb0db9bb4 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 9f76e7eb7065..d83db26d6d9f 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 27166b10c518..d7fc1c13c6a2 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 54046bf548e2..85ab6fbc2609 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 54046bf548e2..85ab6fbc2609 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 e68d0f92de92..89a478ae52a3 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 ca6e23c3183a..c0b1b3bc807d 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 e3655a9e3791..393fbef1bf29 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 c1e8ecca3dd9..dc811bb2e960 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 ad66feac7f66..75514ac47dbc 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 ad66feac7f66..75514ac47dbc 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 ba97a57a92b4..fb84c89ed412 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 11424dc8f25e..2e415bf8f4d1 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 5710aeaf3926..1be71e7a9b72 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 ec2c3b1f46a4..b6fbcfdcc46d 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 ad66feac7f66..75514ac47dbc 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 ad66feac7f66..75514ac47dbc 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 64d16572be63..d20e58e7d89c 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 b84beb931128..3167898038c6 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 64d16572be63..d20e58e7d89c 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 d43ed32133dc..8d4a244a424a 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 5a77ca11a14d..dbee82b87d76 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 a321b73dd055..ec01a626376e 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 a156360e6ab1..7f4929b34511 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 9583499c2fb2..c47f188b07ef 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 031936eaae5b..3b9fd42d404a 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 cff0d53cc5f3..bf8f3a446b19 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 3f7331c3772c..958915f59c0a 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 12b5e2b33fec..04332911e9b3 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 c6024694badd..e7538c418152 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 25e23a1441bd..0eb4e8add0fe 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 fe55edc6bb3f..1f866f781ed9 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 3405f59bd082..998f1e009613 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 4ce594085b54..3cc76ad313b0 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 931dd7ac6df0..ade341990a06 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 13b971939941..d5e83c1dc4ec 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 f39015efde23..f3308c1650d4 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 f43e807b7887..b4b6bdcc2d8e 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 ded7f926b9c3..d572b97090fd 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 216651a1a26c..1d1656694dc3 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 d7c82bb0429d..a9d7189e58a6 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 6854e530eb25..e86d092a127c 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 f9bd02b8159a..bebd6dfbf54a 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 1e9cf21b17f7..a49ff4d6f309 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 ac04e26b2d68..219300dc2827 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 18e824e21fa4..f61170dd5f30 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 29593880a16e..fa4c685b7dff 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 59a4e12addc6..b0fc2db10177 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 aa8ffa0444ce..795a77f62106 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 98001b799938..df581014e089 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 21fd9d56e19a..1d92245c643a 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 7615329164f5..757c046edd72 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 7a98713c3b2c..d441a4f1157f 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 2dbd88d943b2..d1c91232f1d8 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 790f2d617adb..fc4890c3911c 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 74a7163b9861..2e775269aff1 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 54fe422e2ba1..6ffec2e67678 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 ed1b4cd0001c..dc30b7989b7b 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 886d35b7dfc2..72a80a903a18 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 fa8f98bda32e..0ea66fa9e3bb 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 ea0b1c19248f..75730934e490 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 81ebb133e991..0dfaade29ca7 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 3f3d64f00923..a6b8d792d1af 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 3e307f854f18..0c4bb6e48565 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 94438f34df2f..6935f2c8b367 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 42cb411c5677..dbe5f092644d 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 f6976cffcb67..53119d8247f1 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 185dbf7c8afa..dfb08fef51bc 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 26869272551c..771072ac4ec4 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 6617c9f69c74..cbb6c93fcae0 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 a95ccd93ef08..1a8de92884b3 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 96fbe96a03e9..706144597a32 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 a2f3c830c85f..00615e3546db 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 3b01f7006ab6..a151e0f6b960 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 04653bec127e..855406fc72f0 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 3053d5dfcaa4..bbbdac10c9b8 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 68c3249fa451..08b173bd771d 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 40a4d4a9529c..cde97c846f37 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 4219e3544edd..3fbb020b5cfb 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 05f13fede3f7..121a827cce6c 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 e0695564004c..b8ae4ee02eb2 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 a02f6c64ffb4..e6754b71128d 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 325da627d2bb..9538243291cd 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 7a78980874b9..d6d187e20462 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 d405379327c5..f1c7eee7087c 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 ba6cecc64957..134b77dfa34c 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 337128226d35..8d94872b6586 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 8eb5e9ebd6b7..96eccea4ea8a 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 87d21be19364..d21763904035 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 8b7b4196266d..e82846652d3c 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 457378829e7e..a695a388c668 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 ba547dc2e40c..6bf0e7100cdc 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 0da394b59835..0a2f5ee137fe 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 f9537344334f..900c4af3f1ed 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 2a71ad32e889..dac0bd5ca4c4 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 c6202365b217..19bad1d0d1d5 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 b81171877517..2eb6271e2f03 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 8d81f35b6d7a..6bd432f9c86f 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 497cf1aa955d..6ca6487ba930 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 cf7e79f7f221..9a395a41468d 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 0c55eb47db63..86ca3931dce5 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 248d6e75e001..650895784ae1 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 5af94d45b3d6..832e97058973 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 88351bea6d63..7fdb012ed15e 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 4b658a73c40b..5e3fac42c726 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 78b8ebcb2832..18f94da57712 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 38c8668ca5f9..5b725bb15361 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 b5834e06d1e6..bb20a323fdeb 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 a540353b0ce0..3a696af79b3e 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 76bb2fa3787d..5704ca4b529b 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 882f33aa6a89..df066fb0c496 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 0fc0b848c3d4..34645ad4a433 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 5d0fcbfb2e56..9c108d32ff57 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 fca60ba8ed16..9fd7cbf09e65 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 5d0af9ca1bf5..f586b97862f2 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 6b1383523db7..3a5eab10c4fe 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 301ef0ac5f2e..cc7412f7f373 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 d895df02316b..bd431ceb095a 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 832ea7ef7d1c..51995f8d905b 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 b5834e06d1e6..bb20a323fdeb 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 7560a05a1834..9ee237d3a994 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 b915a6a9339a..f2f2f8bd068c 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 5657644d3bd0..c750f8e30c8b 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 942d5ae4cf74..8c24dc34f8a5 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 677a253432d0..1db5f20e386f 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 a6ac1507c24a..78404536bed7 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 9965c9b3773a..5af001f6be1a 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 37c37f556309..69d691cee8ea 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 0966ce0d83c0..ef8efd437d74 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 d62be888484c..9f338ebc99b2 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 6d016501b189..4bac8b8334d9 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 38c8668ca5f9..5b725bb15361 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 b5834e06d1e6..bb20a323fdeb 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 a540353b0ce0..3a696af79b3e 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 76bb2fa3787d..5704ca4b529b 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 882f33aa6a89..df066fb0c496 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 0fc0b848c3d4..34645ad4a433 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 5d0fcbfb2e56..9c108d32ff57 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 fca60ba8ed16..9fd7cbf09e65 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 5d0af9ca1bf5..f586b97862f2 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 6b1383523db7..3a5eab10c4fe 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 301ef0ac5f2e..cc7412f7f373 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 d895df02316b..bd431ceb095a 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 dc96ee8b094e..8dbc7d82c6b6 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 b5834e06d1e6..bb20a323fdeb 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 7560a05a1834..9ee237d3a994 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 b915a6a9339a..f2f2f8bd068c 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 bf6810040120..71f3aba57734 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 b48332ffe224..f35b73ba7014 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 77398582f80b..0b4eb32094dc 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 a6ac1507c24a..78404536bed7 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 13a58c3e396e..e28eb4c37e8d 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 37c37f556309..69d691cee8ea 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 fee3361e4b48..392a5f83435b 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 41c84e1e18e2..da6b8362da10 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 38c8668ca5f9..5b725bb15361 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 b5834e06d1e6..bb20a323fdeb 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 a540353b0ce0..3a696af79b3e 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 76bb2fa3787d..5704ca4b529b 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 882f33aa6a89..df066fb0c496 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 0fc0b848c3d4..34645ad4a433 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 5d0fcbfb2e56..9c108d32ff57 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 fca60ba8ed16..9fd7cbf09e65 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 5d0af9ca1bf5..f586b97862f2 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 6b1383523db7..3a5eab10c4fe 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 301ef0ac5f2e..cc7412f7f373 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 d895df02316b..bd431ceb095a 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 b733e3a2a06d..500d2670b96f 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 b5834e06d1e6..bb20a323fdeb 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 7560a05a1834..9ee237d3a994 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 b915a6a9339a..f2f2f8bd068c 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 e4be8d15dc52..79a88eb2c516 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 504318f75042..179b64ee2d8f 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 7061eee772f4..e926b45c4fe5 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 a6ac1507c24a..78404536bed7 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 9965c9b3773a..5af001f6be1a 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 37c37f556309..69d691cee8ea 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 4771ab758956..02362ef2b093 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 cdeb95962361..df307740199b 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 38c8668ca5f9..5b725bb15361 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 b5834e06d1e6..bb20a323fdeb 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 a540353b0ce0..3a696af79b3e 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 76bb2fa3787d..5704ca4b529b 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 882f33aa6a89..df066fb0c496 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 0fc0b848c3d4..34645ad4a433 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 5d0fcbfb2e56..9c108d32ff57 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 fca60ba8ed16..9fd7cbf09e65 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 5d0af9ca1bf5..f586b97862f2 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 6b1383523db7..3a5eab10c4fe 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 301ef0ac5f2e..cc7412f7f373 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 d895df02316b..bd431ceb095a 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 9965c9b3773a..5af001f6be1a 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 37c37f556309..69d691cee8ea 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 6ca7ac727022..029a81282927 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 18f68d632fff..b24de6dd2570 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 24902fc62780..c8e2d9c427b2 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 b042e8e09771..e4687573944e 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 98c8f6f8dbd1..9078f304d58a 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 42f6514b3f47..1d27770b240a 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 ab9622e44478..109aed5ac3dd 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 9ff64468bbd4..0d2d0f6c65ba 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 f0c5d0c2f7b7..52f9421c2fb3 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 c8e744ee7f17..a414f34ba631 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 32712a8d7e2d..45d48164b0ce 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 f4d034295a8c..4f70b5911057 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 0a4ad4ae414a..b07f297f7959 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 e25d4b187ff7..5c2d202850b1 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 e25d4b187ff7..5c2d202850b1 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 a281279259d8..a34ba99f72eb 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 7399cd5b92af..90322e428187 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 e6ef4f490bec..bdf89abfdc9a 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 c5cde5b499b2..4cc60bf5b004 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 b8ae76f1bc8f..8010a8e79dc3 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 2546712672eb..75333333783a 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 343926a7ca76..e5d35e88de45 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 6dabaeca1cf1..394e4a88a4fb 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 fb939de59c83..916aa5696522 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 9ad50202c32c..ec0591e5a075 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 74de8588d633..66fb1ed0f584 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 d5406e195a10..de1368bdafa3 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 7071e8cd3977..9b7f4fe18265 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 96c2f270fef4..e0c1d1e57b3a 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 a82d3ea724bf..a20c04d5dfc9 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 09720d8d0323..2f880540564a 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 dbb2df5c51ff..621945a8218c 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 b01c625724b4..d68f89213d9b 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 899303280356..c2d12eb21041 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 acd55e83a7e0..7be62b9455d9 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 7e1865a0e290..8d1d773efbdb 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 e175d60ef7a0..87101d837e09 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 8c4534f4f9b7..6b40fef158aa 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 e82182c478be..4b2ca139da99 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 a36b85d2568d..a256476252d9 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 ed0e8ad1be97..387a1322ff1d 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 9311fdee55a6..776fc761be58 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 62ae301df0f9..a7939d9e95ec 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 fd376d000004..1f4f0aea2191 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 c467aea35597..4c8f789089d1 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 40bc31ecb6ca..63127a393d13 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 40d863c14f10..7a4c099bfb13 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 597ca2db7886..b1e84c306613 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 cbeb61dc477f..502f7ccc4731 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 cbeb61dc477f..502f7ccc4731 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 230e9566bf12..f9612928a32a 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 5c1c22645467..bc541824a820 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 79567de9a625..9121b1880ec2 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 e89faa93ff14..23ceeeb6161a 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 f52a6bec6b73..131e7069cbac 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 63aca99b2087..4a0c50c83473 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 18d09ebc0d9b..390207515dd6 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 4760026997ec..c635dade668b 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 2fb661a7f1e3..e629d270488c 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 92fd1e0adca3..2404a5823dc6 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 1daa6c4f3bca..7cf04b7d0ad5 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 1be65a5ba332..a22d0a5a272d 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 6d88a9ea1cbc..4da4ad98a191 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 a90bb32ede58..d9c49014b3f1 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 f811f7e92a15..74678256aff4 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 f12770093c73..9322cb141bed 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 1e5dff068215..4e65cfa1186b 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 5674c4eaa8b3..47fa8c3398b2 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 142b823659f9..6b01dfff761a 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 bcfc21d20d59..c16f875b42f2 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 6691437e7384..499488867fac 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 942ecfc0374b..7bedd6508b64 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 8a62430c5a8f..903b9a88c722 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 4a76bdb0949a..7d10b7152ab6 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 e1b6d9798947..571a877f642d 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 55a98d361aee..0220977a6ddb 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 b31e92dce18b..58595291bdd2 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 6397fbb34114..78770b13d803 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 348a682724f3..d473a7d2e695 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 2188fd020e9c..79bdf2f70816 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 320b7199b716..012d932d60e3 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 17e538bd8604..fea96a563d9e 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 150f6d05f6d6..f98be05ff994 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 72b6744ae44e..a8a82fd9f6b5 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 81e7e80948f2..663e897d74b6 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 056341f77daf..4cb23809452a 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 b9c0d4a46abe..1ecf8599259c 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 6c2933900201..0a0c88ea845a 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 9df9d649c078..97bdd17993d0 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 2a7e783abe87..dd5ded90b6cf 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 597ca2db7886..b1e84c306613 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 cbeb61dc477f..502f7ccc4731 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 2aa52c168ddd..2b113409e52a 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 3cfab946ec47..869a5208c4c4 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 f0c5d0c2f7b7..52f9421c2fb3 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 8a9fd7f800c1..ec1d7b0ba72d 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 f267e4a4ceb9..f00966069387 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 0818aaaeacce..cf793089be67 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 65d5e7659d65..c68b51dcd443 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 51fd45b7109d..1ff1bfa094e0 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 6d026f2b0e5c..0d70aa3b2a2c 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 62d71f0328ef..186169234f29 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 03d206f114a1..717361a20855 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 09191896190b..44313cc1dac5 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 6d4e5f2c5f9a..93c2c8250fad 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 c1dc68d31771..00d3aa0ab8a4 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 cb20cb6d3933..d8d201aff933 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 9d751f599448..47d1c06bca6a 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 150/179] 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 1375a6ae7093..e0666ea8d2b0 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 ed8765f35e27..060fcba0f48d 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 9ad2878823e4..e1a7957fbceb 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 c7333cb36a92..2c8a7fba1e5a 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 95d47b9f0bc8..70105b54f644 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 151/179] 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 000000000000..b4306fc95217 --- /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 21585747a5fb..43f17b4193f5 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 152/179] 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 25a99b551b3b..32b708e8801d 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 153/179] 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 32b708e8801d..d1b6682f507e 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 154/179] 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 000000000000..7baf14861025 --- /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 000000000000..a98a31673f41 --- /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 000000000000..d5bf4ded1eba --- /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 000000000000..b7feee2ee9e7 --- /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 000000000000..19f92287e3f5 --- /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 000000000000..eeb5c96e3738 --- /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 000000000000..2a3f3b47a475 --- /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 000000000000..faf64205da10 --- /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 000000000000..f6dc7e09a680 --- /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 000000000000..97d80da2fb14 --- /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 000000000000..27411a71c216 --- /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 000000000000..61edacce6c24 --- /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 000000000000..f82253b094c5 --- /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 000000000000..e40ae2dbb54b --- /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 000000000000..42aaf351bb79 --- /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 000000000000..5c95387adab2 --- /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 000000000000..e4faa09f52c1 --- /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 000000000000..76e300476fa5 --- /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 000000000000..510d6994dc19 --- /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 000000000000..87a8edc55efd --- /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 000000000000..6c52d620367f --- /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 155/179] 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 c7912793810d..3ef69ebf2a73 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 156/179] 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 048b58b4cb8f..7b6491749e28 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 157/179] 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 0982057792aa..aedf38a7befc 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 10be54cc6978..fe2bfa92240b 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 2b9eeb14bcd6..24c925e82339 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 9f3dd73a8197..d7b66ab775dc 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 3cb7556f9be9..4d444cae4f8c 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 158/179] 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 a161230c1fb3..28177f531a34 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 305ce72e0e41..3b7b4d9e2765 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 0fd0fd6cb0ad..b361b08d9a0c 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 159/179] 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 fe2bfa92240b..daf58b3121b5 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 160/179] 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 daf58b3121b5..289c5e737114 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 d7b66ab775dc..14d82e87558a 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 161/179] 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 aedf38a7befc..afaaf6bf19be 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 000000000000..33d926092eeb --- /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 ca82e33068b6..ffb3ab1f4d5d 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 28177f531a34..feab3eca773c 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 000000000000..1f6be20d36c6 --- /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 000000000000..399a564ff89d --- /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 000000000000..a71ac680bb64 --- /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 000000000000..d5f6e5884444 --- /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 000000000000..f099392ff6a6 --- /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 162/179] 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 f19526011a64..05849001eaf2 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 68331edc692b..14b9adb96703 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 9977617c7683..874b67e25def 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 300838ff1abc..65674132f808 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 86bcb5e57537..cfe77e37c822 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 163/179] 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 9629131d7e79..40170739fcb5 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 164/179] 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 000000000000..0819f71e7a05 --- /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 aea29cf0097e..8bbff533a111 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 165/179] 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 8bbff533a111..924d83b1f257 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 166/179] 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 b1e0602d54f0..5891ddc1e260 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 167/179] 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 000000000000..954166b715f4 --- /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 000000000000..993d51423b56 --- /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 000000000000..261ffbf48509 --- /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 000000000000..7eca7919a4ab --- /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 000000000000..e1089766da23 --- /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 000000000000..382e7dd36036 --- /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 000000000000..cf5466834526 --- /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 168/179] 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 2c8a7fba1e5a..2d1e7a57d2e6 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 70105b54f644..dd4b3ff7c076 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 169/179] 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 2d1e7a57d2e6..ba968736b47b 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 dd4b3ff7c076..918fd1735042 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 170/179] 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 ba968736b47b..ac8c947e909e 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 918fd1735042..3374231173a9 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 171/179] 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 ac8c947e909e..6f2ab3043477 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 3374231173a9..44274becbba8 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 172/179] 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 6f2ab3043477..3183a51c1442 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 44274becbba8..15d5aa38eea7 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 e782aea8d4e4..a6952ce7c544 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 19a5d8e32c6d..788ab31ab541 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 zcmeHwdz?+x`~O<|oS89m)^@*N&miQki&Ad8Pi7LO`=^VV21m^YgPEc0r&LH%sZDTY~`u*`er)Qt_e%AB6*R!sB?aPQ2 zmJZ#Wn2B*@p!s4=`!m?Ui;NS)8EKU6DLlCTA=qb!Sj?AB4j`2^Hs( zw{I!=qQQ~hsJW1lc z9-b`m_a2@q@edxJA@NTho-OeK56_kOXAeIk@h={pC-H9{ULf)B9)3mQQ3rMVE|T~* z4=<5;jE9#?e7lENNj%=eYb3tQ!|NoT=;4hL-|yi~5 ziJ$fG9*L9fzfa22}&{c zXWgU|m13f&n4}alJ;h|DnC~g31{E`uVzFm2TPc=#in&U$##20_6rXsCc}lU%Q!G%5 zgP!6Qr5JlihrUQDCV7e_N-@_{ELVz`J;f@eSnVm+D8M6!4#U@WNK`Hioiit`w{x@C9Y^9j#DdsB0lb+%krC8`G<|)Nu zPq9ELR(Xn7lw!T7Sfmu6d5R@U@s+1ot`vJb#VV!v(NnBZil05jI;A-5DK;v_7C-Fo#KG;9<DE`2>C!znkB~ zC-Qswef)kti9f&}QS z@MrmR{CPf)&*v}j7x@CdkiW!V=CAPA`6B)XU(Da+OZZa$7GK7f^A-GUzLKxv@9=l| zYQBcA@SS`Y|BCPC zU-NJHw|o!Z%fI8_^L_jW{v-d1@8<{jLH;v8#DC$x^56Jj{yQIK-D2Hp-DZuk##*;q z=bK2o| zJbqs##T`i8O^Iq5R3Tb{v;z3FrM&c1l{D#DQO8kn%y_EO`iMfW3VgV)gS=1IC207V1?Y$O~OW7bNv!}g> z(qB-zkA1Ht(4W9L`Sxzhsq2>f9XJpH;W(#r2w9*_zq7u^mwhd>BVw<1-DNoqT-QCW zE3nUXkM$M4>?>qP5S&-)4$GoQAIJZr2sq z=epb4jxXDe>@2vVbmh9ua&leQU9Kx|+^p*^>kE9@7s$?rE0s>e-f|lCj&^t6Mhhd2 z!J84?X?=!o^ixUR_Dq{2Bc5kdev5n?YUds54+H^CJC(7O<=a~L(8d%MuUO)97WR1k^sdz(=?#!62)Us=wRp< z95jNyv@$ZdoTLY6lH%5dg{d>kEzjwOS`c>^RU0^ch>EV4F}5G%k901{n%QMFGD4qYH+2}(LipS$WB^`8j(v}^%37>ZNQgrP+cRt zo?-$qdBY055v3MI=dZKGJ7BEt2JxY8j`uM5Tpa~X{=ig<*B2YD_wi-#BfBQ3RdJ}( z8p}D>b)}%m71-yx-dc+o9gr*oIgZkbNz3M(QZ9eU)w zU_~=Cdoi?A+$wWMtzpA^fXMDuVrQtf!*WI?Kq=2ly(5vcQQp%uir+)x0ZO1Dkx!HQ z4I}n9e6g=ijs0y)td{mPj6je*$gz6buhY6<=i4hR@w%#+oU3u&_cYmGx8Al^%T*vb znDXq!mRJD~%yRLr@|4ZqmKtTWuTipiB(m0uMEc0CP~|dJEF5Xb-~>Ryx$Q_j7v+|f zA?@3#;rlxl6&2%$bW(%06Lq@~#e=QYASc?>ewpecXTSZD<*b7#RRy|aCoWgBK+Y>< z_?qJ-w>h|Y2?eNXzy__5^^(Q;yO7?rkMKrVlv!33qpyN57A%DGjG!c|3Tk1Rpq5!; zm2O2z?h9+77uLc+SkZ+tEO&1sTMmkdYPmdn(cg-qvRj#zDC~V|?YC8EXo)6yZud%E zTuv6*^2n1lEI|UZrvxJ^9&Gs~YRIVRlRc<$hSQ*z{gj2-kWuE`KWbETILLF|!ZEnw zFvur^duZG*mvw1L0W^gTSX>oWHjMtwu#w7TNxLRK6?$bS7f-0{eEV_K#?4bR@ zO&uDhDw-L}1(vf|D_`?ENv=#V=t^z%IPz(3;~WlE4ti#RC8k(0F*)4+39<(lo%3I$ zafem@VN1LSkB4Nj+c6X8TTVx}NnZA7w$p+LhwMDNK7OzdnQw{u6zL8|k#qnttbxA< z#XQS72@1?JX^?L}Z#l=ioEYU$?u6BImUDuuT;M66wVYMD)`-hBea3QDXzdG9y9)$Q zTh56t!F;KtvN5Dic9m+L?t$`2%jx7QpO=>3K{?lQ+Pcc;JmnLXbDXPuRw@s`62qyz zt9(W(X*%?==UC1&I;y8tQ#sEAFAu&A>aF}J$1adI>oUWk`j|UuPTH{j5 z>#&5D@6>jh9q@S660=>8rQsfr1w5u(;xX6bt#FT70gq{xn58@rkd0H4TyMmK&}~8A zh?(f}O#2U<*J-|BdO7cam`-luQJHm^%QGEm%^;!Lt51VR5c>QQbeRWSn z*cCk!dHGzuhFPgc0O%?iam&+{dsY1huQ^)n6y*M;X035n?KKO@yt2Lz33+9GFA@vMcp?&XWql8R<(2i_NQ|YNyO5Aq))SDB zSJrnTA+M~*BO$M>??6IcS&u_PURmFcguJpIi-f$g9)pB;Wjz|;4Pw6y33(lTD-!ZL z`W7VQgs*$U%B{GT}q*^q_gkT zzm+JkL5qs5utJl|=B5qFR$LJM2~n3wYSR>n?B)nco-cog{VF|p4s(hSXTXo4^~XW6 zVsCqZi(g@c$Iz$pXk6YI7F8G%Pe~>BDQRRmx1dqLiL-yDp7sVBmJ}-OoDUK3Z@PZs z;*cb=d_-cdR7QNtRQ3-{_JgVHKX7qS5=B#p5K@yo`+W*c?o%*x`z~g+UTyKqJn3T)udG8 z4fXs$b-pB{Kvci0F8awR)g6f6aq&}mrLOi!REw=OYx1MP=?<#BT>O}ZQ{J4?b+Ff% zL_eew?cw4FNtBV&!*W9GcK04F^XygB2pH*fjkW_PX72o|8v?OdYVZCvt}!yOceiM| zd~f7CUur<*>EXS?3~xD?V?Sk#f6K+bG%W3N$-rDiEh(vYNtx8;!U z)8u5R$-$Q-Uz~;?PT3;g5%VI0d7;S+5X!uTi*4mGFGn+q*A3a%AeWO&@zL7wf|c`ia8-9^pS`gg?s+A0Tb` zYq$*6AiIKw8#ST&xXa{Xw%%H&~~ctN>|QS8}l?jP*CoI?Z66 zYO(^PWqq5A)nTk36YEcC*Qo~UBPJ_ATGka@yc@>4TeCi5uud^q0n)NA=i;3()19>nPgr5$nSS>tvG^AT8@#T&xUZ-KArlY_L9LvI3-KUCPDV zVXWJT^#Edh$Y8~0G`WQYNXxo}ixpw4pAzdqus&$8PBK{m(z3qE#qu!LuQlrf2J8JM zD?nP-#at{4W8F%uzaZ902J3w$D?nP-H@J8!gcX!(uW_$Q1dx_!5f@7(QKs+S0*G+u z=pGtT@|FvJOkoc zoEzzQlNW%VXgYM33+}gG~MaS!AsA z(7MDPCVBJ}!LR=|_VZjUkfSHtH%;W|xr;aUo>tl8d0lsOx2EUZb$i*x>T&TcqegWb zZokMyF~yeSr+J+^sac*qTCRt`VfgoVCUP-a7U{QzA?5d@d>Y`)iTSuhA?bu)cO~g; zzpj9E75%y^NLR_PyPR~D{kp!XI>d$N(wE_}G!0VbRPlRUO1i2(9X!zXIHEr)^(?Wk z^{vz?UGNxp9~x9UBFi;LW|@T-0c5LH_px{#{}x6Q6)o4J&VwpiPjEI1YtT{}WsghG z8sVNxOwTUxe4MkH@LWcobEIcYpQpHx+N73GXDmm@%7^Ou+5LrRr^fmA734(slrc{p zCF0p2mUq1`#}B<5bb*i^_7`a{P_&k~z@wc`w2x`pzLFMqmc{u;5$*YkRyw)SN?Np} z8|Ha275@y`FyYZ!>S~N0i+Nol-%p&*FTY$qZM6F$EXo5b9*srVWm7qtd{(YWq4? zoJ~dgbtsa;Im@Z27KM~tTCn=qz3~#G7!vBP40<`Uxfo0ab^K+XnW{4eSnAs%Q>b=& z#GNV5Q=OG>pX;U(YbS96ce%-00JI1d&g>=pQx=y5P?$e<( zJSU^h#7kW#3+dIuXCY1^uVekXj-+ep*PTeZRz4kQ4`ZU8;9wUm7v0vrY;iofwDIeX zBVAj+t^?`X`E~6{*WRydN4gGvU0c!}=hw9%-SIvhLiL>#dmZ_7Hd5R`94GiVL@Uyr z=+nu0|F)iR`UFR-X@%=YjHn>r8;s}KSty^@q?TbE$iq7>$2z#VAy<};z7j+WD)l74 zt~u#W_UoFFu9Hs(X8HbTQz|0Q&Zn7$@z7W_Rcp9i2MUU-sc0PPtxlHY+d?!^%T}J9 zODy?z6A@4KG1ftOexas;IW-6`ZPbW2B$Bv%qAK60AFfFoLys|9U%gE~EIqSBe(ouZ zUicZ_pn-m4Bj2tk>f#*)7>J=E3~MXQE@QWJMaXuj{d1CSRhO>dnr*gX@0DV4a5OZ)7xl3vca;xNafQ`Qd z5Y?$9bYE?krH+G}mtA5G?(NHE!(SSV=)Ee}HY%#b96VZ(Yl+`bmSdQ5Q90(|3Dv1F z2hUIBlHqqyQB-%CYlupzvCF)C+s2>FaJ9mm;v1Nv2Ko4PI#PO3vbt=!-yF&C& zb;Kh}*Y^Z!SGyVzx~7Jx7Gk?m_rdW-A5=wgYPIr*ga?^!O|t8v6d@NczlocV_s#Jz zqkb- z1qR%69Pg3hj4JBIoKtAZJjDfGD{BqIyqMg9i5`0Y=bmJ{iPPztkUCC1kImLscC<-M zzJAq3oTe=*gj;l`Q>x;~3b!~_bdNdXC~TZmm1Rb_Whc?qwZuG-9+(Nr!wUE4NaI>w z3S(rGrCf_pu}bQaS2ed$q2n-ql|#pvb2|lfVhnd@L?*q@F3=6PaS@H-o|TA54SMkw z*^9U>lI%s%CMF-2i!90pNh|jk1WjE#tn~67BN_<$hLvchUYnPLZKVIsLT=p~BSWuT*vZ$Ckw&4?uMy#FX*Z0k zOMv7isSXVx8kF$2a2X-jj@DR(@sfO8p6pb)wLCtAqW5xgB;kUTX6sUHNHcobwPVg* z)EXF*VD%X3pXg{#w046^jWLW3kvLH*xyY z_6;}LjIlxpeNI(B>~Z{Bkm``ikSxfkW{gdw-}=zCfHY!kMx3#IknXvRweN~FeqU(J z*b>OLCNTaRp9qUE&Q4+VSO&{M1T|Q5)`~U2Z;VxBRgh}P8nHObWlh;JtQl*;j%6)b zYu1LfW$jpd)`1-d2F20H$C3NDIGXr4j`>?0&3zol9u-F=R!6o+D;ybW$?7dVzZ4$bC==qlRM5hTt!1aE!7_IOf2UVy%Yb@n{K( zwHA&Y-FlvlGz*E_E+=l`#!WTOVVC0Aob|=A6}tk*)~KN+N7F_4rIB+nerfbviC-E! z{qRfUX8?X_44sD-(zT=!mgDj(=5%a*;hlpr)3avzSX-ktRC}9otB408?kenR9OLXi zIOej!I3CN2acs$k;n<2@gJZ!_*G)$#jb&Aq>h+^#4vu9z zZC%W{c8z*k~Lx z*;pL2*f<<3u<hLku3HvoQZm{JeH3$&ZQ{DJYW2ka?BDY z$}(wH)#pD|PVPTk&V6ahsq+t)Gbv3u|8%=On5LX~NPW_sxzeqOlffPTe=y$6aWExK zed>qQ=l^89O-)nIKixmmkD{ET?VlNcvwzgwoCWVFn}cHpn~P&6dm6_q_8g8C*nAvw z*a945>}4En_9~85*&-bO+IpZ@TE5JHQD<(*7dDSv_I;`da^TFZ*~^yquSFf`2+Yg@ReNM zS8|xoh7_OL<@$V>;!~|$pN~^~YL@G>ImIWZT%Ro|K9zkwdguHp>~h#P9Aj)djy2d$ z>A4%nhU{A$8~IwlHTts~>xEwI8`}2YNpG{)tNO|fYx{jEKB8QoA5(m)lpSaJ3*&W5PA1~eBhUJ!P zmX!nl8cawQb0nN>%!`P7)m)KBan&5dwRA`P3&nKh9f1{H=jY%mTU%8%tg5HAs%co& zPHR=yu&STds-a;OPixiKuxgsts+nQcBCSV;!tG0$!`?OZa8CEBxwd!bCot)O{ z6vL`>TC1*xRrj=3rx{kKr?tv6tjuY<*JDEoq*oZ zH)1!+dZ~MoH(_+g+!3a)^+(D4TRHyiBX8{Kv)yRqS!^thf{nwmA{&omB{l)a$|y~> z+}%Jm*_|k@H=D>Utgf_Xt2~pz^v!VB;QQcvBAbNcN$f!!JF(lqb20qYNSZ9Ur{GwN z;SDQR8}}MHyWGp4F7s!|{8=)e?)@e6XUqJ@W&T{5Pj?6}M|3K_XQ0bsPsz5+#Ex5+ z`<(QfC;eVD{B-_HGXE8s|C-D%@|A0rxJcTna<#vizu3svZMp=ydh9J6>&v^AS9qC(cI72x#=s zlZ@ToXx7ovtcbI3U|WTaK)S$-cCXa!!%?$nA8PX|>_?fSd@Q%_HPIGy2S~Tje%RE+ zJftzKbz`9u?ugfZp9lO@o2%B=u^)uZi5SV+=aB28aYqlUy8arl-v>%HmVnrBh z3ONmOHDns(14sro#+@KTATuE!Lb5X$>jD`LnFHAju`?NK2{{XL733DkBanrV_aR?H zVt5dG45S<65=bfJA;^5lYRFE=pO8isP$uLu2wn?g4?&)Sya8DU*$z1f$wnj8hqQy7 z2DuP&HRJ}!-H@4(1(3HPn;_pn4nr#DFcya#2RR*b5#(yf^^ggW>5zGlw;&rK-$Sxu zjMas-fSd~H3AqGP1i21!2jpSM9LPe*3do0$osb_Pe?o*{tQMpxqywZYq!;93NCHv} zxdAc`@&IHSK6DpAE`nSFxeRhSqySO~=?_UjN+Dw)w?poL+zFWpnGab8SpiuI*$km_ zzJ`1Y*$ep|@&n{2$N|XDkY6CbL4JqO!}ckUEgYkXDd35aK@( zznvgGAZI}?f((R|LdHTSLS{ndyRsO+%OGnYpFnm&4ni_JBUu7?Oc^5h_D!Ko|Udh?2<0b9g80flhVb zHR#5=GY8Lk%qKl`f3=sq!%BB-&vEbB>NgTD#=Wjfu`}$8o$eLbDP8HS%m0GE(gJ6~ zsBS>CPX7k;j|MjYcTmXR)M;D~div0Bn2=pi-!Mc6m9*3L^h{gltI6I?z1Esl^k#I_0IczBzRIL;mz3ov9}sl~LY@)&l(rrit6sksZZa!xh4m zHa{AZZwpr_U&l#l^P}yLHI$|;ap(`$POMl#Q7fQ6lC4TpN~d-1U-{MiWQ+5rWcjBK z8FEd|#u{qNUL{_-`}NO$s>xod<&xIHyLc7k_eQy5VlxSJ3GWt5rtFqgE~>KF#MD93SvMA%KJBofybJDS&aIiBB>fwUQ@sn?Qa$h2@bB z$N4a~&I87~lWx2zIOAO8(_5A5!y|$A4`M4gZ(2!5?a#2=qE8ZEAHY{C>>1n<$ak@q zKQ)klSpX*je0K-%BLO@mfFBOv%L90F08a?unE|ZMV#)bhn9zShhF=us|yon1=^*30IM@Z(!XsWzgGaC z62Mml@X!FR9>BE&xLN?$4B(sqt}Jn~efmnwSg?JyKG?oWpIk?^U2E08UO#I+eyQD4 z^qr(W*=|(>af$#|JBp-z<3N6P09Oj&iUCYJPqUxZ-Xh6=dmtb6^VzHVCGAlkUq0>H zP5yBKjQ?SYk>LMMJ{w~(}kqiC&8teSbK>Ql({ER^TgE*3}%GdT9tLiWw>48*^w+^M? z3iforVoC8ql^>Z9@v963W~c>F2YLB7#HkpQ+R z9*hrNp2n&;#-o&vJ3%@>h^_9(r#n6B!>#T}7&!7TV2mH_uQ9ahbC3M-{JDQ!<{G=! zJQBzcVBD=%e3}q%{?SL5k2|*k+$eyL3E+MKe5bQB^E|yxfo2B+E$@7H5@~H^wkUU@c^@-4?MssUbp!du0sP+p9v#4A0(fiy|Hp^9rS`MQ z_Ei{94`d_gxVWYErAa%58SZ9MV`)3wIrs51HcDZ6q{FQ;mExN&S_s9`!T$ zxux{U@-n1d68Bfw_2$;azI+}z%by?h=i>>D&z|8uS^6Z$L-zolrm$yli!Yx?{QTT< z%XjU0GGxBQslt$+F?>qqB96Vv)_Vkdz8eBONV;>`=#PY>W30sLS9yXRMruP~5* zb^!a&7kJtd$fxtUSs#D<;fYWnziR-~{=@Wd5WqbH`2GN<>q*nUUI5RQI8i)+wHr`Y z+Gb>jc36Vj4M_|sNt7l^Mkd;^q5+BGvZ8@Si4r!VxTvh4aKHfMmEuag*$u2a`!8<% z-+(_cYz>0M;6z!XP4UnHaMNg5$y{@z@F$7lq3X}sL4qVO(`dwEBBgFuMA*`slEOAw$ zMAOL!72Q}ay9s~p*9tcm+Tk_v8*gOIn&A&4uV7ueuw48xWEa*M{~?^NtX)xY|G^^$ zBv=!j$YD(eBnB20Cs^CIZP~Dr1S-(Kps?gB)_>@bA!rIVU}*mlGJ)WS6%0;{ObjlN z!3-=KoG2KXC@C!(TFlUdLrbnJP|a9aMyis;z(k3xUcunPe(*9B)My5l`H2CFm+}ya zYDZQeO+nueB{9|JQm4~NOPwkhSvYt^!fUMliNS+QS%Gdlg0i5}K<6;Cx!n$91&M3X zD5bKF{R`n~V6>8K8FWW!8QQCOKoM0O-E0_*C@w_17>a&HK@CP?5yDeFqq`u8(Mw+U z3>;D1pGqn)mBR{43WuPD-0ni_4oei4bzp8&E8sPe&NW-5)bk09T5TNCK%R@QF+8oV zjS9|F>q%8O7}KH{!)0WGX#y`%nru=^d6Pxgp2<-thYlN@7+A)N3x^~a4V%KUp(RWf zi3y5PGpw-eYF1Ko)zxK84Gp;p7zeq9#v(}nAszTn>B~EU&UKWQ;4-00ULHyLW|}t1 VuYJt0y Date: Mon, 24 Apr 2023 20:22:42 -0500 Subject: [PATCH 173/179] 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 589217e26a0a..a9844e97c53b 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 174/179] 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 32be2a278f4e..cb086b4cc1ce 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 175/179] 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 cb086b4cc1ce..5f67bf114bec 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 176/179] 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 5f67bf114bec..63ba968b445b 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 e34f8a533cc9..e15e2de0c9a9 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 d126e38aa1e2..a68bf26a9b98 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 177/179] 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 a7037d0cfd82..c7bdc401b662 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 178/179] 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 4380a33a901b..1c84777d757f 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 909fd20de878..da25fc096ca0 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 53119d8247f1..005d75fd43b9 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 ac073c598695..a7c0d8a9964e 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 a5347b96a1b7..5a5ae5a55a09 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 179/179] 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 ced31e6f67ef..8fc7ed58d508 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 000000000000..4963f6784f22 --- /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 000000000000..39343136d22e --- /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 586e0d95c799..d43d716bf643 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 d2121273724a..b8e720449284 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 = \