diff --git a/src/components/ActivatableLink/ActivatableLink.jsx b/src/components/ActivatableLink/ActivatableLink.jsx new file mode 100644 index 0000000..858376d --- /dev/null +++ b/src/components/ActivatableLink/ActivatableLink.jsx @@ -0,0 +1,40 @@ +import { A } from "@solidjs/router"; +import { defaultTo, isNil, pick, pipe, prop } from "ramda"; +import { Show } from "solid-js"; +import classes from "./ActivatableLink.module.css"; + +/** + * @typedef {import("@solidjs/router").AnchorProps} AnchorProps + * @typedef {import("solid-js").ParentProps} ParentProps + * @typedef {Partial & ParentProps} ActivatableLinkBase + * + * @typedef {Object} ActivatableLinkExtends + * @property {string} href + * @property {boolean} [activatable] + * @property {JSX.Element} [leftIcon] + * @property {JSX.Element} [rightIcon] + * + * @typedef {ActivatableLinkBase & ActivatableLinkExtends} ActivatableLinkProps + */ + +const defaultActivatable = pipe(defaultTo(true), prop("activatable")); + +/** + * @param {ActivatableLinkProps} props + * @returns {import("solid-js").Component} + */ +export default function ActivatableLink(props) { + return ( + + {props.leftIcon} + {props.children} + {props.rightIcon} + + ); +} diff --git a/src/components/ActivatableLink/ActivatableLink.module.css b/src/components/ActivatableLink/ActivatableLink.module.css new file mode 100644 index 0000000..84060c8 --- /dev/null +++ b/src/components/ActivatableLink/ActivatableLink.module.css @@ -0,0 +1,28 @@ +@import "@/mixins.css"; + +.activatable-link { + @include flex(row, flex-start, center, --spacing-xs); + @util padding(var(--spacing-s) var(--spacing-xs)); + @util size(100% auto); + border-radius: var(--border-radius-xs); + color: var(--palette-white-8); + @include dark-mode { + color: var(--palette-white-3); + } + &:hover { + color: var(--palette-white-8); + background-color: var(--palette-bright-blue-3); + @include dark-mode { + color: var(--palette-white-0); + background-color: var(--palette-bright-blue-4); + } + } + &.activated { + color: var(--palette-gray-1); + background-color: var(--palette-bright-blue-5); + @include dark-mode { + color: var(--palette-white-0); + background-color: var(--palette-bright-blue-8); + } + } +}