@hypothesis/frontend-shared
Version:
Shared components, styles and utilities for Hypothesis projects
212 lines (200 loc) • 5.27 kB
JavaScript
var _jsxFileName = "/home/runner/work/frontend-shared/frontend-shared/src/pattern-library/components/LibraryNext.js";
/**
* Pattern library components related to UI component re-implementation and
* migration.
*/
import classnames from 'classnames';
import { useMemo } from 'preact/hooks';
import { jsxToHTML } from '../util/jsx-to-string';
/**
* Render a little label or pill next to changelog items
*
* @typedef {'breaking'|'added'|'changed'|'deprecated'} ChangeStatus
*
* @param {object} props
* @param {ChangeStatus} props.status
*/
import { jsxDEV as _jsxDEV } from "preact/jsx-dev-runtime";
function StatusChip({
status
}) {
return _jsxDEV("span", {
className: classnames('rounded-md py-1', {
'px-2 bg-red-error text-color-text-inverted': status === 'breaking',
'px-2 bg-yellow-notice': status === 'deprecated',
'font-semibold': status === 'added' || status === 'changed'
}),
children: [status === 'breaking' && _jsxDEV("span", {
children: "Breaking"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 28,
columnNumber: 33
}, this), status === 'deprecated' && _jsxDEV("span", {
children: "Deprecated"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 29,
columnNumber: 35
}, this), status === 'added' && _jsxDEV("span", {
children: "Added:"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 30,
columnNumber: 30
}, this), status === 'changed' && _jsxDEV("span", {
children: "Changed:"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 31,
columnNumber: 32
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 21,
columnNumber: 5
}, this);
}
/**
* Wrapper around a list of changelog items
*
* @param {object} props
* @param {import('preact').ComponentChildren} props.children
*/
function Changelog({
children
}) {
return _jsxDEV("ul", {
children: children
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 43,
columnNumber: 10
}, this);
}
/**
* Single changelog item
*
* @param {object} props
* @param {ChangeStatus} props.status
* @param {import('preact').ComponentChildren} props.children
*/
function ChangelogItem({
status,
children
}) {
return _jsxDEV("li", {
className: "space-x-2",
children: [_jsxDEV(StatusChip, {
status: status
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 56,
columnNumber: 7
}, this), _jsxDEV("span", {
children: children
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 57,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 55,
columnNumber: 5
}, this);
}
/**
* Render provided `content` as a "code block" example.
*
* @param {object} props
* @param {string} props.content - Code content
* @param {'sm'|'md'|'lg'} [props.size]
* @param {string} [props.title] - Caption (e.g. filename, description) of
* code block
*/
function Code({
content,
size,
title
}) {
const codeMarkup = useMemo(() => jsxToHTML(content), [content]);
return _jsxDEV("figure", {
className: "space-y-2",
children: [_jsxDEV("div", {
className: classnames('unstyled-text bg-slate-7 text-color-text-inverted p-4 rounded-md', {
'text-sm': size === 'sm'
}),
children: _jsxDEV("code", {
className: "text-color-text-inverted",
children: _jsxDEV("pre", {
className: "whitespace-pre-wrap",
dangerouslySetInnerHTML: {
__html: codeMarkup
}
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 83,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 82,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 76,
columnNumber: 7
}, this), title && _jsxDEV("figcaption", {
className: "flex justify-end",
children: _jsxDEV("span", {
className: "italic",
children: title
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 91,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 90,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 75,
columnNumber: 5
}, this);
}
/**
* Render import "usage" of a given `componentName`
*
* @param {object} props
* @param {string} props.componentName
* @param {'next'|'legacy'} [props.generation]
* @param {'sm'|'md'|'lg'} [props.size]
*/
function Usage({
componentName,
generation = 'next',
size = 'md'
}) {
const importPath = generation === 'next' ? '@hypothesis/frontend-shared/lib/next' : '@hypothesis/frontend-shared';
return _jsxDEV(Code, {
content: `import { ${componentName} } from '${importPath}';
`,
size: size
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 112,
columnNumber: 5
}, this);
}
export default {
Changelog,
ChangelogItem,
Code,
Usage
};
//# sourceMappingURL=LibraryNext.js.map