External Link icon

v0.1.0 (latest)
Stable

The external link icon: a 24 by 24 stroke glyph that takes its colour from the text around it.

pnpm add @behivetech/icons.external-link
  • icon

registry/behivetech/icons/external-link · depends on @behivetech/icons.base

external-link.tsx
1import { createIcon } from "@behivetech/icons.base";
2
3/** The external link icon: a stroke glyph on a 24 by 24 grid that inherits the text colour. */
4export const ExternalLinkIcon = /*#__PURE__*/ createIcon(
5 "ExternalLinkIcon",
6 <>
7 <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
8 <path d="M15 3h6v6" />
9 <path d="M10 14 21 3" />
10 </>,
11);
12
13export default ExternalLinkIcon;
index.ts
1export { ExternalLinkIcon, default } from "./external-link.js";
external-link.example.tsx
1import { ExternalLinkIcon } from "./external-link.js";
2
3/** The icon at each size; it takes its colour from the surrounding text. */
4export const ExternalLinkIconSizes = () => (
5 <>
6 <ExternalLinkIcon size="sm" />
7 <ExternalLinkIcon />
8 <ExternalLinkIcon size="lg" />
9 <ExternalLinkIcon size="xl" />
10 </>
11);
12
13/** Named with `titleAccess`, so assistive technology announces it. */
14export const NamedExternalLinkIcon = () => (
15 <ExternalLinkIcon titleAccess="External Link" />
16);
external-link.spec.tsx
1import { render } from "@testing-library/react";
2import ExternalLinkIconDefault, { ExternalLinkIcon } from "./external-link.js";
3
4describe("ExternalLinkIcon", () => {
5 it("exports the same component by name and by default", () => {
6 expect(ExternalLinkIconDefault).toBe(ExternalLinkIcon);
7 expect(ExternalLinkIcon.displayName).toBe("ExternalLinkIcon");
8 });
9
10 it("draws its glyph and hides from assistive technology", () => {
11 const { container } = render(<ExternalLinkIcon />);
12 const svg = container.querySelector("svg");
13
14 expect(
15 svg?.querySelector(
16 "path, circle, rect, ellipse, line, polyline, polygon",
17 ),
18 ).not.toBeNull();
19 expect(svg?.getAttribute("aria-hidden")).toBe("true");
20 });
21
22 it("is an image named by titleAccess", () => {
23 const { container } = render(
24 <ExternalLinkIcon titleAccess="External Link" />,
25 );
26 const svg = container.querySelector("svg");
27
28 expect(svg?.getAttribute("role")).toBe("img");
29 expect(svg?.querySelector("title")?.textContent).toBe("External Link");
30 });
31});