@slurpyb/preset-utopia
Version:
PandaCSS preset for utopia.fyi / utopia-core set of tools. Create fluid type scales, spacing scales, and more.
185 lines (175 loc) • 6.45 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
createUtopiaPreset: () => createPreset,
default: () => index_default
});
module.exports = __toCommonJS(index_exports);
// src/preset.ts
var import_dev = require("@pandacss/dev");
// src/consts.ts
var defaultOptions = {
minFontSize: 16,
maxFontSize: 19,
minWidth: 320,
maxWidth: 1280,
minTypeScale: 1.125,
maxTypeScale: 1.333,
positiveSteps: 11,
negativeSteps: 4,
customSizes: [],
positiveSpacingSteps: [1.5, 3, 4.5, 6, 7.5, 9, 10.5, 12, 13.5],
negativeSpacingSteps: [0.5, 0.25, 0.125],
labelStyle: "tshirt",
longerShirtLabels: false
};
// src/lib/typography.ts
var import_utopia_core = require("utopia-core");
// src/lib/utils.ts
var pandaToken = (label, clamp) => ({ [label]: { value: clamp } });
var extendedLabel = (label, tw) => {
switch (label) {
case "s":
return "sm";
case "m":
return "md";
case "l":
return "lg";
case "base":
return tw ? label : "base";
default:
return label;
}
};
// src/lib/typography.ts
var fontToken = (step, labelStyle, extend) => {
switch (labelStyle) {
case "tshirt":
return pandaToken(extend ? extendedLabel(step.label) : step.label, step.clamp);
case "tailwind":
return pandaToken(step.label, step.clamp);
default:
return pandaToken(step.label, step.clamp);
}
};
var createTypeScaleTokens = (options) => {
const { labelStyle = "utopia", longerShirtLabels = false, ...rest } = options;
return (0, import_utopia_core.calculateTypeScale)({ labelStyle, ...rest }).reduce(
(acc, step) => Object.assign(
acc,
fontToken(step, labelStyle, longerShirtLabels)
),
{}
);
};
// src/lib/spacing.ts
var import_utopia_core2 = require("utopia-core");
var extendedPairLabel = (pair) => {
let [fromLabel, toLabel] = pair.split("-");
const extendedLabels = {
s: "sm",
m: "md",
l: "lg",
base: "md"
};
fromLabel = extendedLabels[fromLabel] ?? fromLabel;
toLabel = extendedLabels[toLabel] ?? toLabel;
return `${fromLabel}-${toLabel}`;
};
var sizeToken = (size, labelStyle, extend) => {
switch (labelStyle) {
case "tshirt":
return pandaToken(extend ? extendedLabel(size.label) : size.label, size.clamp);
case "tailwind":
return pandaToken(extendedLabel(size.label, true), size.clamp);
default:
return pandaToken(size.label, size.clamp);
}
};
var pairToken = (pair, labelStyle, extend) => {
switch (labelStyle) {
case "tshirt":
return pandaToken(extend ? extendedPairLabel(pair.label) : pair.label, pair.clamp);
case "tailwind":
return pandaToken(extendedPairLabel(pair.label), pair.clamp);
default:
return pandaToken(pair.label, pair.clamp);
}
};
var createSpaceScaleTokens = (options) => {
const { labelStyle = "utopia", longerShirtLabels = false, ...rest } = options;
const spaceScale = (0, import_utopia_core2.calculateSpaceScale)(rest);
const sizesTokens = spaceScale.sizes.reduce(
(acc, size) => Object.assign(acc, sizeToken(size, labelStyle, longerShirtLabels)),
{}
);
const oneUpPairsTokens = spaceScale.oneUpPairs.reduce(
(acc, size) => Object.assign(acc, pairToken(size, labelStyle, longerShirtLabels)),
{}
);
const customPairsTokens = spaceScale.customPairs.reduce(
(acc, size) => Object.assign(acc, pairToken(size, labelStyle, longerShirtLabels)),
{}
);
return Object.assign({}, sizesTokens, oneUpPairsTokens, customPairsTokens);
};
// src/preset.ts
async function createPreset(options) {
const presetOptions = options ?? defaultOptions;
return (0, import_dev.definePreset)({
name: "@slurpyb/preset-utopia",
theme: {
extend: {
tokens: {
fontSizes: createTypeScaleTokens({
minFontSize: presetOptions.minFontSize ?? defaultOptions.minFontSize,
maxFontSize: presetOptions.maxFontSize ?? defaultOptions.maxFontSize,
minWidth: presetOptions.minWidth ?? defaultOptions.minWidth,
maxWidth: presetOptions.maxWidth ?? defaultOptions.maxWidth,
positiveSteps: presetOptions.positiveSteps ?? defaultOptions.positiveSteps,
negativeSteps: presetOptions.negativeSteps ?? defaultOptions.negativeSteps,
minTypeScale: presetOptions.minTypeScale ?? defaultOptions.minTypeScale,
maxTypeScale: presetOptions.maxTypeScale ?? defaultOptions.maxTypeScale,
labelStyle: presetOptions.labelStyle ?? defaultOptions.labelStyle,
longerShirtLabels: presetOptions.longerShirtLabels ?? defaultOptions.longerShirtLabels
}),
spacing: createSpaceScaleTokens({
minSize: presetOptions.minFontSize ?? defaultOptions.minFontSize,
maxSize: presetOptions.maxFontSize ?? defaultOptions.maxFontSize,
minWidth: presetOptions.minWidth ?? defaultOptions.minWidth,
maxWidth: presetOptions.maxWidth ?? defaultOptions.maxWidth,
negativeSteps: presetOptions.negativeSpacingSteps ?? defaultOptions.negativeSpacingSteps,
positiveSteps: presetOptions.positiveSpacingSteps ?? defaultOptions.positiveSpacingSteps,
customSizes: presetOptions.customSizes ?? defaultOptions.customSizes,
labelStyle: presetOptions.labelStyle ?? defaultOptions.labelStyle,
longerShirtLabels: presetOptions.longerShirtLabels ?? defaultOptions.longerShirtLabels
})
}
}
}
});
}
// src/index.ts
var index_default = createPreset;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createUtopiaPreset
});