@tldraw/editor
Version:
tldraw infinite canvas SDK (editor).
108 lines (107 loc) • 4.54 kB
JavaScript
const isCoveredByCurrentColor = (value, property, { currentColor }) => {
return value === "currentColor" || value === currentColor;
};
const isInherited = (value, property, { parentStyles }) => {
return parentStyles[property] === value;
};
const isExcludedBorder = (borderDirection) => (value, property, { getStyle }) => {
const borderWidth = getStyle(`border-${borderDirection}-width`);
const borderStyle = getStyle(`border-${borderDirection}-style`);
if (borderWidth === "0px") return true;
if (borderStyle === "none") return true;
return false;
};
const cssRules = {
// currentColor properties:
"border-block-end-color": isCoveredByCurrentColor,
"border-block-start-color": isCoveredByCurrentColor,
"border-bottom-color": isCoveredByCurrentColor,
"border-inline-end-color": isCoveredByCurrentColor,
"border-inline-start-color": isCoveredByCurrentColor,
"border-left-color": isCoveredByCurrentColor,
"border-right-color": isCoveredByCurrentColor,
"border-top-color": isCoveredByCurrentColor,
"caret-color": isCoveredByCurrentColor,
"column-rule-color": isCoveredByCurrentColor,
"outline-color": isCoveredByCurrentColor,
"text-decoration": (value, property, { currentColor }) => {
return value === "none solid currentColor" || value === "none solid " + currentColor;
},
"text-decoration-color": isCoveredByCurrentColor,
"text-emphasis-color": isCoveredByCurrentColor,
// inherited properties:
"border-collapse": isInherited,
"border-spacing": isInherited,
"caption-side": isInherited,
// N.B. We shouldn't inherit 'color' because there's some UA styling, e.g. `mark` elements
// 'color': isInherited,
cursor: isInherited,
direction: isInherited,
"empty-cells": isInherited,
"font-family": isInherited,
"font-size": isInherited,
"font-style": isInherited,
"font-variant": isInherited,
"font-weight": isInherited,
"font-size-adjust": isInherited,
"font-stretch": isInherited,
font: isInherited,
"letter-spacing": isInherited,
"line-height": isInherited,
"list-style-image": isInherited,
"list-style-position": isInherited,
"list-style-type": isInherited,
"list-style": isInherited,
orphans: isInherited,
"overflow-wrap": isInherited,
quotes: isInherited,
"stroke-linecap": isInherited,
"stroke-linejoin": isInherited,
"tab-size": isInherited,
"text-align": isInherited,
"text-align-last": isInherited,
"text-indent": isInherited,
"text-justify": isInherited,
"text-shadow": isInherited,
"text-transform": isInherited,
visibility: isInherited,
"white-space": isInherited,
"white-space-collapse": isInherited,
widows: isInherited,
"word-break": isInherited,
"word-spacing": isInherited,
"word-wrap": isInherited,
// special border cases - we have a weird case (tailwind seems to trigger this) where all
// border-styles sometimes get set to 'solid', but the border-width is 0 so they don't render.
// but in SVGs, **sometimes**, the border-width defaults (i think from a UA style-sheet? but
// honestly can't tell) to 1.5px so the border displays. we work around this by only including
// border styles at all if both the border-width and border-style are set to something that
// would show a border.
"border-top": isExcludedBorder("top"),
"border-right": isExcludedBorder("right"),
"border-bottom": isExcludedBorder("bottom"),
"border-left": isExcludedBorder("left"),
"border-block-end": isExcludedBorder("block-end"),
"border-block-start": isExcludedBorder("block-start"),
"border-inline-end": isExcludedBorder("inline-end"),
"border-inline-start": isExcludedBorder("inline-start"),
"border-top-style": isExcludedBorder("top"),
"border-right-style": isExcludedBorder("right"),
"border-bottom-style": isExcludedBorder("bottom"),
"border-left-style": isExcludedBorder("left"),
"border-block-end-style": isExcludedBorder("block-end"),
"border-block-start-style": isExcludedBorder("block-start"),
"border-inline-end-style": isExcludedBorder("inline-end"),
"border-inline-start-style": isExcludedBorder("inline-start"),
"border-top-width": isExcludedBorder("top"),
"border-right-width": isExcludedBorder("right"),
"border-bottom-width": isExcludedBorder("bottom"),
"border-left-width": isExcludedBorder("left"),
"border-block-end-width": isExcludedBorder("block-end"),
"border-block-start-width": isExcludedBorder("block-start"),
"border-inline-end-width": isExcludedBorder("inline-end")
};
export {
cssRules
};
//# sourceMappingURL=cssRules.mjs.map