Browse Source
Create codes documentation for standardized keys. Closes #218. Fixes #308. Ref #21.xmkb
innovaker
4 years ago
committed by
Pete Johanson
44 changed files with 9578 additions and 3 deletions
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import Table from "@site/src/components/codes/Table"; |
||||
|
||||
## Application Controls |
||||
|
||||
<Table group="application-controls" /> |
||||
|
||||
## Applications (Launch) |
||||
|
||||
<Table group="applications" /> |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
import Table from "@site/src/components/codes/Table"; |
||||
|
||||
## Cut, Copy, Paste |
||||
|
||||
<Table group="cut-copy-paste" /> |
||||
|
||||
## Undo, Redo |
||||
|
||||
<Table group="undo-redo" /> |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
This is an _example_ footnote for **code** tables. |
||||
|
||||
- Footnotes are supported per row by each operating system column. |
||||
- Footnotes support MDX syntax. |
||||
- A footnote's `id` is its filename by convention (i.e. `example`). |
||||
- Footnotes must be included and listed in `src/data/footnotes.js` because they're statically compiled. |
||||
- Footnotes are assigned within `src/data/hid.js` using `column-id: footnote-id(s)` `K`:`V` pairs (case-sensitive), where: |
||||
- `K` is the column's `id`. |
||||
- `V` is the footnote's `id`. |
||||
- `V` can also be an array of footnote ids (_optional_). |
||||
- The footnote system aims to prevent duplication of _sources_ (mdx). |
||||
- Footnotes are listed under each table, so try to avoid multiline notes unless it's necessary! |
||||
- Footnotes are automatically numbered. |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
import Table from "@site/src/components/codes/Table"; |
||||
|
||||
## Input Assist |
||||
|
||||
<Table group="input-assist" /> |
@ -0,0 +1,59 @@
@@ -0,0 +1,59 @@
|
||||
import Table from "@site/src/components/codes/Table"; |
||||
|
||||
## Keyboard |
||||
|
||||
### Letters |
||||
|
||||
<Table group="keyboard-letters" /> |
||||
|
||||
### Numbers |
||||
|
||||
<Table group="keyboard-numbers" /> |
||||
|
||||
### Symbols / Punctuation |
||||
|
||||
<Table group="keyboard-symbols" /> |
||||
|
||||
### Control & Whitespace |
||||
|
||||
<Table group="keyboard-control-whitespace" /> |
||||
|
||||
### Navigation |
||||
|
||||
<Table group="keyboard-navigation" /> |
||||
|
||||
### Modifiers |
||||
|
||||
<Table group="keyboard-modifiers" /> |
||||
|
||||
### Locks |
||||
|
||||
<Table group="keyboard-locks" /> |
||||
|
||||
### F Keys |
||||
|
||||
<Table group="keyboard-fkeys" /> |
||||
|
||||
### International |
||||
|
||||
<Table group="keyboard-international" /> |
||||
|
||||
### Language |
||||
|
||||
<Table group="keyboard-language" /> |
||||
|
||||
### Miscellaneous |
||||
|
||||
<Table group="keyboard-miscellaneous" /> |
||||
|
||||
## Keypad |
||||
|
||||
<Table group="keypad" /> |
||||
|
||||
### Numbers |
||||
|
||||
<Table group="keypad-numbers" /> |
||||
|
||||
### Symbols / Operations |
||||
|
||||
<Table group="keypad-operations" /> |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
import Table from "@site/src/components/codes/Table"; |
||||
|
||||
## Sound / Volume |
||||
|
||||
<Table group="sound" /> |
||||
|
||||
## Display |
||||
|
||||
<Table group="display" /> |
||||
|
||||
## Media Controls |
||||
|
||||
<Table group="media-controls" /> |
||||
|
||||
## Consumer Menus |
||||
|
||||
<Table group="consumer-menus" /> |
||||
|
||||
## Consumer Controls |
||||
|
||||
<Table group="consumer-controls" /> |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
import Table from "@site/src/components/codes/Table"; |
||||
|
||||
## Power & Lock |
||||
|
||||
<Table group="power" /> |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
--- |
||||
title: Applications |
||||
sidebar_label: Applications |
||||
hide_title: true |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Content, { rightToc as contentToc } from "./_applications.mdx"; |
||||
|
||||
export const rightToc = contentToc; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Content /> |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
--- |
||||
title: Editing |
||||
sidebar_label: Editing |
||||
hide_title: true |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Content, { rightToc as contentToc } from "./_editing.mdx"; |
||||
|
||||
export const rightToc = contentToc; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Content /> |
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
--- |
||||
title: Codes |
||||
sidebar_label: Full List |
||||
hide_title: true |
||||
slug: ./ |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Key, { rightToc as keyToc } from "./_keyboard-keypad.mdx"; |
||||
import Editing, { rightToc as editingToc } from "./_editing.mdx"; |
||||
import Media, { rightToc as mediaToc } from "./_media.mdx"; |
||||
import Applications, { rightToc as applicationsToc } from "./_applications.mdx"; |
||||
import InputAssist, { rightToc as inputAssistToc } from "./_input-assist.mdx"; |
||||
import Power, { rightToc as powerToc } from "./_power.mdx"; |
||||
|
||||
export const rightToc = [ |
||||
...keyToc, |
||||
...editingToc, |
||||
...mediaToc, |
||||
...applicationsToc, |
||||
...inputAssistToc, |
||||
...powerToc, |
||||
]; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Key /> |
||||
<Editing /> |
||||
<Media /> |
||||
<Applications /> |
||||
<InputAssist /> |
||||
<Power /> |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
--- |
||||
title: Input Assist |
||||
sidebar_label: Input Assist |
||||
hide_title: true |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Content, { rightToc as contentToc } from "./_input-assist.mdx"; |
||||
|
||||
export const rightToc = contentToc; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Content /> |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
--- |
||||
title: Keyboard & Keypad |
||||
sidebar_label: Keyboard & Keypad |
||||
hide_title: true |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Content, { rightToc as contentToc } from "./_keyboard-keypad.mdx"; |
||||
|
||||
export const rightToc = contentToc; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Content /> |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
--- |
||||
title: Media |
||||
sidebar_label: Media |
||||
hide_title: true |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Content, { rightToc as contentToc } from "./_media.mdx"; |
||||
|
||||
export const rightToc = contentToc; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Content /> |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
--- |
||||
title: Power |
||||
sidebar_label: Power |
||||
hide_title: true |
||||
--- |
||||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend"; |
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer"; |
||||
import Content, { rightToc as contentToc } from "./_power.mdx"; |
||||
|
||||
export const rightToc = contentToc; |
||||
|
||||
<OsLegend /> |
||||
<ToastyContainer /> |
||||
<Content /> |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
|
||||
export default function Context({ children }) { |
||||
return <p className="context">{children}</p>; |
||||
} |
||||
|
||||
Context.propTypes = { |
||||
children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) |
||||
.isRequired, |
||||
}; |
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
|
||||
const specialCharactersRegex = /(?:^|\s)((?:&(?:(?:\w+)|(?:#\d+));)|[_]|[^\w\s])(?:\s*\[([^[\]]+?)\])/g; |
||||
|
||||
function renderSpecialCharacters(description) { |
||||
const matches = Array.from(description.matchAll(specialCharactersRegex)); |
||||
if (matches.length == 0) return description; |
||||
let lastIndex = 0; |
||||
const parts = matches.reduce((acc, match, i) => { |
||||
const { index } = match; |
||||
const str = match[0]; |
||||
const chars = match[1]; |
||||
const meaning = match[2]; |
||||
if (index != lastIndex) { |
||||
acc.push(description.substring(lastIndex, index)); |
||||
} |
||||
const pos = str.indexOf(chars); |
||||
if (pos > 0) { |
||||
acc.push(description.substr(index, pos)); |
||||
} |
||||
acc.push( |
||||
<span key={i} className="symbol" title={meaning ?? ""}> |
||||
<code>{description.substr(index + pos, chars.length)}</code> |
||||
{meaning ? <span className="meaning">{meaning}</span> : undefined} |
||||
</span> |
||||
); |
||||
lastIndex = index + str.length; |
||||
return acc; |
||||
}, []); |
||||
if (lastIndex < description.length) { |
||||
parts.push(description.substr(lastIndex)); |
||||
} |
||||
return parts; |
||||
} |
||||
|
||||
export default function Description({ description = "" }) { |
||||
return ( |
||||
<span className="description">{renderSpecialCharacters(description)}</span> |
||||
); |
||||
} |
||||
|
||||
Description.propTypes = { |
||||
description: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
|
||||
export default function Footnote({ children, symbol, id }) { |
||||
return ( |
||||
<div className="footnote" id={id}> |
||||
<div className="symbol">{symbol}</div> |
||||
<div className="content">{children}</div> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
Footnote.propTypes = { |
||||
children: PropTypes.element.isRequired, |
||||
symbol: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, |
||||
id: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
|
||||
export default function FootnoteRef({ children, anchor }) { |
||||
return ( |
||||
<a href={"#" + anchor} className="footnoteRef"> |
||||
{children} |
||||
</a> |
||||
); |
||||
} |
||||
|
||||
FootnoteRef.propTypes = { |
||||
children: PropTypes.oneOfType([PropTypes.string, PropTypes.number]) |
||||
.isRequired, |
||||
anchor: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import FootnoteRef from "./FootnoteRef"; |
||||
|
||||
function joinReactElements(arr, delimiter) { |
||||
return arr.reduce((acc, fragment) => { |
||||
if (acc === null) { |
||||
return fragment; |
||||
} |
||||
return ( |
||||
<> |
||||
{acc} |
||||
{delimiter} |
||||
{fragment} |
||||
</> |
||||
); |
||||
}, null); |
||||
} |
||||
|
||||
export default function FootnoteRefs({ footnotes }) { |
||||
return ( |
||||
<span className="footnoteRefs"> |
||||
{joinReactElements( |
||||
footnotes.map((footnote) => ( |
||||
<FootnoteRef key={footnote.reference} {...footnote}> |
||||
{footnote.symbol} |
||||
</FootnoteRef> |
||||
)), |
||||
", " |
||||
)} |
||||
</span> |
||||
); |
||||
} |
||||
|
||||
FootnoteRefs.propTypes = { |
||||
footnotes: PropTypes.array.isRequired, |
||||
}; |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import Footnote from "./Footnote"; |
||||
|
||||
export default function Footnotes({ footnotes = [], id }) { |
||||
return ( |
||||
<div className="footnotes"> |
||||
<a id={id} className="anchor" /> |
||||
<div className="label">Notes</div> |
||||
<div className="notes"> |
||||
{footnotes.map((footnote) => ( |
||||
<Footnote key={footnote.id} {...footnote}> |
||||
{footnote.value} |
||||
</Footnote> |
||||
))} |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
Footnotes.propTypes = { |
||||
footnotes: PropTypes.array.isRequired, |
||||
id: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; |
||||
import { faExternalLinkAlt } from "@fortawesome/free-solid-svg-icons"; |
||||
export default function LinkIcon() { |
||||
return <FontAwesomeIcon className="icon" icon={faExternalLinkAlt} />; |
||||
} |
||||
|
||||
LinkIcon.propTypes = {}; |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import ToastyCopyToClipboard from "./ToastyCopyToClipboard"; |
||||
|
||||
export default function Name({ children, name }) { |
||||
return ( |
||||
<ToastyCopyToClipboard text={name}> |
||||
<code className="name" title="Copy 📋"> |
||||
{children} |
||||
</code> |
||||
</ToastyCopyToClipboard> |
||||
); |
||||
} |
||||
|
||||
Name.propTypes = { |
||||
children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) |
||||
.isRequired, |
||||
name: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import operatingSystems from "@site/src/data/operating-systems"; |
||||
|
||||
export default function OsLegend() { |
||||
return ( |
||||
<div className="codes os legend"> |
||||
{operatingSystems.map(({ key, className, heading, title }) => ( |
||||
<div key={key} className={"os " + className}> |
||||
<span className="heading">{heading}</span> |
||||
<span className="title">{title}</span> |
||||
</div> |
||||
))} |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
OsLegend.propTypes = {}; |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import OsSupportIcon from "./OsSupportIcon"; |
||||
import FootnoteRefs from "./FootnoteRefs"; |
||||
|
||||
export default function OsSupport({ value, footnotes = [] }) { |
||||
return ( |
||||
<> |
||||
<OsSupportIcon value={value} /> |
||||
{footnotes.length > 0 ? ( |
||||
<FootnoteRefs footnotes={footnotes} /> |
||||
) : undefined} |
||||
</> |
||||
); |
||||
} |
||||
|
||||
OsSupport.propTypes = { |
||||
value: PropTypes.oneOf([true, false, null]), |
||||
footnotes: PropTypes.array.isRequired, |
||||
}; |
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
|
||||
const Icon = ({ children, className, title }) => ( |
||||
<span className={className} title={title}> |
||||
{children} |
||||
</span> |
||||
); |
||||
|
||||
Icon.propTypes = { |
||||
children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) |
||||
.isRequired, |
||||
className: PropTypes.string.isRequired, |
||||
title: PropTypes.string.isRequired, |
||||
}; |
||||
|
||||
export const Supported = () => ( |
||||
<Icon className="supported" title="Supported 😄"> |
||||
⭐ |
||||
</Icon> |
||||
); |
||||
export const NotSupported = () => ( |
||||
<Icon className="not-supported" title="Not Supported 😢"> |
||||
❌ |
||||
</Icon> |
||||
); |
||||
export const NotTested = () => ( |
||||
<Icon className="not-tested" title="Not Tested Yet - PR's welcomed! 🧐"> |
||||
❔ |
||||
</Icon> |
||||
); |
||||
|
||||
export default function OsSupportIcon({ value }) { |
||||
if (value === true) { |
||||
return <Supported />; |
||||
} |
||||
if (value === false) { |
||||
return <NotSupported />; |
||||
} |
||||
return <NotTested />; |
||||
} |
||||
|
||||
OsSupportIcon.propTypes = { |
||||
value: PropTypes.oneOf([true, false, null]), |
||||
}; |
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import TableRow from "./TableRow"; |
||||
import Footnotes from "./Footnotes"; |
||||
import LinkIcon from "./LinkIcon"; |
||||
import operatingSystems from "@site/src/data/operating-systems"; |
||||
import { getCodes } from "@site/src/hid"; |
||||
import { getGroup } from "@site/src/groups"; |
||||
import { getFootnote } from "@site/src/footnotes"; |
||||
|
||||
function extractFootnoteIds(codes) { |
||||
return Array.from( |
||||
new Set( |
||||
codes |
||||
.flatMap(({ footnotes }) => Object.values(footnotes)) |
||||
.map((refs) => (Array.isArray(refs) ? refs.flat() : refs)) |
||||
) |
||||
); |
||||
} |
||||
|
||||
export default function Table({ group }) { |
||||
const codes = getCodes(getGroup(group)); |
||||
|
||||
const footnotesAnchor = group + "-" + "footnotes"; |
||||
|
||||
const tableFootnotes = extractFootnoteIds(codes).map((id, i) => { |
||||
const Component = getFootnote(id); |
||||
return { |
||||
id, |
||||
anchor: footnotesAnchor, |
||||
symbol: i + 1, |
||||
value: Component ? <Component /> : undefined, |
||||
}; |
||||
}); |
||||
|
||||
return ( |
||||
<div className="codes"> |
||||
<table> |
||||
<thead> |
||||
<tr> |
||||
<th className="names">Names</th> |
||||
<th className="description">Description</th> |
||||
<th className="documentation" title="Documentation"> |
||||
<LinkIcon /> |
||||
</th> |
||||
{operatingSystems.map(({ key, className, heading, title }) => ( |
||||
<th key={key} className={`os ${className}`} title={title}> |
||||
{heading} |
||||
</th> |
||||
))} |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{Array.isArray(codes) |
||||
? codes.map((code) => ( |
||||
<TableRow |
||||
key={code.names[0]} |
||||
{...code} |
||||
tableFootnotes={tableFootnotes} |
||||
/> |
||||
)) |
||||
: undefined} |
||||
</tbody> |
||||
</table> |
||||
{tableFootnotes.length > 0 ? ( |
||||
<Footnotes id={footnotesAnchor} footnotes={tableFootnotes} /> |
||||
) : undefined} |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
Table.propTypes = { |
||||
group: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import Name from "./Name"; |
||||
import Description from "./Description"; |
||||
import Context from "./Context"; |
||||
import LinkIcon from "./LinkIcon"; |
||||
import OsSupport from "./OsSupport"; |
||||
import operatingSystems from "@site/src/data/operating-systems"; |
||||
|
||||
export default function TableRow({ |
||||
names, |
||||
description, |
||||
context = "", |
||||
clarify = false, |
||||
documentation, |
||||
os, |
||||
footnotes, |
||||
tableFootnotes, |
||||
}) { |
||||
return ( |
||||
<tr> |
||||
<td className="names"> |
||||
{names.map((name) => ( |
||||
<Name key={name} name={name}> |
||||
{name} |
||||
</Name> |
||||
))} |
||||
</td> |
||||
<td className="description"> |
||||
<Description description={description} /> |
||||
{clarify && context ? <Context>{context}</Context> : undefined} |
||||
</td> |
||||
<td className="documentation" title="Documentation"> |
||||
<a href={documentation} target="_blank" rel="noreferrer"> |
||||
<LinkIcon /> |
||||
</a> |
||||
</td> |
||||
{operatingSystems.map(({ key, className, title }) => ( |
||||
<td key={key} className={`os ${className}`} title={title}> |
||||
<OsSupport |
||||
value={os[key]} |
||||
footnotes={tableFootnotes.filter( |
||||
({ id }) => |
||||
(Array.isArray(footnotes[key]) && |
||||
footnotes[key].includes(id)) || |
||||
footnotes[key] == id |
||||
)} |
||||
/> |
||||
</td> |
||||
))} |
||||
</tr> |
||||
); |
||||
} |
||||
|
||||
TableRow.propTypes = { |
||||
names: PropTypes.array.isRequired, |
||||
description: PropTypes.string.isRequired, |
||||
context: PropTypes.string.isRequired, |
||||
clarify: PropTypes.bool, |
||||
documentation: PropTypes.string.isRequired, |
||||
os: PropTypes.object.isRequired, |
||||
footnotes: PropTypes.object.isRequired, |
||||
tableFootnotes: PropTypes.array.isRequired, |
||||
}; |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import { ToastContainer } from "react-toastify"; |
||||
import "react-toastify/dist/ReactToastify.css"; |
||||
|
||||
export default function ToastyContainer() { |
||||
return ( |
||||
<ToastContainer |
||||
position="bottom-right" |
||||
autoClose={2000} |
||||
hideProgressBar={true} |
||||
newestOnTop={true} |
||||
/> |
||||
); |
||||
} |
||||
|
||||
ToastyContainer.propTypes = {}; |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import React from "react"; |
||||
import PropTypes from "prop-types"; |
||||
import { toast } from "react-toastify"; |
||||
import { CopyToClipboard } from "react-copy-to-clipboard"; |
||||
|
||||
export default function ToastyCopyToClipboard({ children, text }) { |
||||
const notify = () => |
||||
toast( |
||||
<span> |
||||
📋 Copied <code>{text}</code> |
||||
</span> |
||||
); |
||||
return ( |
||||
<div onClick={notify}> |
||||
<CopyToClipboard text={text}>{children}</CopyToClipboard> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
ToastyCopyToClipboard.propTypes = { |
||||
children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) |
||||
.isRequired, |
||||
text: PropTypes.string.isRequired, |
||||
}; |
@ -0,0 +1,220 @@
@@ -0,0 +1,220 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
.codes.os.legend { |
||||
position: sticky; |
||||
z-index: 1; |
||||
top: var(--ifm-navbar-height); |
||||
width: 100%; |
||||
padding-top: 0.5em; |
||||
padding-bottom: 0.5em; |
||||
background: var(--ifm-background-color); |
||||
display: flex; |
||||
justify-content: space-between; |
||||
} |
||||
|
||||
html[data-theme="light"] .codes.os.legend { |
||||
background: white; |
||||
} |
||||
|
||||
.codes.os.legend .os { |
||||
flex: 1; |
||||
margin-left: 0.2em; |
||||
margin-right: 0.2em; |
||||
padding: 0.1em; |
||||
border: 1px var(--ifm-table-border-color) solid; |
||||
border-radius: 0.5em; |
||||
text-align: center; |
||||
} |
||||
|
||||
.codes.os.legend .os .heading { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.codes.os.legend .os .heading::after { |
||||
content: " : "; |
||||
font-weight: normal; |
||||
} |
||||
|
||||
.codes .name { |
||||
cursor: copy; |
||||
} |
||||
|
||||
.codes .name:hover { |
||||
opacity: 0.8; |
||||
} |
||||
|
||||
.codes .name:active { |
||||
color: var(--ifm-font-color-base-inverse); |
||||
background: var(--ifm-font-color-base); |
||||
} |
||||
|
||||
.codes.os.legend, |
||||
.codes table { |
||||
font-size: 0.8em; |
||||
} |
||||
|
||||
.codes table { |
||||
display: table; |
||||
font-size: 0.8em; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
.codes th, |
||||
.codes td { |
||||
padding: 0.2rem; |
||||
} |
||||
|
||||
.codes td { |
||||
position: relative; |
||||
} |
||||
|
||||
.codes th.names, |
||||
.codes th.description { |
||||
text-align: left; |
||||
} |
||||
|
||||
.codes td.names code { |
||||
display: block; |
||||
float: left; |
||||
clear: both; |
||||
margin-top: 1px; |
||||
margin-bottom: 1px; |
||||
font-size: 0.85em; |
||||
} |
||||
|
||||
.codes .context { |
||||
display: inline; |
||||
margin: 0 0 0 0.5em; |
||||
font-size: 0.85em; |
||||
} |
||||
|
||||
.codes .context::before { |
||||
content: "("; |
||||
} |
||||
|
||||
.codes .context::after { |
||||
content: ")"; |
||||
} |
||||
|
||||
.codes .symbol { |
||||
display: inline-flex; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.codes .symbol code { |
||||
align-self: flex-start; |
||||
width: auto; |
||||
} |
||||
|
||||
.codes .symbol .meaning { |
||||
flex: 1; |
||||
font-size: 0.8em; |
||||
text-transform: uppercase; |
||||
} |
||||
|
||||
.codes td.documentation, |
||||
.codes td.os { |
||||
width: 0.1%; |
||||
min-width: 1.9rem; |
||||
text-align: center; |
||||
} |
||||
|
||||
.codes td.documentation { |
||||
font-size: 0.8em; |
||||
} |
||||
|
||||
.codes td.documentation a { |
||||
cursor: help; |
||||
} |
||||
|
||||
.codes .os { |
||||
color: black; |
||||
} |
||||
|
||||
.codes td.os { |
||||
font-size: 0.8em; |
||||
} |
||||
|
||||
.codes .not-tested { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.codes .os.windows { |
||||
background: #caedfd; |
||||
} |
||||
|
||||
.codes .os.linux { |
||||
background: #fff2ca; |
||||
} |
||||
|
||||
.codes .os.android { |
||||
background: #d8eed9; |
||||
} |
||||
|
||||
.codes .os.macos { |
||||
background: #ececec; |
||||
} |
||||
|
||||
.codes .os.ios { |
||||
background: #ffffff; |
||||
} |
||||
|
||||
.codes .footnotes { |
||||
display: flex; |
||||
width: 100%; |
||||
margin-top: 0; |
||||
margin-bottom: 0.5rem; |
||||
padding: 0.2rem 0.5rem 0.2rem 0.5rem; |
||||
border: var(--ifm-table-border-width) dashed var(--ifm-table-border-color); |
||||
border-top: 0; |
||||
font-size: 0.8em; |
||||
} |
||||
|
||||
.codes .footnotes .label { |
||||
display: block; |
||||
margin-right: 1em; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.codes .footnotes .label::after { |
||||
content: ":"; |
||||
} |
||||
|
||||
.codes .footnotes .anchor { |
||||
display: block; |
||||
position: relative; |
||||
top: calc(var(--ifm-navbar-height) * -1 - 6em); |
||||
visibility: hidden; |
||||
} |
||||
|
||||
.codes .footnote { |
||||
flex: 1; |
||||
display: flex; |
||||
margin-top: 0; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
.codes .footnote .symbol { |
||||
flex: 0; |
||||
float: left; |
||||
margin-right: 0.4em; |
||||
font-size: 0.8em; |
||||
} |
||||
|
||||
.codes .footnote .content p { |
||||
margin-top: 0; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
.codes .footnoteRefs { |
||||
float: right; |
||||
font-size: 0.8em; |
||||
} |
||||
|
||||
.codes .footnoteRefs a { |
||||
color: black; |
||||
} |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import example from "@site/docs/codes/_footnotes/example.mdx"; |
||||
|
||||
export default { |
||||
example, |
||||
}; |
@ -0,0 +1,414 @@
@@ -0,0 +1,414 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
export default { |
||||
"application-controls": [ |
||||
"K_MENU", |
||||
"C_AC_PROPERTIES", |
||||
"K_SELECT", |
||||
"C_AC_CANCEL", |
||||
"K_EXECUTE", |
||||
"C_AC_REFRESH", |
||||
"K_REFRESH", |
||||
"C_AC_STOP", |
||||
"K_STOP", |
||||
"C_AC_FORWARD", |
||||
"K_FORWARD", |
||||
"C_AC_BACK", |
||||
"K_BACK", |
||||
"C_AC_HOME", |
||||
"C_AC_BOOKMARKS", |
||||
"C_AC_NEW", |
||||
"C_AC_OPEN", |
||||
"C_AC_SAVE", |
||||
"C_AC_CLOSE", |
||||
"C_AC_EXIT", |
||||
"C_AC_PRINT", |
||||
"C_AC_FIND", |
||||
"K_FIND", |
||||
"K_FIND2", |
||||
"C_AC_SEARCH", |
||||
"C_AC_GOTO", |
||||
"C_AC_ZOOM", |
||||
"C_AC_ZOOM_IN", |
||||
"C_AC_ZOOM_OUT", |
||||
"C_AC_SCROLL_UP", |
||||
"K_SCROLL_UP", |
||||
"C_AC_SCROLL_DOWN", |
||||
"K_SCROLL_DOWN", |
||||
"C_AC_REPLY", |
||||
"C_AC_FORWARD_MAIL", |
||||
"C_AC_SEND", |
||||
"C_AC_EDIT", |
||||
"C_AC_INSERT", |
||||
"C_AC_DEL", |
||||
"C_AC_VIEW_TOGGLE", |
||||
"C_AC_DESKTOP_SHOW_ALL_WINDOWS", |
||||
"C_VOICE_COMMAND", |
||||
], |
||||
applications: [ |
||||
"C_AL_NEXT_TASK", |
||||
"C_AL_PREVIOUS_TASK", |
||||
"C_AL_SELECT_TASK", |
||||
"C_AL_MY_COMPUTER", |
||||
"C_AL_DOCUMENTS", |
||||
"C_AL_FILE_BROWSER", |
||||
"C_AL_WWW", |
||||
"K_WWW", |
||||
"C_AL_EMAIL", |
||||
"C_AL_INSTANT_MESSAGING", |
||||
"C_AL_NETWORK_CHAT", |
||||
"C_AL_CONTACTS", |
||||
"C_AL_CALENDAR", |
||||
"C_AL_IMAGE_BROWSER", |
||||
"C_AL_AUDIO_BROWSER", |
||||
"C_AL_MOVIE_BROWSER", |
||||
"C_AL_TEXT_EDITOR", |
||||
"C_AL_WORD", |
||||
"C_AL_SPREADSHEET", |
||||
"C_AL_PRESENTATION", |
||||
"C_AL_GRAPHICS_EDITOR", |
||||
"C_AL_CALCULATOR", |
||||
"K_CALCULATOR", |
||||
"C_AL_NEWS", |
||||
"C_AL_DATABASE", |
||||
"C_AL_VOICEMAIL", |
||||
"C_AL_FINANCE", |
||||
"C_AL_TASK_MANAGER", |
||||
"C_AL_JOURNAL", |
||||
"C_AL_AV_CAPTURE_PLAYBACK", |
||||
"C_AL_SPELLCHECK", |
||||
"C_AL_SCREEN_SAVER", |
||||
"C_AL_KEYBOARD_LAYOUT", |
||||
"C_AL_CONTROL_PANEL", |
||||
"C_AL_HELP", |
||||
"K_HELP", |
||||
"C_AL_OEM_FEATURES", |
||||
"C_AL_CCC", |
||||
], |
||||
"consumer-controls": [ |
||||
"C_CHANNEL_INC", |
||||
"C_CHANNEL_DEC", |
||||
"C_RECALL_LAST", |
||||
"C_MEDIA_VCR_PLUS", |
||||
"C_MEDIA_GUIDE", |
||||
"C_MEDIA_STEP", |
||||
"C_MEDIA_HOME", |
||||
"C_MEDIA_TV", |
||||
"C_MEDIA_CABLE", |
||||
"C_MEDIA_TUNER", |
||||
"C_MEDIA_DVD", |
||||
"C_MEDIA_CD", |
||||
"C_MEDIA_SATELLITE", |
||||
"C_MEDIA_VCR", |
||||
"C_MEDIA_TAPE", |
||||
"C_MEDIA_COMPUTER", |
||||
"C_MEDIA_WWW", |
||||
"C_MEDIA_GAMES", |
||||
"C_MEDIA_PHONE", |
||||
"C_MEDIA_VIDEOPHONE", |
||||
"C_MEDIA_MESSAGES", |
||||
"C_QUIT", |
||||
"C_HELP", |
||||
], |
||||
"consumer-menus": [ |
||||
"C_MENU", |
||||
"C_MENU_PICK", |
||||
"C_MENU_UP", |
||||
"C_MENU_DOWN", |
||||
"C_MENU_LEFT", |
||||
"C_MENU_RIGHT", |
||||
"C_MENU_ESCAPE", |
||||
"C_MENU_INCREASE", |
||||
"C_MENU_DECREASE", |
||||
"C_RED_BUTTON", |
||||
"C_GREEN_BUTTON", |
||||
"C_BLUE_BUTTON", |
||||
"C_YELLOW_BUTTON", |
||||
], |
||||
"cut-copy-paste": [ |
||||
"C_AC_CUT", |
||||
"K_CUT", |
||||
"C_AC_COPY", |
||||
"K_COPY", |
||||
"C_AC_PASTE", |
||||
"K_PASTE", |
||||
], |
||||
display: [ |
||||
"C_BRIGHTNESS_INC", |
||||
"C_BRIGHTNESS_DEC", |
||||
"C_BRIGHTNESS_MINIMUM", |
||||
"C_BRIGHTNESS_MAXIMUM", |
||||
"C_BRIGHTNESS_AUTO", |
||||
"C_BACKLIGHT_TOGGLE", |
||||
"C_ASPECT", |
||||
"C_PIP", |
||||
], |
||||
"input-assist": [ |
||||
"C_KEYBOARD_INPUT_ASSIST_NEXT", |
||||
"C_KEYBOARD_INPUT_ASSIST_PREVIOUS", |
||||
"C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP", |
||||
"C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP", |
||||
"C_KEYBOARD_INPUT_ASSIST_ACCEPT", |
||||
"C_KEYBOARD_INPUT_ASSIST_CANCEL", |
||||
], |
||||
"keyboard-control-whitespace": [ |
||||
"ESCAPE", |
||||
"RETURN", |
||||
"RETURN2", |
||||
"SPACE", |
||||
"TAB", |
||||
"BACKSPACE", |
||||
"DELETE", |
||||
"INSERT", |
||||
], |
||||
"keyboard-fkeys": [ |
||||
"F1", |
||||
"F2", |
||||
"F3", |
||||
"F4", |
||||
"F5", |
||||
"F6", |
||||
"F7", |
||||
"F8", |
||||
"F9", |
||||
"F10", |
||||
"F11", |
||||
"F12", |
||||
"F13", |
||||
"F14", |
||||
"F15", |
||||
"F16", |
||||
"F17", |
||||
"F18", |
||||
"F19", |
||||
"F20", |
||||
"F21", |
||||
"F22", |
||||
"F23", |
||||
"F24", |
||||
], |
||||
"keyboard-international": [ |
||||
"INTERNATIONAL_1", |
||||
"INTERNATIONAL_2", |
||||
"INTERNATIONAL_3", |
||||
"INTERNATIONAL_4", |
||||
"INTERNATIONAL_5", |
||||
"INTERNATIONAL_6", |
||||
"INTERNATIONAL_7", |
||||
"INTERNATIONAL_8", |
||||
"INTERNATIONAL_9", |
||||
], |
||||
"keyboard-language": [ |
||||
"LANGUAGE_1", |
||||
"LANGUAGE_2", |
||||
"LANGUAGE_3", |
||||
"LANGUAGE_4", |
||||
"LANGUAGE_5", |
||||
"LANGUAGE_6", |
||||
"LANGUAGE_7", |
||||
"LANGUAGE_8", |
||||
"LANGUAGE_9", |
||||
], |
||||
"keyboard-letters": [ |
||||
"A", |
||||
"B", |
||||
"C", |
||||
"D", |
||||
"E", |
||||
"F", |
||||
"G", |
||||
"H", |
||||
"I", |
||||
"J", |
||||
"K", |
||||
"L", |
||||
"M", |
||||
"N", |
||||
"O", |
||||
"P", |
||||
"Q", |
||||
"R", |
||||
"S", |
||||
"T", |
||||
"U", |
||||
"V", |
||||
"W", |
||||
"X", |
||||
"Y", |
||||
"Z", |
||||
], |
||||
"keyboard-locks": [ |
||||
"CAPSLOCK", |
||||
"LOCKING_CAPS", |
||||
"SCROLLLOCK", |
||||
"LOCKING_SCROLL", |
||||
"LOCKING_NUM", |
||||
], |
||||
"keyboard-miscellaneous": [ |
||||
"PRINTSCREEN", |
||||
"PAUSE_BREAK", |
||||
"ALT_ERASE", |
||||
"SYSREQ", |
||||
"K_CANCEL", |
||||
"CLEAR", |
||||
"CLEAR_AGAIN", |
||||
"CRSEL", |
||||
"PRIOR", |
||||
"SEPARATOR", |
||||
"OUT", |
||||
"OPER", |
||||
"EXSEL", |
||||
"K_EDIT", |
||||
], |
||||
"keyboard-modifiers": [ |
||||
"LEFT_SHIFT", |
||||
"RIGHT_SHIFT", |
||||
"LEFT_CONTROL", |
||||
"RIGHT_CONTROL", |
||||
"LEFT_ALT", |
||||
"RIGHT_ALT", |
||||
"LEFT_GUI", |
||||
"RIGHT_GUI", |
||||
], |
||||
"keyboard-navigation": [ |
||||
"HOME", |
||||
"END", |
||||
"PAGE_UP", |
||||
"PAGE_DOWN", |
||||
"UP_ARROW", |
||||
"DOWN_ARROW", |
||||
"LEFT_ARROW", |
||||
"RIGHT_ARROW", |
||||
"K_APPLICATION", |
||||
], |
||||
"keyboard-numbers": [ |
||||
"NUMBER_1", |
||||
"NUMBER_2", |
||||
"NUMBER_3", |
||||
"NUMBER_4", |
||||
"NUMBER_5", |
||||
"NUMBER_6", |
||||
"NUMBER_7", |
||||
"NUMBER_8", |
||||
"NUMBER_9", |
||||
"NUMBER_0", |
||||
], |
||||
"keyboard-symbols": [ |
||||
"EXCLAMATION", |
||||
"AT_SIGN", |
||||
"HASH", |
||||
"DOLLAR", |
||||
"PERCENT", |
||||
"CARET", |
||||
"AMPERSAND", |
||||
"ASTERISK", |
||||
"LEFT_PARENTHESIS", |
||||
"RIGHT_PARENTHESIS", |
||||
"EQUAL", |
||||
"PLUS", |
||||
"MINUS", |
||||
"UNDERSCORE", |
||||
"SLASH", |
||||
"QUESTION", |
||||
"BACKSLASH", |
||||
"PIPE", |
||||
"NON_US_BACKSLASH", |
||||
"PIPE2", |
||||
"SEMICOLON", |
||||
"COLON", |
||||
"SINGLE_QUOTE", |
||||
"DOUBLE_QUOTES", |
||||
"COMMA", |
||||
"LESS_THAN", |
||||
"PERIOD", |
||||
"GREATER_THAN", |
||||
"LEFT_BRACKET", |
||||
"LEFT_BRACE", |
||||
"RIGHT_BRACKET", |
||||
"RIGHT_BRACE", |
||||
"GRAVE", |
||||
"TILDE", |
||||
"NON_US_HASH", |
||||
"TILDE2", |
||||
], |
||||
keypad: ["KP_NUMLOCK", "KP_CLEAR", "CLEAR2", "KP_ENTER"], |
||||
"keypad-numbers": [ |
||||
"KP_NUMBER_1", |
||||
"KP_NUMBER_2", |
||||
"KP_NUMBER_3", |
||||
"KP_NUMBER_4", |
||||
"KP_NUMBER_5", |
||||
"KP_NUMBER_6", |
||||
"KP_NUMBER_7", |
||||
"KP_NUMBER_8", |
||||
"KP_NUMBER_9", |
||||
"KP_NUMBER_0", |
||||
], |
||||
"keypad-operations": [ |
||||
"KP_PLUS", |
||||
"KP_MINUS", |
||||
"KP_MULTIPLY", |
||||
"KP_DIVIDE", |
||||
"KP_EQUAL", |
||||
"KP_EQUAL_AS400", |
||||
"KP_DOT", |
||||
"KP_COMMA", |
||||
"KP_LEFT_PARENTHESIS", |
||||
"KP_RIGHT_PARENTHESIS", |
||||
], |
||||
"media-controls": [ |
||||
"C_RECORD", |
||||
"C_PLAY", |
||||
"C_PLAY_PAUSE", |
||||
"K_PLAY_PAUSE", |
||||
"C_PAUSE", |
||||
"C_STOP", |
||||
"K_STOP2", |
||||
"K_STOP3", |
||||
"C_STOP_EJECT", |
||||
"C_EJECT", |
||||
"K_EJECT", |
||||
"C_NEXT", |
||||
"K_NEXT", |
||||
"C_PREVIOUS", |
||||
"K_PREVIOUS", |
||||
"C_FAST_FORWARD", |
||||
"C_REWIND", |
||||
"C_SLOW", |
||||
"C_SLOW_TRACKING", |
||||
"C_REPEAT", |
||||
"C_RANDOM_PLAY", |
||||
"C_CAPTIONS", |
||||
"C_DATA_ON_SCREEN", |
||||
"C_SNAPSHOT", |
||||
], |
||||
power: [ |
||||
"C_POWER", |
||||
"K_POWER", |
||||
"C_RESET", |
||||
"C_SLEEP", |
||||
"K_SLEEP", |
||||
"C_SLEEP_MODE", |
||||
"C_AL_LOGOFF", |
||||
"C_AL_LOCK", |
||||
"K_LOCK", |
||||
], |
||||
sound: [ |
||||
"C_VOLUME_UP", |
||||
"K_VOLUME_UP", |
||||
"K_VOLUME_UP2", |
||||
"C_VOLUME_DOWN", |
||||
"K_VOLUME_DOWN", |
||||
"K_VOLUME_DOWN2", |
||||
"C_MUTE", |
||||
"K_MUTE", |
||||
"K_MUTE2", |
||||
"C_ALTERNATE_AUDIO_INCREMENT", |
||||
"C_BASS_BOOST", |
||||
], |
||||
"undo-redo": ["C_AC_UNDO", "K_UNDO", "C_AC_REDO", "K_AGAIN"], |
||||
}; |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import usage from "../hid-usage"; |
||||
import * as pages from "./hid-usage-pages"; |
||||
|
||||
export const keyboard = usage(pages.genericDesktop, 0x06); |
||||
export const consumer = usage(pages.consumer, 0x01); |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
export const genericDesktop = 0x01; |
||||
export const key = 0x07; |
||||
export const consumer = 0x0c; |
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
export default [ |
||||
{ |
||||
key: "windows", |
||||
className: "windows", |
||||
heading: "W", |
||||
title: "Windows", |
||||
}, |
||||
{ |
||||
key: "linux", |
||||
className: "linux", |
||||
heading: "L", |
||||
title: "Linux", |
||||
}, |
||||
{ |
||||
key: "android", |
||||
className: "android", |
||||
heading: "A", |
||||
title: "Android", |
||||
}, |
||||
{ |
||||
key: "macos", |
||||
className: "macos", |
||||
heading: "m", |
||||
title: "macOS", |
||||
}, |
||||
{ |
||||
key: "ios", |
||||
className: "ios", |
||||
heading: "i", |
||||
title: "iOS", |
||||
}, |
||||
]; |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import footnotes from "./data/footnotes"; |
||||
|
||||
export function getFootnote(id) { |
||||
const footnote = footnotes[id]; |
||||
if (typeof footnote != "undefined") { |
||||
return footnote; |
||||
} |
||||
} |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import groups from "./data/groups.js"; |
||||
|
||||
export function getGroup(id) { |
||||
return groups[id] ?? null; |
||||
} |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
export default function usage(page, id) { |
||||
return (page << 16) | id; |
||||
} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/* |
||||
* Copyright (c) 2020 The ZMK Contributors |
||||
* |
||||
* SPDX-License-Identifier: CC-BY-NC-SA-4.0 |
||||
*/ |
||||
|
||||
import codes from "./data/hid"; |
||||
|
||||
export const map = codes.reduce((map, item) => { |
||||
item.names.forEach((name) => (map[name] = item)); |
||||
return map; |
||||
}, {}); |
||||
|
||||
export function getCode(id) { |
||||
return map[id] ?? null; |
||||
} |
||||
|
||||
export function getCodes(ids) { |
||||
return ids.reduce((result, id) => [...result, map[id]], []); |
||||
} |
Loading…
Reference in new issue