Merge branch 'master' into i18n

This commit is contained in:
Thomas Göttgens 2023-06-06 10:46:05 +02:00 committed by GitHub
commit 272578e724
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 1304 additions and 1297 deletions

View file

@ -105,7 +105,7 @@ Each [supported device](/docs/hardware/devices/tbeam) has a "Purchase Link".
### How do I update the firmware to the latest version?
If the device is running Meshtastic firmware, you might be able to update over-the-air like via the Android app.
Updating firmware varies with hardware. See [Flashing Firmware](/docs/getting-started/flashing-firmware).
### My device has gone to sleep. Are received messages lost?

View file

@ -11,7 +11,7 @@ Meshtastic® is a project that enables you to use inexpensive LoRa radios as a l
### Features
- Long range ([_166km record by PuzzledPancake_](/docs/overview/range-tests#current-record))
- Long range ([_206km record by StarWatcher, CVR, rook, kboxlabs_](/docs/overview/range-tests#current-record))
- No phone required for mesh communication
- Decentralised communication - no dedicated router required
- Encrypted communication

View file

@ -28,7 +28,7 @@ The maximum power allowed for Europe is +14 dBm ERP ([Effective Radiated Power](
The band range is from 433 to 434 MHz.
There are four channels defined with the standard radio preset `LongFast`. After factory reset the radio will be set to channel 3 with a center frequency of 433.875 MHz.
There are four channels defined with the standard radio preset `LongFast`. After factory reset the radio will be set to channel 4 with a center frequency of 433.875 MHz.
### 868 MHz
@ -36,7 +36,7 @@ The maximum power allowed for Europe is +27 dBm ERP ([Effective Radiated Power](
The band range is from 869.40 to 869.65 MHz. This is less than the 863870 MHz range defined as SRD Band, but allows for a higher ERP and a duty cycle of 10%.
There is one channel defined with the standard radio preset `LongFast`. After factory reset the radio will be set to channel 0 with a center frequency of 869.525 MHz.
There is one channel defined with the standard radio preset `LongFast`. After factory reset the radio will be set to channel 1 with a center frequency of 869.525 MHz.
## North America Frequency Bands
@ -46,7 +46,7 @@ The maximum output power for North America is +30 dBm ERP ([Effective Radiated P
The band range is from 902 to 928 MHz.
There are 104 channels defined with the standard radio preset `LongFast`. After factory reset the radio will be set to channel 19 with a center frequency of 906.875 MHz.
There are 104 channels defined with the standard radio preset `LongFast`. After factory reset the radio will be set to channel 20 with a center frequency of 906.875 MHz.
## Data Rates

View file

@ -8,10 +8,43 @@ sidebar_position: 4
## Current Record
- **Range:** 206km (128 miles)
- **Record Holders:** _StarWatcher, CVR, rook, kboxlabs_
- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/130)
### Modem Settings
Default Long_Fast
- **Frequency:** 915MHz
- **Bandwidth:** 250
- **Spread Factor:** 11
- **Coding Rate:** 4/8
### Node A
- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam)
- **Firmware Version:** 2.1.10
- **Antenna:** Stock Antenna
### Node B
- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam)
- **Firmware Version:** 2.1.10 (modified to place GPS in flight mode)
- **Antenna:** Stock Antenna
<img src="/img/records/Devices-Balloon.png" alt="Nodes and Balloon" />
<img src="/img/records/app-screenshots.png" alt="App Screenshots" />
## Previous Record
- **Range:** 166km (103 miles)
- **Record Holder:** _PuzzledPancake_
- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/44)
<!-- trunk-ignore(markdownlint/MD024) -->
### Modem Settings
- **Frequency:** 868MHz
@ -19,12 +52,14 @@ sidebar_position: 4
- **Spread Factor:** 12
- **Coding Rate:** 4/8
<!-- trunk-ignore(markdownlint/MD024) -->
### Node A
- **Device:** [LILYGO TTGO T-Beam w/ SX1262](/docs/hardware/devices/tbeam)
- **Firmware Version:** 1.2
- **Antenna:** [868MHz 5dBi Antenna](https://ivent.co.nz/product/category/1000/868mhz%205dbi%20antenna%20193mm%20black%20sma%20%28m%29/38646)
<!-- trunk-ignore(markdownlint/MD024) -->
### Node B
- **Device:** [LILYGO TTGO T-Beam w/ SX1262](/docs/hardware/devices/tbeam)

View file

@ -66,6 +66,10 @@ This is the number of seconds between NodeInfo message broadcasts from the devic
This option will enable a double tap, when a supported accelerometer is attached to the device, to be treated as a button press.
### Managed Mode
Enabling Managed mode will restrict access to all radio configurations via client applications. Radio configurations will only be accessible through the Admin channel. To avoid being locked out, make sure the Admin channel is working properly before enabling it.
## Device Config Client Availability
<Tabs
@ -114,6 +118,7 @@ All device config options are available in the python CLI. Example commands are
| device.buzzer_gpio | `0` - `34` | `0` |
| device.node_info_broadcast_secs | `0` - `UINT MAX` | `10800` (3 hours) |
| device.double_tap_as_button_press | `false`, `true` | `false` |
| device.is_managed | `false`, `true` | `false` |
:::tip

View file

@ -59,7 +59,7 @@ The procedure using the python command line tool is:
meshtastic --seturl theurlyoucopiedinstep3
```
Now both devices should be able to talk over the `gpio` channel. Send a text message from one the other other verify. Also run `--nodes` to verify the second node shows up.
Now both devices should be able to talk over the `gpio` channel. Send a text message from one to the other to verify. Also run `--nodes` to verify the second node shows up.
### Masks
@ -132,9 +132,9 @@ You can add a simple LED and resistor to validate that the GPIO operations work
### Preparation
1. Disconnect the remote device from power (battery/usb)
2. Add a resistor from yellow wire to the one end of the LED (either end of the resistor is OK, either end of the LED is OK)
3. Add the yellow wire from a GPIO pin that will not cause any issues (ex: for TLoraV1, we can use GPIO21)
4. Add the black "ground" wire from the ground pin on the device (ex: for TLoraV1 it is the end pin next to the RST button) to the other end of the LED
2. Connect the resistor to the longer (positive) lead of the LED and the yellow wire to the other end of the resistor
3. Connect the other end of the yellow wire to a GPIO pin that will not cause any issues (ex: for TLoraV1, we can use GPIO21)
4. Connect the black "ground" wire from the ground pin on the device (ex: for TLoraV1 it is the end pin next to the RST button) to the shorter (negative) lead of the LED
5. Power on the device
### Validation

View file

@ -27,7 +27,7 @@ This module can also be configured to beep only when message contains the bell c
### Messages
The list of pre-set messages, up to 200 bytes.
The list of pre-set messages as configured by the user. Messages should be separated by pipes `|`. The total byte count for the message list can be up to 200 bytes
### Input Source
@ -117,8 +117,7 @@ Example commands are below:
| canned_message.enabled | `true`, `false` | `false` |
| canned_message.send_bell | `true`, `false` | `false` |
| canned_message.allow_input_source | `rotEnc1`, `_any`, `upDownEnc1`, `cardkb` | `_any` |
| canned_message.messages | `string` | `""` |
| (Messages)\* | `string` | `""` |
| canned_message.messages | `string` | `""` (separate using pipes) |
| canned_message.inputbroker_event_cw | `InputEventChar` | (not defined) |
| canned_message.inputbroker_event_ccw | `InputEventChar` | (not defined) |
| canned_message.inputbroker_event_press | `InputEventChar` | (not defined) |
@ -147,7 +146,7 @@ meshtastic --set canned_message.send_bell false
```
```shell title="Set Messages"
meshtastic --set-canned-message "I need an alpinist!|Call Me|Roger Roger|Keep Calm|On my way"
meshtastic --set canned_message.messages "I need an alpinist!|Call Me|Roger Roger|Keep Calm|On my way"
```
```shell title="Set Input Source"

View file

@ -35,6 +35,7 @@ Available Values:
- `PROTO` Exposes the Protobuf Client API on this serial port. You can use this to connect from another device. [API Reference](/docs/development/device/client-api)
- `TEXTMSG` Will send the string received over the serial port as a Text Message for Display on the other devices.
- `NMEA` Will output a NMEA 0183 Data stream containing the internal GPS or fixed position and other node locations as Waypoints (WPL).
- `CALTOPO` Will output NMEA 0183 Waypoints (WPL) every 10 seconds for all valid node locations, to be consumed by [CalTopo / SARTopo](https://caltopo.com/)
### Receive GPIO Pin
@ -56,6 +57,10 @@ The serial baud rate.
The amount of time to wait before we consider your packet as "done".
### Override Console Serial Port
If set to true, this will allow Serial Module to control (set baud rate) and use the primary USB serial bus for output. This is only useful for NMEA and CalTopo modes and may behave strangely or not work at all in other modes. Setting TX/RX pins in the Serial Module config will cause this setting to be ignored.
:::tip
Once module settings are changed, a **reset** is required for them to take effect.
:::
@ -102,11 +107,13 @@ All serial module config options are available in the python CLI. Example comman
| :------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------: |
| serial.enabled | `true`, `false` | `false` |
| serial.echo | `true`, `false` | `false` |
| serial.mode | `DEFAULT` `SIMPLE` `PROTO` `TEXTMSG`, `NMEA` | `DEFAULT` |
| serial.mode | `DEFAULT` `SIMPLE` `PROTO` `TEXTMSG`, `NMEA`, `CALTOPO` | `DEFAULT` |
| serial.rxd | GPIO Pin Number 1-39 | Default of `0` is Unset |
| serial.txd | GPIO Pin Number 1-33 | Default of `0` is Unset |
| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` |
| serial.timeout | `integer` (milli seconds) | Default of `0` corresponds to 250 ms |
| serial.override_console_serial_port | `true`, `false` | `false` |
:::tip

View file

@ -177,7 +177,7 @@ meshtastic --set telemetry.environment_measurement_enabled true --set telemetry.
:::tip
You can change the values above to suit your needs but it is recommended that commands be chained together as one as shown.
While the above values serve as an example and can be modified to fit your specific needs, it is advisable to chain multiple commands together, as demonstrated in the example. This approach will minimize the number of necessary reboots.
:::

View file

@ -27,7 +27,9 @@ values={[
]}>
<TabItem value="android">
Not yet implemented.
Make sure the app is at least version 2.1.10.
Under the node list, long hold a destination node and select 'Traceroute' to send the request. Depending on the amount of hops that is needed, this might take a while. The result will be shown using a pop-up.
</TabItem>
<TabItem value="apple">

View file

@ -31,7 +31,7 @@ The receiver will validate length and if >512 it will assume the packet is corru
This is the main Bluetooth service for the device and provides the API your app should use to get information about the mesh, send packets, or provision the radio.
For a reference implementation of a client that uses this service see [RadioInterfaceService](https://github.com/meshtastic/Meshtastic-Android/blob/master/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt).
For a reference implementation of a client that uses this service see [RadioInterfaceService](https://github.com/meshtastic/Meshtastic-Android/blob/master/app/src/main/java/com/geeksville/mesh/repository/radio/RadioInterfaceService.kt).
Typical flow when a phone connects to the device should be the following (if you want to watch this flow from the python app just run `meshtastic --debug --info` - the flow over BLE is identical):
@ -53,7 +53,7 @@ Expected sequence for initial download:
- Read a endConfig packet that indicates that the entire state you need has been sent
- Read a series of MeshPackets until it returns empty to get any messages that arrived for this node while the phone was away
For definitions (and documentation) on FromRadio, ToRadio, MyNodeInfo, NodeInfo and User protocol buffers see [mesh.proto](https://github.com/meshtastic/protobufs/blob/master/mesh.proto)
For definitions (and documentation) on FromRadio, ToRadio, MyNodeInfo, NodeInfo and User protocol buffers see [mesh.proto](https://github.com/meshtastic/protobufs/blob/master/meshtastic/mesh.proto)
UUID for the service: 6ba1b218-15a8-461f-9fa8-5dcae273eafd

View file

@ -13,9 +13,6 @@ import Link from "@docusaurus/Link";
Make sure not to power the radio on without first attaching the antenna! You could damage the radio chip!
:::
For ESP32 devices if the device already has a version of Meshtastic installed using the OTA firmware upgrade tool in the Android app is the friendliest path for users. OTA firmware updates are not yet available on Apple platforms.
If your ESP32 device does not have Meshtastic pre-installed flashing
Before you flash your device start by verifying connectivity with the device being flashed. Outlined below are steps that can be taken to verify connectivity and, if necessary, to install the appropriate drivers. If you end up needing to install drivers be sure to reboot your computer afterwards to verify the installation is complete.
:::note

View file

@ -8,3 +8,5 @@ sidebar_label: Trademark Grants
- Details: Meshtastic.pt is a fan page created before the trademark usage guidelines were authored. Agreement with Sérgio Matos that meshtastic.pt may continue use of meshtastic in domain name provided they stay non commercial and maintain that they are non-official. The grant is revokable at any time for any reason.
- Grant: https://meshbrasil.com
- Details: Meshbrasil.com is an online shop for Meshtastic powered devices and accessories which carry the "Powered by Meshtastic" logo. The use of the Meshtastic Logo and Trademarks does not imply Meshbrasil.com is sponsored or endorsed by Meshtastic. Meshbrasil.com also agrees to maintain compliance with the Meshtastic Legal requirements. This grant is revokable at any time for any reason.
- Grant: [Garth Vander Houwen](https://garthvh.com/store/)
- Details: Garth is a member of the Meshtastic LLC, is the developer of the iOS app and runs an online shop for Meshtastic powered devices which carry the "Powered by Meshtastic" and "Chirpy" logo. The use of the Meshtastic Logo and Trademarks does not imply Garth is sponsored or endorsed by Meshtastic. Garth also agrees to maintain compliance with the Meshtastic Legal requirements. This grant is revokable at any time for any reason.

View file

@ -0,0 +1,26 @@
---
id: meshtastic-web-api
title: Meshtastic Web API
sidebar_label: Meshtastic Web API
sidebar_position: 3
---
:::note
This is a community project maintained by @bmswens.
Development can be followed on [GitHub](https://github.com/bmswens/Meshtastic-Web-API).
Support should be sought from the respective authors.
:::
## Overview
Meshtastic Web API provides a RESTful interface to interact with a Meshtastic node via a serial connection.
## Links
- [Source](https://github.com/bmswens/Meshtastic-Web-API)
- [API Docs](https://bmswens.github.io/Meshtastic-Web-API/)
- [Installation Instructions](https://github.com/bmswens/Meshtastic-Web-API/wiki/Installation)
- [Supported Services](https://github.com/bmswens/Meshtastic-Web-API/wiki/Supported-Services)
* Mattermost

View file

@ -15,7 +15,7 @@ The [Meshtastic-python repo](https://github.com/meshtastic/Meshtastic-python) an
If you wish to view the code or contribute to development of the python library or the command line interface, please visit the Meshtastic python [GitHub page](https://github.com/meshtastic/Meshtastic-python).
There are standalone executables for Mac, Windows and Ubuntu if you do not want to install python and/or the python libraries required to run the mestastic CLI tool. See [Standalone](#standalone) for more information.
There are standalone executables for Windows and Ubuntu if you do not want to install python and/or the python libraries required to run the mestastic CLI tool. See [Standalone](#standalone) for more information.
Installation can also be easily done through the [Python package installer pip](https://pypi.org/project/meshtastic):
:::note
@ -206,7 +206,7 @@ You may need to close and re-open the CLI. The path variables may or may not upd
## Standalone
There are standalone executable files for Mac, Windows and Ubuntu. A single file is all you need to run the command line interface (CLI) Meshtastic tool. There is a zip file per operating system. To use, see the operating system specific notes below:
There are standalone executable files for Windows and Ubuntu. A single file is all you need to run the command line interface (CLI) Meshtastic tool. There is a zip file per operating system. To use, see the operating system specific notes below:
They can be found on the [Releases](https://github.com/meshtastic/Meshtastic-python/releases) page.
@ -215,7 +215,6 @@ groupId="operating-system"
defaultValue="windows"
values={[
{label: 'Ubuntu', value: 'ubuntu'},
{label: 'macOS', value: 'macos'},
{label: 'Windows', value: 'windows'},
]}>
<TabItem value="ubuntu">
@ -238,52 +237,6 @@ chmod +x meshtastic_ubuntu && mv meshtastic_ubuntu meshtastic
Copy (or move) this binary somewhere in your path.
:::
</TabItem>
<TabItem value="macos">
- Download meshtastic_mac
- Run the following command to make the file executable and to rename it 'meshtastic':
```shell
chmod +x meshtastic_mac && mv meshtastic_mac meshtastic
```
- Try to run it:
```shell
./meshtastic
```
:::note
You may get a dialog that says:
"meshtastic" can't be opened because Apple cannot check it for malicious software.
:::
- To fix, go into "System Preferences", "Security & Privacy", "General" tab, and click on the "Allow Anyway" button.
- Try to run it again:
```shell
./meshtastic
```
:::note
You may get a dialog that says:
"meshtastic" can't be opened because Apple cannot check it for malicious software.
Click "Open".
:::
- Now when you want to run it, you can simply run:
```shell
./meshtastic
```
:::tip
Copy (or move) this binary somewhere in your path.
:::
</TabItem>
<TabItem value="windows">

View file

@ -16,7 +16,7 @@ There are three ways of accessing the app:
## Compatibility
The application will work in all major browsers, but specific functionality is limited in some cases, for the best experience we recommend using [Google Chrome](https://www.google.com/chrome).
The application will work in all major browsers, but specific functionality is limited in some cases. For the best experience we recommend using a Chromium based browser such as [Google Chrome](https://www.google.com/chrome) or [Microsoft Edge](https://www.microsoft.com/en-us/edge).
### HTTP
@ -24,8 +24,8 @@ This method of connecting is limited to esp32 devices.
:::caution
When using the [hosted](https://client.meshtastic.org) version of the application, all traffic must be served over HTTPS,
as Meshtastic nodes generate self-signed certificates, you must inform your browser that you wish to trust the aforementioned certificate.
When using the [hosted](https://client.meshtastic.org) version of the application, all traffic must be served over HTTPS.
Meshtastic nodes generate self-signed certificates, and you must inform your browser that you wish to trust the aforementioned certificate.
This can be done by first accessing your node directly via your browser: `https://NODE_IP_ADDRESS/` replacing `NODE_IP_ADDRESS` with the IP address of your node.
This can be found on the screen of the device, via your router's DHCP lease page or serial console.
@ -35,13 +35,13 @@ You can accessing your device over HTTP after you set up your [Network Connectio
### Bluetooth
Bluetooth support is governed by the availability of the [Web Bluetooth API](https://web.dev/bluetooth) as illustrated blow, support is primarily available in Chromium browsers
Bluetooth support is governed by the availability of the [Web Bluetooth API](https://web.dev/bluetooth) as illustrated below. Support is primarily available in Chromium based browsers.
![Web Bluetooth compatibility matrix](https://caniuse.bitsofco.de/image/web-bluetooth.png)
### Serial (USB)
The method with the least platform support, uses the [Web Serial API](https://web.dev/serial) allows us to connect directly to a Meshtastic node over USB, accessing it directly within your browser.
The method with the least platform support, which uses the [Web Serial API](https://web.dev/serial), allows us to connect directly to a Meshtastic node over USB and access it from directly within your browser.
![Web Serial compatibility matrix](https://caniuse.bitsofco.de/image/web-serial.png)

View file

@ -17,11 +17,11 @@
"dependencies": {
"@algolia/client-search": "^4.17.0",
"@crowdin/cli": "^3.2.2",
"@docusaurus/core": "2.4.0",
"@docusaurus/plugin-content-docs": "2.4.0",
"@docusaurus/preset-classic": "2.4.0",
"@docusaurus/theme-common": "^2.4.0",
"@docusaurus/theme-mermaid": "^2.4.0",
"@docusaurus/core": "2.4.1",
"@docusaurus/plugin-content-docs": "2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/theme-common": "^2.4.1",
"@docusaurus/theme-mermaid": "^2.4.1",
"@headlessui/react": "^1.7.14",
"@heroicons/react": "^2.0.18",
"@mdx-js/react": "^1.6.22",
@ -41,10 +41,10 @@
"use-breakpoint": "^3.0.7"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.4.0",
"@docusaurus/module-type-aliases": "2.4.1",
"@tailwindcss/typography": "^0.5.9",
"@tsconfig/docusaurus": "^1.0.7",
"@types/node": "^20.1.4",
"@types/node": "^20.1.7",
"@types/react": "^18.2.6",
"@types/react-dom": "^18.2.4",
"rome": "^12.1.0",

File diff suppressed because it is too large Load diff

View file

@ -263,16 +263,24 @@ export const FrequencyCalculator = (): JSX.Element => {
useEffect(() => {
const selectedRegion = RegionData.get(region);
const selectedModemPreset = modemPresets.get(modemPreset);
setNumChannels(
Math.floor(
(selectedRegion.freq_end - selectedRegion.freq_start) /
(selectedRegion.spacing + selectedModemPreset.bw / 1000),
),
const calculatedNumChannels = Math.floor(
(selectedRegion.freq_end - selectedRegion.freq_start) /
(selectedRegion.spacing + selectedModemPreset.bw / 1000),
);
setNumChannels(calculatedNumChannels);
let updatedChannel = channel;
if (updatedChannel >= calculatedNumChannels) {
updatedChannel = 0;
}
setChannel(updatedChannel);
setChannelFrequency(
selectedRegion.freq_start +
selectedModemPreset.bw / 2000 +
channel * (selectedModemPreset.bw / 1000),
updatedChannel * (selectedModemPreset.bw / 1000),
);
}, [modemPreset, region, channel]);
@ -323,6 +331,7 @@ export const FrequencyCalculator = (): JSX.Element => {
))}
</select>
</div>
<div className="flex gap-2">
<label className="font-semibold">Number of channels:</label>
<input type="number" disabled value={numChannels} />

View file

@ -37,23 +37,6 @@ const Firmware = (): JSX.Element => {
<BoltIcon className="m-auto h-20" />
</div>
<div className="flex w-full flex-col bg-primary xl:flex-row">
<div className="card m-4 border-2 border-secondary">
<div className="card__header">
<h3>Meshtastic Flasher</h3>
</div>
<div className="card__body">
<p>Desktop application to flash fimware to your devices.</p>
</div>
<div className="card__footer mt-auto">
<a
href="https://github.com/meshtastic/Meshtastic-gui-installer/releases/latest"
className="m-auto flex rounded-lg border-4 border-transparent bg-accent p-1 font-semibold text-black shadow-md hover:text-black hover:brightness-110 active:border-green-200"
>
Download
<ArrowTopRightOnSquareIcon className="m-auto ml-2 h-4" />
</a>
</div>
</div>
<div className="card m-4 border-2 border-secondary">
<div className="card__header">
<h3>ESP32 Web Flasher</h3>
@ -75,7 +58,7 @@ const Firmware = (): JSX.Element => {
</a>
</div>
</div>
<div className="card m-4 border-2 border-secondary">
<div className="card m-4 border-2 border-secondary w-full">
<div className="card__header">
<h3>nRF52 Drag & Drop</h3>
</div>
@ -214,7 +197,7 @@ const Firmware = (): JSX.Element => {
</div>
<div className="card__footer mt-auto">
<a
href="https://nightly.link/meshtastic/firmware/workflows/main/master/built.zip"
href="https://nightly.link/meshtastic/firmware/workflows/main_matrix/master"
className="button button--secondary button--block"
>
Download Bleeding

View file

@ -28,20 +28,18 @@ const Hardware = (): JSX.Element => {
</h3>
<div className="mt-4 sm:mt-0 sm:ml-10">
<nav className="-mb-px flex space-x-8">
<a
href="#"
<button
className="border-indigo-500 text-indigo-600"
aria-current={"page"}
>
Devices
</a>
<a
href="#"
</button>
<button
className="hover:border-gray-300', 'whitespace-nowrap border-b-2 border-transparent
px-1 pb-4 text-sm font-medium text-gray-500 hover:text-gray-700"
>
Antennas
</a>
</button>
</nav>
</div>
</div>
@ -51,9 +49,9 @@ const Hardware = (): JSX.Element => {
role="list"
className="grid grid-cols-2 gap-x-2 gap-y-4 sm:grid-cols-3 sm:gap-x-6 lg:grid-cols-4 xl:grid-cols-5 xl:gap-x-4"
>
{hardware.map((device, index) => (
{hardware.map((device) => (
<HardwareCard
key={index}
key={device.name}
device={device}
setDevice={(): void => {
setModalData(device);

View file

@ -117,6 +117,17 @@ const SocialCards: SocialCardProps[] = [
/>
),
},
{
color: "bg-[#ffffff]",
link: "https://www.instagram.com/themeshtastic/",
children: (
<img
alt="instagram"
className="m-auto h-14"
src="/img/homepage/Instagram_Glyph_Gradient.svg"
/>
),
},
{
color: "bg-[#FF0000]",
link: "https://www.youtube.com/meshtastic",
@ -150,17 +161,6 @@ const SocialCards: SocialCardProps[] = [
/>
),
},
{
color: "bg-[#ffffff]",
link: "https://github.com/meshtastic",
children: (
<img
alt="github"
className="m-auto w-12"
src="/img/homepage/GitHub-Logo-White.svg"
/>
),
},
];
function Home() {

View file

@ -12,7 +12,7 @@ export const Card = React.memo(({ network }: CardProps) => (
<div className="card">
<div className="card__image">
<div style={{ height: "140px" }}>
<img img={mapUrl(network.nodes ?? [])} alt={network.title} />
<img src={mapUrl(network.nodes ?? [])} alt={network.title} />
</div>
</div>
<div className="card__body">
@ -76,12 +76,12 @@ export const PlaceholderCard = (): JSX.Element => (
/>
</div>
<div className="card__footer">
<a
<button
className="button disabled button--primary button--block"
style={{ marginBottom: "0.5rem" }}
>
&nbsp;
</a>
</button>
<div
style={{
display: "flex",

View file

@ -9,11 +9,11 @@ export interface CardTagsProps {
export const CardTags = ({ tags }: CardTagsProps) => {
return (
<div>
{tags.map(({ color, label }, index) => {
{tags.map(({ color, label }) => {
return (
<span
className="badge"
key={index}
key={label}
style={{
backgroundColor: color,
marginRight: "0.3rem",

View file

@ -29,13 +29,13 @@ export const Filters = (): JSX.Element => {
flexWrap: "wrap",
}}
>
{data.map((tag, i) => {
{data.map((tag) => {
const { label, color } = tag;
const id = `showcase_checkbox_id_${tag};`;
return (
<div
key={i}
key={tag.id}
style={{
boxSizing: "border-box",
position: "relative",

View file

@ -61,9 +61,9 @@ export const Network = ({ id }: NetworkProps): JSX.Element => {
<h2>Bill of Materials</h2>
</div>
<div className="card__body">
{data.materials?.map((material, index) => (
{data.materials?.map((material) => (
<div
key={index}
key={material.id}
style={{
borderTop: "2px solid gray",
display: "flex",

View file

@ -86,8 +86,8 @@ const OEM = (): JSX.Element => {
setOemFont(parseInt(e.target.value));
}}
>
{enumOptions.map(([name, value], index) => (
<option key={index} value={value}>
{enumOptions.map(([name, value]) => (
<option key={name} value={value}>
{name}
</option>
))}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

View file

@ -1,3 +1,6 @@
{
"compilerOptions": {
"moduleResolution": "node"
},
"extends": "@tsconfig/docusaurus/tsconfig.json"
}