UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

221 lines (190 loc) 7.79 kB
import { staticStylish } from "../styles/theme/customStylishStatic.mjs"; import { createStaticStyles } from "antd-style"; import { cva } from "class-variance-authority"; //#region src/Image/style.ts const styles = createStaticStyles(({ css, cssVar }) => { const controlHalo = `drop-shadow(0 0 2px ${cssVar.colorBgLayout}) drop-shadow(0 1px 6px ${cssVar.colorBgLayout})`; return { actionsHidden: css` cursor: pointer; position: absolute; z-index: 1; inset-block-start: 0; inset-inline-end: 0; opacity: 0; `, actionsVisible: css` cursor: pointer; position: absolute; z-index: 1; inset-block-start: 0; inset-inline-end: 0; opacity: 1; `, borderless: staticStylish.variantBorderlessWithoutHover, filled: css` ${staticStylish.variantOutlinedWithoutHover}; ${staticStylish.variantFilledWithoutHover}; `, image: css` display: flex; align-items: center; justify-content: center; width: auto; height: auto; `, outlined: staticStylish.variantOutlinedWithoutHover, previewable: css` cursor: zoom-in; `, root: css` cursor: pointer; user-select: none; position: relative; overflow: hidden; width: fit-content; border-radius: ${cssVar.borderRadius}; line-height: 1; &:hover { .actions-hidden { opacity: 1; } } `, toolbar: css` pointer-events: auto; position: absolute; inset-block-end: 16px; inset-inline-start: 50%; transform: translateX(-50%); `, toolbarRow: css` padding-block: 4px; padding-inline: 6px; border-radius: 999px; background: color-mix(in srgb, ${cssVar.colorBgLayout} 60%, transparent); backdrop-filter: blur(12px); `, actualSizeCorner: css` /* view-box, so the per-corner transform-origin below is read in the 24x24 user space the path coordinates are written in rather than the rendered pixel box. */ transform-box: view-box; transition: transform 300ms ${cssVar.motionEaseInOut}; [data-actual-size='fit'] & { transform: rotate(180deg); } @media (prefers-reduced-motion: reduce) { transition: none; } `, toolbarPercentage: css` user-select: none; /* Fixed, not min-width: this is a readout that changes digit count as it zooms (9% → 100% → 800%), and letting it size to content shifts every control beside it on each wheel tick. Wide enough for four digits. */ width: 56px; height: 36px; font-size: 12px; font-variant-numeric: tabular-nums; color: ${cssVar.colorTextTertiary}; `, viewerBackdrop: css` position: fixed; inset: 0; opacity: 0; background: color-mix(in srgb, ${cssVar.colorBgLayout} 90%, transparent); backdrop-filter: blur(8px); `, viewerChrome: css` pointer-events: none; position: absolute; inset: 0; opacity: 0; `, viewerChromeIdle: css` pointer-events: none; position: absolute; inset: 0; transition: opacity 200ms ${cssVar.motionEaseOut}, visibility 200ms; &[data-idle-hidden] { visibility: hidden; opacity: 0; } @media (prefers-reduced-motion: reduce) { transition: none; } `, viewerClose: css` pointer-events: auto; position: absolute; inset-block-start: 16px; inset-inline-end: 16px; filter: ${controlHalo}; `, viewerCounter: css` pointer-events: none; position: absolute; inset-block-start: 16px; inset-inline-start: 50%; transform: translateX(-50%); padding-block: 4px; padding-inline: 12px; border-radius: 999px; font-size: 12px; font-variant-numeric: tabular-nums; color: ${cssVar.colorTextSecondary}; background: color-mix(in srgb, ${cssVar.colorBgLayout} 60%, transparent); backdrop-filter: blur(12px); `, viewerImage: css` will-change: transform; cursor: zoom-out; user-select: none; position: absolute; transform-origin: center center; object-fit: contain; -webkit-user-drag: none; `, viewerNavButton: css` pointer-events: auto; position: absolute; inset-block-start: 50%; transform: translateY(-50%); filter: ${controlHalo}; `, viewerNavNext: css` inset-inline-end: 16px; `, viewerNavPrev: css` inset-inline-start: 16px; `, viewerPopup: css` position: fixed; inset: 0; overflow: hidden; outline: none; `, wrapper: css` position: relative; overflow: hidden; max-width: 100%; height: auto; ` }; }); const variants = cva(styles.root, { defaultVariants: { variant: "filled" }, variants: { variant: { filled: styles.filled, outlined: styles.outlined, borderless: styles.borderless } } }); const FALLBACK_DARK = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjM0IzQjNCIi8+CjxwYXRoIGQ9Ik0xNTYuODg4IDkxLjAwMkgxMDAuMTEyQzk1LjYzMjkgOTEuMDAyIDkyLjAwMTUgOTQuNjMzNCA5Mi4wMDE1IDk5LjExMjdWMTU1Ljg4OEM5Mi4wMDE1IDE2MC4zNjcgOTUuNjMyOSAxNjMuOTk5IDEwMC4xMTIgMTYzLjk5OUgxNTYuODg4QzE2MS4zNjcgMTYzLjk5OSAxNjQuOTk4IDE2MC4zNjcgMTY0Ljk5OCAxNTUuODg4Vjk5LjExMjdDMTY0Ljk5OCA5NC42MzM0IDE2MS4zNjcgOTEuMDAyIDE1Ni44ODggOTEuMDAyWiIgc3Ryb2tlPSIjNjI2MjYyIiBzdHJva2Utd2lkdGg9IjguMTEwNzciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTY0Ljk5OCAxMzkuNjY4TDE1Mi40ODQgMTI3LjE1M0MxNTAuOTYyIDEyNS42MzIgMTQ4LjkgMTI0Ljc3OCAxNDYuNzQ5IDEyNC43NzhDMTQ0LjU5OSAxMjQuNzc4IDE0Mi41MzYgMTI1LjYzMiAxNDEuMDE1IDEyNy4xNTNMMTA0LjE2OCAxNjRNMTE2LjMzNCAxMjMuNDQ1QzEyMC44MTMgMTIzLjQ0NSAxMjQuNDQ1IDExOS44MTQgMTI0LjQ0NSAxMTUuMzM0QzEyNC40NDUgMTEwLjg1NSAxMjAuODEzIDEwNy4yMjQgMTE2LjMzNCAxMDcuMjI0QzExMS44NTUgMTA3LjIyNCAxMDguMjIzIDExMC44NTUgMTA4LjIyMyAxMTUuMzM0QzEwOC4yMjMgMTE5LjgxNCAxMTEuODU1IDEyMy40NDUgMTE2LjMzNCAxMjMuNDQ1WiIgc3Ryb2tlPSIjNjI2MjYyIiBzdHJva2Utd2lkdGg9IjguMTEwNzciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K"; const FALLBACK_LIGHT = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjRUNFQ0VDIi8+CjxwYXRoIGQ9Ik0xNTYuODg4IDkxLjAwMkgxMDAuMTEyQzk1LjYzMjkgOTEuMDAyIDkyLjAwMTUgOTQuNjMzNCA5Mi4wMDE1IDk5LjExMjdWMTU1Ljg4OEM5Mi4wMDE1IDE2MC4zNjcgOTUuNjMyOSAxNjMuOTk5IDEwMC4xMTIgMTYzLjk5OUgxNTYuODg4QzE2MS4zNjcgMTYzLjk5OSAxNjQuOTk4IDE2MC4zNjcgMTY0Ljk5OCAxNTUuODg4Vjk5LjExMjdDMTY0Ljk5OCA5NC42MzM0IDE2MS4zNjcgOTEuMDAyIDE1Ni44ODggOTEuMDAyWiIgc3Ryb2tlPSIjRDdEN0Q3IiBzdHJva2Utd2lkdGg9IjguMTEwNzciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTY0Ljk5OCAxMzkuNjY4TDE1Mi40ODQgMTI3LjE1M0MxNTAuOTYyIDEyNS42MzIgMTQ4LjkgMTI0Ljc3OCAxNDYuNzQ5IDEyNC43NzhDMTQ0LjU5OSAxMjQuNzc4IDE0Mi41MzYgMTI1LjYzMiAxNDEuMDE1IDEyNy4xNTNMMTA0LjE2OCAxNjRNMTE2LjMzNCAxMjMuNDQ1QzEyMC44MTMgMTIzLjQ0NSAxMjQuNDQ1IDExOS44MTQgMTI0LjQ0NSAxMTUuMzM0QzEyNC40NDUgMTEwLjg1NSAxMjAuODEzIDEwNy4yMjQgMTE2LjMzNCAxMDcuMjI0QzExMS44NTUgMTA3LjIyNCAxMDguMjIzIDExMC44NTUgMTA4LjIyMyAxMTUuMzM0QzEwOC4yMjMgMTE5LjgxNCAxMTEuODU1IDEyMy40NDUgMTE2LjMzNCAxMjMuNDQ1WiIgc3Ryb2tlPSIjRDdEN0Q3IiBzdHJva2Utd2lkdGg9IjguMTEwNzciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K"; //#endregion export { FALLBACK_DARK, FALLBACK_LIGHT, styles, variants }; //# sourceMappingURL=style.mjs.map