@otl-core/style-utils 1.1.34 → 1.1.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +16 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -124,6 +124,7 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
124
124
|
const normalizedMargin = normalizeResponsiveValue(config.margin);
|
|
125
125
|
const normalizedPadding = normalizeResponsiveValue(config.padding);
|
|
126
126
|
const normalizedGap = normalizeResponsiveValue(config.gap);
|
|
127
|
+
const normalizedHeight = normalizeResponsiveValue(config.height);
|
|
127
128
|
const normalizedShadow = normalizeResponsiveValue(config.shadow);
|
|
128
129
|
const normalizedFontSize = normalizeResponsiveValue(config.fontSize);
|
|
129
130
|
const border = {
|
|
@@ -154,6 +155,13 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
154
155
|
lg: normalizedGap.lg,
|
|
155
156
|
xl: normalizedGap.xl
|
|
156
157
|
};
|
|
158
|
+
const height = {
|
|
159
|
+
base: normalizedHeight.base,
|
|
160
|
+
sm: normalizedHeight.sm,
|
|
161
|
+
md: normalizedHeight.md,
|
|
162
|
+
lg: normalizedHeight.lg,
|
|
163
|
+
xl: normalizedHeight.xl
|
|
164
|
+
};
|
|
157
165
|
const shadow = {
|
|
158
166
|
base: normalizedShadow.base,
|
|
159
167
|
sm: normalizedShadow.sm,
|
|
@@ -193,6 +201,9 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
193
201
|
if (gap.base) {
|
|
194
202
|
baseStyles.push(`gap:${gap.base}`);
|
|
195
203
|
}
|
|
204
|
+
if (height.base) {
|
|
205
|
+
baseStyles.push(`height:${height.base}`);
|
|
206
|
+
}
|
|
196
207
|
if (shadow.base) {
|
|
197
208
|
baseStyles.push(`box-shadow:${shadowToCSS(shadow.base)}`);
|
|
198
209
|
}
|
|
@@ -208,9 +219,10 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
208
219
|
const marginBp = margin[bpKey];
|
|
209
220
|
const paddingBp = padding[bpKey];
|
|
210
221
|
const gapBp = gap[bpKey];
|
|
222
|
+
const heightBp = height[bpKey];
|
|
211
223
|
const shadowBp = shadow[bpKey];
|
|
212
224
|
const fontSizeBp = fontSize[bpKey];
|
|
213
|
-
if (borderBp || marginBp || paddingBp || gapBp || shadowBp || fontSizeBp) {
|
|
225
|
+
if (borderBp || marginBp || paddingBp || gapBp || heightBp || shadowBp || fontSizeBp) {
|
|
214
226
|
const styles = [];
|
|
215
227
|
if (borderBp) {
|
|
216
228
|
const resolvedBorderBp = resolveBorderToCSS(borderBp);
|
|
@@ -232,6 +244,9 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
232
244
|
if (gapBp) {
|
|
233
245
|
styles.push(`gap:${gapBp}`);
|
|
234
246
|
}
|
|
247
|
+
if (heightBp) {
|
|
248
|
+
styles.push(`height:${heightBp}`);
|
|
249
|
+
}
|
|
235
250
|
if (shadowBp) {
|
|
236
251
|
styles.push(`box-shadow:${shadowToCSS(shadowBp)}`);
|
|
237
252
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/classnames.utils.ts","../src/css.utils.ts","../src/animations.utils.ts"],"names":["twMerge","clsx"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Utility for merging Tailwind CSS class names\n * Combines clsx for conditional classes with tailwind-merge to handle conflicts\n */\n\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names intelligently\n * - Uses clsx for conditional classes\n * - Uses tailwind-merge to deduplicate and resolve conflicts\n *\n * @example\n * cn(\"px-2 py-1\", condition && \"bg-blue-500\")\n * cn({ \"font-bold\": isActive }, \"text-lg\")\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * CSS Resolution Utilities\n * Converts CMS type system values (ColorReference, BorderConfig, ResponsiveValue)\n * into CSS strings for rendering.\n */\n\nimport type {\n BorderConfig,\n ColorReference,\n ResponsiveConfig,\n ResponsiveValue,\n ShadowConfig,\n} from \"@otl-core/cms-types\";\n\n/**\n * Private type guard — inlined to avoid circular dependency on cms-utils\n */\nfunction isResponsiveConfig<T>(\n value: ResponsiveValue<T>,\n): value is ResponsiveConfig<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"base\" in value &&\n !Array.isArray(value)\n );\n}\n\n/**\n * Minify CSS by removing comments, extra whitespace, and unnecessary characters\n */\nexport function minifyCSS(css: string): string {\n return css\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*([{}:;,>+~()[\\]])\\s*/g, \"$1\")\n .replace(/:\\s+/g, \":\")\n .replace(/;}/g, \"}\")\n .replace(/:0px/g, \":0\")\n .replace(/:0em/g, \":0\")\n .replace(/:0rem/g, \":0\")\n .trim();\n}\n\n/**\n * Resolve a ColorReference to a CSS color string\n */\nexport function resolveColorToCSS(\n colorRef: ColorReference | undefined,\n target?: \"background\" | \"foreground\",\n): string | undefined {\n if (!colorRef) return undefined;\n if (typeof colorRef !== \"object\") return undefined;\n\n // Determine which target to use: parameter, or colorRef.target (if exists), or default to background\n const resolvedTarget =\n target ??\n (colorRef.type !== \"custom\" ? colorRef.target : undefined) ??\n \"background\";\n\n if (colorRef.type === \"custom\") {\n if (typeof colorRef.value === \"string\") {\n return resolvedTarget === \"foreground\" ? undefined : colorRef.value;\n }\n return resolvedTarget === \"foreground\"\n ? colorRef.value.foreground\n : colorRef.value.background;\n } else if (colorRef.type === \"theme\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n } else if (colorRef.type === \"variable\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n }\n\n return undefined;\n}\n\n/**\n * Resolve multiple ColorReferences to CSS color strings\n */\nexport function resolveColorsToCSS<\n T extends Record<string, ColorReference | undefined>,\n>(colorRefs: T): Partial<Record<keyof T, string>> {\n const resolved: Partial<Record<keyof T, string>> = {};\n\n for (const key in colorRefs) {\n const colorRef = colorRefs[key];\n if (colorRef) {\n const color = resolveColorToCSS(colorRef);\n if (color) {\n resolved[key] = color;\n }\n }\n }\n\n return resolved;\n}\n\n/**\n * Resolve a BorderConfig to CSS border properties\n */\nexport function resolveBorderToCSS(\n borderConfig: BorderConfig | undefined,\n): Record<string, string> | undefined {\n if (!borderConfig) return undefined;\n\n const result: Record<string, string> = {};\n\n const resolveSide = (\n side:\n | { width?: string; style?: string; color?: ColorReference }\n | undefined,\n defaultWidth?: string,\n defaultStyle?: string,\n defaultColor?: ColorReference,\n ): string | undefined => {\n const width = side?.width || defaultWidth;\n const style = side?.style || defaultStyle;\n const color = side?.color || defaultColor;\n\n if (!width || !style || !color) return undefined;\n\n const resolvedColor = resolveColorToCSS(color);\n if (!resolvedColor) return undefined;\n\n return `${width} ${style} ${resolvedColor}`;\n };\n\n const hasIndividualSides =\n borderConfig.top ||\n borderConfig.right ||\n borderConfig.bottom ||\n borderConfig.left;\n\n if (hasIndividualSides) {\n const topBorder = resolveSide(\n borderConfig.top,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (topBorder) result.borderTop = topBorder;\n\n const rightBorder = resolveSide(\n borderConfig.right,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (rightBorder) result.borderRight = rightBorder;\n\n const bottomBorder = resolveSide(\n borderConfig.bottom,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (bottomBorder) result.borderBottom = bottomBorder;\n\n const leftBorder = resolveSide(\n borderConfig.left,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (leftBorder) result.borderLeft = leftBorder;\n } else if (borderConfig.width && borderConfig.style && borderConfig.color) {\n const color = resolveColorToCSS(borderConfig.color);\n if (color) {\n result.border = `${borderConfig.width} ${borderConfig.style} ${color}`;\n }\n }\n\n if (borderConfig.radius) {\n result.borderRadius = borderConfig.radius;\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Normalize an optional ResponsiveValue into a flat object with optional breakpoint keys.\n */\nexport function normalizeResponsiveValue<T>(\n value: ResponsiveValue<T> | undefined,\n): {\n base?: T;\n sm?: T;\n md?: T;\n lg?: T;\n xl?: T;\n \"2xl\"?: T;\n} {\n if (!value) return {};\n\n if (isResponsiveConfig(value)) {\n return {\n base: value.base,\n sm: value.sm,\n md: value.md,\n lg: value.lg,\n xl: value.xl,\n \"2xl\": value[\"2xl\"],\n };\n }\n\n return { base: value };\n}\n\nexport interface ResponsiveSpacingConfig {\n border?: ResponsiveValue<BorderConfig>;\n margin?: ResponsiveValue<string>;\n padding?: ResponsiveValue<string>;\n gap?: ResponsiveValue<string>;\n shadow?: ResponsiveValue<ShadowConfig>;\n fontSize?: ResponsiveValue<string>;\n}\n\nconst BREAKPOINTS = [\n { key: \"Sm\", minWidth: \"640px\" },\n { key: \"Md\", minWidth: \"768px\" },\n { key: \"Lg\", minWidth: \"1024px\" },\n { key: \"Xl\", minWidth: \"1280px\" },\n];\n\n/**\n * Generate responsive CSS for spacing (margin, padding, gap, border) with media queries\n */\nexport function generateResponsiveSpacingCSS(\n className: string,\n config: ResponsiveSpacingConfig,\n): string | null {\n const css: string[] = [];\n const targetClass = `.${className}`;\n\n const normalizedBorder = normalizeResponsiveValue(config.border);\n const normalizedMargin = normalizeResponsiveValue(config.margin);\n const normalizedPadding = normalizeResponsiveValue(config.padding);\n const normalizedGap = normalizeResponsiveValue(config.gap);\n const normalizedShadow = normalizeResponsiveValue(config.shadow);\n const normalizedFontSize = normalizeResponsiveValue(config.fontSize);\n\n const border = {\n base: normalizedBorder.base,\n sm: normalizedBorder.sm,\n md: normalizedBorder.md,\n lg: normalizedBorder.lg,\n xl: normalizedBorder.xl,\n };\n\n const margin = {\n base: normalizedMargin.base,\n sm: normalizedMargin.sm,\n md: normalizedMargin.md,\n lg: normalizedMargin.lg,\n xl: normalizedMargin.xl,\n };\n\n const padding = {\n base: normalizedPadding.base,\n sm: normalizedPadding.sm,\n md: normalizedPadding.md,\n lg: normalizedPadding.lg,\n xl: normalizedPadding.xl,\n };\n\n const gap = {\n base: normalizedGap.base,\n sm: normalizedGap.sm,\n md: normalizedGap.md,\n lg: normalizedGap.lg,\n xl: normalizedGap.xl,\n };\n\n const shadow = {\n base: normalizedShadow.base,\n sm: normalizedShadow.sm,\n md: normalizedShadow.md,\n lg: normalizedShadow.lg,\n xl: normalizedShadow.xl,\n };\n\n const fontSize = {\n base: normalizedFontSize.base,\n sm: normalizedFontSize.sm,\n md: normalizedFontSize.md,\n lg: normalizedFontSize.lg,\n xl: normalizedFontSize.xl,\n };\n\n const shadowToCSS = (s: ShadowConfig): string => {\n const parts = [s.offsetX, s.offsetY, s.blurRadius, s.spreadRadius, s.color];\n return s.inset ? `inset ${parts.join(\" \")}` : parts.join(\" \");\n };\n\n const baseStyles: string[] = [];\n\n if (border.base) {\n const resolvedBorder = resolveBorderToCSS(border.base);\n if (resolvedBorder) {\n Object.entries(resolvedBorder).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n baseStyles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (margin.base) {\n baseStyles.push(`margin:${margin.base}`);\n }\n\n if (padding.base) {\n baseStyles.push(`padding:${padding.base}`);\n }\n\n if (gap.base) {\n baseStyles.push(`gap:${gap.base}`);\n }\n\n if (shadow.base) {\n baseStyles.push(`box-shadow:${shadowToCSS(shadow.base)}`);\n }\n\n if (fontSize.base) {\n baseStyles.push(`font-size:${fontSize.base}`);\n }\n\n if (baseStyles.length > 0) {\n css.push(`${targetClass}{${baseStyles.join(\";\")}}`);\n }\n\n BREAKPOINTS.forEach(({ key, minWidth }) => {\n const bpKey = key.toLowerCase() as \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n const borderBp = border[bpKey];\n const marginBp = margin[bpKey];\n const paddingBp = padding[bpKey];\n const gapBp = gap[bpKey];\n const shadowBp = shadow[bpKey];\n const fontSizeBp = fontSize[bpKey];\n\n if (borderBp || marginBp || paddingBp || gapBp || shadowBp || fontSizeBp) {\n const styles: string[] = [];\n\n if (borderBp) {\n const resolvedBorderBp = resolveBorderToCSS(borderBp);\n if (resolvedBorderBp) {\n Object.entries(resolvedBorderBp).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n styles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (marginBp) {\n styles.push(`margin:${marginBp}`);\n }\n\n if (paddingBp) {\n styles.push(`padding:${paddingBp}`);\n }\n\n if (gapBp) {\n styles.push(`gap:${gapBp}`);\n }\n\n if (shadowBp) {\n styles.push(`box-shadow:${shadowToCSS(shadowBp)}`);\n }\n\n if (fontSizeBp) {\n styles.push(`font-size:${fontSizeBp}`);\n }\n\n if (styles.length > 0) {\n css.push(\n `@media(min-width:${minWidth}){${targetClass}{${styles.join(\";\")}}}`,\n );\n }\n }\n });\n\n return css.length > 0 ? minifyCSS(css.join(\"\")) : null;\n}\n","/**\n * CSS Animation Utilities\n * Generates CSS keyframe animations and transitions for navigation components.\n */\n\n/**\n * Generate CSS keyframe animations for toggle icons (hamburger, kebab, meatball, grid)\n */\nexport function generateToggleIconAnimations(): string[] {\n return [\n `@keyframes hamburger-top-open{0%{top:25%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(-45deg)}}`,\n `@keyframes hamburger-top-close{0%{top:50%;transform:translateY(-50%) rotate(-45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:25%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-bottom-open{0%{top:75%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(45deg)}}`,\n `@keyframes hamburger-bottom-close{0%{top:50%;transform:translateY(-50%) rotate(45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:75%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes hamburger-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes kebab-top-open{0%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes kebab-top-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-bottom-open{0%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes kebab-bottom-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes kebab-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes meatballs-left-open{0%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes meatballs-left-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-right-open{0%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes meatballs-right-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes meatballs-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes grid-tl-open{0%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes grid-tl-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes grid-tr-hide{0%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-tr-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}100%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-hide{0%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}100%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-br-open{0%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes grid-br-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n ];\n}\n\n/**\n * Generate CSS transitions for mobile menu open/close\n */\nexport function generateMobileMenuAnimations(): string[] {\n return [\n `.mobile-menu-enter{max-height:0;opacity:0}`,\n `.mobile-menu-enter-active{max-height:500px;opacity:1;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n `.mobile-menu-exit{max-height:500px;opacity:1}`,\n `.mobile-menu-exit-active{max-height:0;opacity:0;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n ];\n}\n\n/**\n * Generate CSS transitions for desktop dropdown open/close\n */\nexport function generateDesktopDropdownAnimations(): string[] {\n return [\n `.desktop-dropdown-enter{opacity:0;transform:translateY(-8px)}`,\n `.desktop-dropdown-enter-active{opacity:1;transform:translateY(0);transition:opacity 200ms ease-out,transform 200ms ease-out}`,\n `.desktop-dropdown-exit{opacity:1;transform:translateY(0)}`,\n `.desktop-dropdown-exit-active{opacity:0;transform:translateY(-8px);transition:opacity 200ms ease-in,transform 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS transitions for same-layer dropdown open/close (grid-template-rows animation)\n */\nexport function generateSameLayerDropdownAnimations(): string[] {\n return [\n `.same-layer-dropdown-enter{grid-template-rows:0fr;opacity:0}`,\n `.same-layer-dropdown-enter-active{grid-template-rows:1fr;opacity:1;transition:grid-template-rows 250ms ease-out,opacity 200ms ease-out}`,\n `.same-layer-dropdown-exit{grid-template-rows:1fr;opacity:1}`,\n `.same-layer-dropdown-exit-active{grid-template-rows:0fr;opacity:0;transition:grid-template-rows 250ms ease-in,opacity 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS for custom scrollbar styling on mobile dropdowns\n */\nexport function generateScrollbarStyles(): string[] {\n return [\n `.mobile-dropdown-nav{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,0.2) transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar{width:0.5rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-track{background:transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2);border-radius:0.25rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.3)}`,\n `@media(prefers-color-scheme:dark){.mobile-dropdown-nav{scrollbar-color:rgba(255,255,255,0.2) transparent}.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.2)}.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,0.3)}}`,\n ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/classnames.utils.ts","../src/css.utils.ts","../src/animations.utils.ts"],"names":["twMerge","clsx"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Utility for merging Tailwind CSS class names\n * Combines clsx for conditional classes with tailwind-merge to handle conflicts\n */\n\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names intelligently\n * - Uses clsx for conditional classes\n * - Uses tailwind-merge to deduplicate and resolve conflicts\n *\n * @example\n * cn(\"px-2 py-1\", condition && \"bg-blue-500\")\n * cn({ \"font-bold\": isActive }, \"text-lg\")\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * CSS Resolution Utilities\n * Converts CMS type system values (ColorReference, BorderConfig, ResponsiveValue)\n * into CSS strings for rendering.\n */\n\nimport type {\n BorderConfig,\n ColorReference,\n ResponsiveConfig,\n ResponsiveValue,\n ShadowConfig,\n} from \"@otl-core/cms-types\";\n\n/**\n * Private type guard — inlined to avoid circular dependency on cms-utils\n */\nfunction isResponsiveConfig<T>(\n value: ResponsiveValue<T>,\n): value is ResponsiveConfig<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"base\" in value &&\n !Array.isArray(value)\n );\n}\n\n/**\n * Minify CSS by removing comments, extra whitespace, and unnecessary characters\n */\nexport function minifyCSS(css: string): string {\n return css\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*([{}:;,>+~()[\\]])\\s*/g, \"$1\")\n .replace(/:\\s+/g, \":\")\n .replace(/;}/g, \"}\")\n .replace(/:0px/g, \":0\")\n .replace(/:0em/g, \":0\")\n .replace(/:0rem/g, \":0\")\n .trim();\n}\n\n/**\n * Resolve a ColorReference to a CSS color string\n */\nexport function resolveColorToCSS(\n colorRef: ColorReference | undefined,\n target?: \"background\" | \"foreground\",\n): string | undefined {\n if (!colorRef) return undefined;\n if (typeof colorRef !== \"object\") return undefined;\n\n // Determine which target to use: parameter, or colorRef.target (if exists), or default to background\n const resolvedTarget =\n target ??\n (colorRef.type !== \"custom\" ? colorRef.target : undefined) ??\n \"background\";\n\n if (colorRef.type === \"custom\") {\n if (typeof colorRef.value === \"string\") {\n return resolvedTarget === \"foreground\" ? undefined : colorRef.value;\n }\n return resolvedTarget === \"foreground\"\n ? colorRef.value.foreground\n : colorRef.value.background;\n } else if (colorRef.type === \"theme\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n } else if (colorRef.type === \"variable\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n }\n\n return undefined;\n}\n\n/**\n * Resolve multiple ColorReferences to CSS color strings\n */\nexport function resolveColorsToCSS<\n T extends Record<string, ColorReference | undefined>,\n>(colorRefs: T): Partial<Record<keyof T, string>> {\n const resolved: Partial<Record<keyof T, string>> = {};\n\n for (const key in colorRefs) {\n const colorRef = colorRefs[key];\n if (colorRef) {\n const color = resolveColorToCSS(colorRef);\n if (color) {\n resolved[key] = color;\n }\n }\n }\n\n return resolved;\n}\n\n/**\n * Resolve a BorderConfig to CSS border properties\n */\nexport function resolveBorderToCSS(\n borderConfig: BorderConfig | undefined,\n): Record<string, string> | undefined {\n if (!borderConfig) return undefined;\n\n const result: Record<string, string> = {};\n\n const resolveSide = (\n side:\n | { width?: string; style?: string; color?: ColorReference }\n | undefined,\n defaultWidth?: string,\n defaultStyle?: string,\n defaultColor?: ColorReference,\n ): string | undefined => {\n const width = side?.width || defaultWidth;\n const style = side?.style || defaultStyle;\n const color = side?.color || defaultColor;\n\n if (!width || !style || !color) return undefined;\n\n const resolvedColor = resolveColorToCSS(color);\n if (!resolvedColor) return undefined;\n\n return `${width} ${style} ${resolvedColor}`;\n };\n\n const hasIndividualSides =\n borderConfig.top ||\n borderConfig.right ||\n borderConfig.bottom ||\n borderConfig.left;\n\n if (hasIndividualSides) {\n const topBorder = resolveSide(\n borderConfig.top,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (topBorder) result.borderTop = topBorder;\n\n const rightBorder = resolveSide(\n borderConfig.right,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (rightBorder) result.borderRight = rightBorder;\n\n const bottomBorder = resolveSide(\n borderConfig.bottom,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (bottomBorder) result.borderBottom = bottomBorder;\n\n const leftBorder = resolveSide(\n borderConfig.left,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (leftBorder) result.borderLeft = leftBorder;\n } else if (borderConfig.width && borderConfig.style && borderConfig.color) {\n const color = resolveColorToCSS(borderConfig.color);\n if (color) {\n result.border = `${borderConfig.width} ${borderConfig.style} ${color}`;\n }\n }\n\n if (borderConfig.radius) {\n result.borderRadius = borderConfig.radius;\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Normalize an optional ResponsiveValue into a flat object with optional breakpoint keys.\n */\nexport function normalizeResponsiveValue<T>(\n value: ResponsiveValue<T> | undefined,\n): {\n base?: T;\n sm?: T;\n md?: T;\n lg?: T;\n xl?: T;\n \"2xl\"?: T;\n} {\n if (!value) return {};\n\n if (isResponsiveConfig(value)) {\n return {\n base: value.base,\n sm: value.sm,\n md: value.md,\n lg: value.lg,\n xl: value.xl,\n \"2xl\": value[\"2xl\"],\n };\n }\n\n return { base: value };\n}\n\nexport interface ResponsiveSpacingConfig {\n border?: ResponsiveValue<BorderConfig>;\n margin?: ResponsiveValue<string>;\n padding?: ResponsiveValue<string>;\n gap?: ResponsiveValue<string>;\n height?: ResponsiveValue<string>;\n shadow?: ResponsiveValue<ShadowConfig>;\n fontSize?: ResponsiveValue<string>;\n}\n\nconst BREAKPOINTS = [\n { key: \"Sm\", minWidth: \"640px\" },\n { key: \"Md\", minWidth: \"768px\" },\n { key: \"Lg\", minWidth: \"1024px\" },\n { key: \"Xl\", minWidth: \"1280px\" },\n];\n\n/**\n * Generate responsive CSS for spacing (margin, padding, gap, border) with media queries\n */\nexport function generateResponsiveSpacingCSS(\n className: string,\n config: ResponsiveSpacingConfig,\n): string | null {\n const css: string[] = [];\n const targetClass = `.${className}`;\n\n const normalizedBorder = normalizeResponsiveValue(config.border);\n const normalizedMargin = normalizeResponsiveValue(config.margin);\n const normalizedPadding = normalizeResponsiveValue(config.padding);\n const normalizedGap = normalizeResponsiveValue(config.gap);\n const normalizedHeight = normalizeResponsiveValue(config.height);\n const normalizedShadow = normalizeResponsiveValue(config.shadow);\n const normalizedFontSize = normalizeResponsiveValue(config.fontSize);\n\n const border = {\n base: normalizedBorder.base,\n sm: normalizedBorder.sm,\n md: normalizedBorder.md,\n lg: normalizedBorder.lg,\n xl: normalizedBorder.xl,\n };\n\n const margin = {\n base: normalizedMargin.base,\n sm: normalizedMargin.sm,\n md: normalizedMargin.md,\n lg: normalizedMargin.lg,\n xl: normalizedMargin.xl,\n };\n\n const padding = {\n base: normalizedPadding.base,\n sm: normalizedPadding.sm,\n md: normalizedPadding.md,\n lg: normalizedPadding.lg,\n xl: normalizedPadding.xl,\n };\n\n const gap = {\n base: normalizedGap.base,\n sm: normalizedGap.sm,\n md: normalizedGap.md,\n lg: normalizedGap.lg,\n xl: normalizedGap.xl,\n };\n\n const height = {\n base: normalizedHeight.base,\n sm: normalizedHeight.sm,\n md: normalizedHeight.md,\n lg: normalizedHeight.lg,\n xl: normalizedHeight.xl,\n };\n\n const shadow = {\n base: normalizedShadow.base,\n sm: normalizedShadow.sm,\n md: normalizedShadow.md,\n lg: normalizedShadow.lg,\n xl: normalizedShadow.xl,\n };\n\n const fontSize = {\n base: normalizedFontSize.base,\n sm: normalizedFontSize.sm,\n md: normalizedFontSize.md,\n lg: normalizedFontSize.lg,\n xl: normalizedFontSize.xl,\n };\n\n const shadowToCSS = (s: ShadowConfig): string => {\n const parts = [s.offsetX, s.offsetY, s.blurRadius, s.spreadRadius, s.color];\n return s.inset ? `inset ${parts.join(\" \")}` : parts.join(\" \");\n };\n\n const baseStyles: string[] = [];\n\n if (border.base) {\n const resolvedBorder = resolveBorderToCSS(border.base);\n if (resolvedBorder) {\n Object.entries(resolvedBorder).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n baseStyles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (margin.base) {\n baseStyles.push(`margin:${margin.base}`);\n }\n\n if (padding.base) {\n baseStyles.push(`padding:${padding.base}`);\n }\n\n if (gap.base) {\n baseStyles.push(`gap:${gap.base}`);\n }\n\n if (height.base) {\n baseStyles.push(`height:${height.base}`);\n }\n\n if (shadow.base) {\n baseStyles.push(`box-shadow:${shadowToCSS(shadow.base)}`);\n }\n\n if (fontSize.base) {\n baseStyles.push(`font-size:${fontSize.base}`);\n }\n\n if (baseStyles.length > 0) {\n css.push(`${targetClass}{${baseStyles.join(\";\")}}`);\n }\n\n BREAKPOINTS.forEach(({ key, minWidth }) => {\n const bpKey = key.toLowerCase() as \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n const borderBp = border[bpKey];\n const marginBp = margin[bpKey];\n const paddingBp = padding[bpKey];\n const gapBp = gap[bpKey];\n const heightBp = height[bpKey];\n const shadowBp = shadow[bpKey];\n const fontSizeBp = fontSize[bpKey];\n\n if (\n borderBp ||\n marginBp ||\n paddingBp ||\n gapBp ||\n heightBp ||\n shadowBp ||\n fontSizeBp\n ) {\n const styles: string[] = [];\n\n if (borderBp) {\n const resolvedBorderBp = resolveBorderToCSS(borderBp);\n if (resolvedBorderBp) {\n Object.entries(resolvedBorderBp).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n styles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (marginBp) {\n styles.push(`margin:${marginBp}`);\n }\n\n if (paddingBp) {\n styles.push(`padding:${paddingBp}`);\n }\n\n if (gapBp) {\n styles.push(`gap:${gapBp}`);\n }\n\n if (heightBp) {\n styles.push(`height:${heightBp}`);\n }\n\n if (shadowBp) {\n styles.push(`box-shadow:${shadowToCSS(shadowBp)}`);\n }\n\n if (fontSizeBp) {\n styles.push(`font-size:${fontSizeBp}`);\n }\n\n if (styles.length > 0) {\n css.push(\n `@media(min-width:${minWidth}){${targetClass}{${styles.join(\";\")}}}`,\n );\n }\n }\n });\n\n return css.length > 0 ? minifyCSS(css.join(\"\")) : null;\n}\n","/**\n * CSS Animation Utilities\n * Generates CSS keyframe animations and transitions for navigation components.\n */\n\n/**\n * Generate CSS keyframe animations for toggle icons (hamburger, kebab, meatball, grid)\n */\nexport function generateToggleIconAnimations(): string[] {\n return [\n `@keyframes hamburger-top-open{0%{top:25%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(-45deg)}}`,\n `@keyframes hamburger-top-close{0%{top:50%;transform:translateY(-50%) rotate(-45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:25%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-bottom-open{0%{top:75%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(45deg)}}`,\n `@keyframes hamburger-bottom-close{0%{top:50%;transform:translateY(-50%) rotate(45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:75%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes hamburger-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes kebab-top-open{0%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes kebab-top-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-bottom-open{0%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes kebab-bottom-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes kebab-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes meatballs-left-open{0%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes meatballs-left-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-right-open{0%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes meatballs-right-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes meatballs-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes grid-tl-open{0%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes grid-tl-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes grid-tr-hide{0%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-tr-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}100%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-hide{0%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}100%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-br-open{0%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes grid-br-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n ];\n}\n\n/**\n * Generate CSS transitions for mobile menu open/close\n */\nexport function generateMobileMenuAnimations(): string[] {\n return [\n `.mobile-menu-enter{max-height:0;opacity:0}`,\n `.mobile-menu-enter-active{max-height:500px;opacity:1;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n `.mobile-menu-exit{max-height:500px;opacity:1}`,\n `.mobile-menu-exit-active{max-height:0;opacity:0;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n ];\n}\n\n/**\n * Generate CSS transitions for desktop dropdown open/close\n */\nexport function generateDesktopDropdownAnimations(): string[] {\n return [\n `.desktop-dropdown-enter{opacity:0;transform:translateY(-8px)}`,\n `.desktop-dropdown-enter-active{opacity:1;transform:translateY(0);transition:opacity 200ms ease-out,transform 200ms ease-out}`,\n `.desktop-dropdown-exit{opacity:1;transform:translateY(0)}`,\n `.desktop-dropdown-exit-active{opacity:0;transform:translateY(-8px);transition:opacity 200ms ease-in,transform 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS transitions for same-layer dropdown open/close (grid-template-rows animation)\n */\nexport function generateSameLayerDropdownAnimations(): string[] {\n return [\n `.same-layer-dropdown-enter{grid-template-rows:0fr;opacity:0}`,\n `.same-layer-dropdown-enter-active{grid-template-rows:1fr;opacity:1;transition:grid-template-rows 250ms ease-out,opacity 200ms ease-out}`,\n `.same-layer-dropdown-exit{grid-template-rows:1fr;opacity:1}`,\n `.same-layer-dropdown-exit-active{grid-template-rows:0fr;opacity:0;transition:grid-template-rows 250ms ease-in,opacity 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS for custom scrollbar styling on mobile dropdowns\n */\nexport function generateScrollbarStyles(): string[] {\n return [\n `.mobile-dropdown-nav{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,0.2) transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar{width:0.5rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-track{background:transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2);border-radius:0.25rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.3)}`,\n `@media(prefers-color-scheme:dark){.mobile-dropdown-nav{scrollbar-color:rgba(255,255,255,0.2) transparent}.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.2)}.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,0.3)}}`,\n ];\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -55,6 +55,7 @@ interface ResponsiveSpacingConfig {
|
|
|
55
55
|
margin?: ResponsiveValue<string>;
|
|
56
56
|
padding?: ResponsiveValue<string>;
|
|
57
57
|
gap?: ResponsiveValue<string>;
|
|
58
|
+
height?: ResponsiveValue<string>;
|
|
58
59
|
shadow?: ResponsiveValue<ShadowConfig>;
|
|
59
60
|
fontSize?: ResponsiveValue<string>;
|
|
60
61
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -55,6 +55,7 @@ interface ResponsiveSpacingConfig {
|
|
|
55
55
|
margin?: ResponsiveValue<string>;
|
|
56
56
|
padding?: ResponsiveValue<string>;
|
|
57
57
|
gap?: ResponsiveValue<string>;
|
|
58
|
+
height?: ResponsiveValue<string>;
|
|
58
59
|
shadow?: ResponsiveValue<ShadowConfig>;
|
|
59
60
|
fontSize?: ResponsiveValue<string>;
|
|
60
61
|
}
|
package/dist/index.js
CHANGED
|
@@ -122,6 +122,7 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
122
122
|
const normalizedMargin = normalizeResponsiveValue(config.margin);
|
|
123
123
|
const normalizedPadding = normalizeResponsiveValue(config.padding);
|
|
124
124
|
const normalizedGap = normalizeResponsiveValue(config.gap);
|
|
125
|
+
const normalizedHeight = normalizeResponsiveValue(config.height);
|
|
125
126
|
const normalizedShadow = normalizeResponsiveValue(config.shadow);
|
|
126
127
|
const normalizedFontSize = normalizeResponsiveValue(config.fontSize);
|
|
127
128
|
const border = {
|
|
@@ -152,6 +153,13 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
152
153
|
lg: normalizedGap.lg,
|
|
153
154
|
xl: normalizedGap.xl
|
|
154
155
|
};
|
|
156
|
+
const height = {
|
|
157
|
+
base: normalizedHeight.base,
|
|
158
|
+
sm: normalizedHeight.sm,
|
|
159
|
+
md: normalizedHeight.md,
|
|
160
|
+
lg: normalizedHeight.lg,
|
|
161
|
+
xl: normalizedHeight.xl
|
|
162
|
+
};
|
|
155
163
|
const shadow = {
|
|
156
164
|
base: normalizedShadow.base,
|
|
157
165
|
sm: normalizedShadow.sm,
|
|
@@ -191,6 +199,9 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
191
199
|
if (gap.base) {
|
|
192
200
|
baseStyles.push(`gap:${gap.base}`);
|
|
193
201
|
}
|
|
202
|
+
if (height.base) {
|
|
203
|
+
baseStyles.push(`height:${height.base}`);
|
|
204
|
+
}
|
|
194
205
|
if (shadow.base) {
|
|
195
206
|
baseStyles.push(`box-shadow:${shadowToCSS(shadow.base)}`);
|
|
196
207
|
}
|
|
@@ -206,9 +217,10 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
206
217
|
const marginBp = margin[bpKey];
|
|
207
218
|
const paddingBp = padding[bpKey];
|
|
208
219
|
const gapBp = gap[bpKey];
|
|
220
|
+
const heightBp = height[bpKey];
|
|
209
221
|
const shadowBp = shadow[bpKey];
|
|
210
222
|
const fontSizeBp = fontSize[bpKey];
|
|
211
|
-
if (borderBp || marginBp || paddingBp || gapBp || shadowBp || fontSizeBp) {
|
|
223
|
+
if (borderBp || marginBp || paddingBp || gapBp || heightBp || shadowBp || fontSizeBp) {
|
|
212
224
|
const styles = [];
|
|
213
225
|
if (borderBp) {
|
|
214
226
|
const resolvedBorderBp = resolveBorderToCSS(borderBp);
|
|
@@ -230,6 +242,9 @@ function generateResponsiveSpacingCSS(className, config) {
|
|
|
230
242
|
if (gapBp) {
|
|
231
243
|
styles.push(`gap:${gapBp}`);
|
|
232
244
|
}
|
|
245
|
+
if (heightBp) {
|
|
246
|
+
styles.push(`height:${heightBp}`);
|
|
247
|
+
}
|
|
233
248
|
if (shadowBp) {
|
|
234
249
|
styles.push(`box-shadow:${shadowToCSS(shadowBp)}`);
|
|
235
250
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/classnames.utils.ts","../src/css.utils.ts","../src/animations.utils.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Utility for merging Tailwind CSS class names\n * Combines clsx for conditional classes with tailwind-merge to handle conflicts\n */\n\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names intelligently\n * - Uses clsx for conditional classes\n * - Uses tailwind-merge to deduplicate and resolve conflicts\n *\n * @example\n * cn(\"px-2 py-1\", condition && \"bg-blue-500\")\n * cn({ \"font-bold\": isActive }, \"text-lg\")\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * CSS Resolution Utilities\n * Converts CMS type system values (ColorReference, BorderConfig, ResponsiveValue)\n * into CSS strings for rendering.\n */\n\nimport type {\n BorderConfig,\n ColorReference,\n ResponsiveConfig,\n ResponsiveValue,\n ShadowConfig,\n} from \"@otl-core/cms-types\";\n\n/**\n * Private type guard — inlined to avoid circular dependency on cms-utils\n */\nfunction isResponsiveConfig<T>(\n value: ResponsiveValue<T>,\n): value is ResponsiveConfig<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"base\" in value &&\n !Array.isArray(value)\n );\n}\n\n/**\n * Minify CSS by removing comments, extra whitespace, and unnecessary characters\n */\nexport function minifyCSS(css: string): string {\n return css\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*([{}:;,>+~()[\\]])\\s*/g, \"$1\")\n .replace(/:\\s+/g, \":\")\n .replace(/;}/g, \"}\")\n .replace(/:0px/g, \":0\")\n .replace(/:0em/g, \":0\")\n .replace(/:0rem/g, \":0\")\n .trim();\n}\n\n/**\n * Resolve a ColorReference to a CSS color string\n */\nexport function resolveColorToCSS(\n colorRef: ColorReference | undefined,\n target?: \"background\" | \"foreground\",\n): string | undefined {\n if (!colorRef) return undefined;\n if (typeof colorRef !== \"object\") return undefined;\n\n // Determine which target to use: parameter, or colorRef.target (if exists), or default to background\n const resolvedTarget =\n target ??\n (colorRef.type !== \"custom\" ? colorRef.target : undefined) ??\n \"background\";\n\n if (colorRef.type === \"custom\") {\n if (typeof colorRef.value === \"string\") {\n return resolvedTarget === \"foreground\" ? undefined : colorRef.value;\n }\n return resolvedTarget === \"foreground\"\n ? colorRef.value.foreground\n : colorRef.value.background;\n } else if (colorRef.type === \"theme\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n } else if (colorRef.type === \"variable\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n }\n\n return undefined;\n}\n\n/**\n * Resolve multiple ColorReferences to CSS color strings\n */\nexport function resolveColorsToCSS<\n T extends Record<string, ColorReference | undefined>,\n>(colorRefs: T): Partial<Record<keyof T, string>> {\n const resolved: Partial<Record<keyof T, string>> = {};\n\n for (const key in colorRefs) {\n const colorRef = colorRefs[key];\n if (colorRef) {\n const color = resolveColorToCSS(colorRef);\n if (color) {\n resolved[key] = color;\n }\n }\n }\n\n return resolved;\n}\n\n/**\n * Resolve a BorderConfig to CSS border properties\n */\nexport function resolveBorderToCSS(\n borderConfig: BorderConfig | undefined,\n): Record<string, string> | undefined {\n if (!borderConfig) return undefined;\n\n const result: Record<string, string> = {};\n\n const resolveSide = (\n side:\n | { width?: string; style?: string; color?: ColorReference }\n | undefined,\n defaultWidth?: string,\n defaultStyle?: string,\n defaultColor?: ColorReference,\n ): string | undefined => {\n const width = side?.width || defaultWidth;\n const style = side?.style || defaultStyle;\n const color = side?.color || defaultColor;\n\n if (!width || !style || !color) return undefined;\n\n const resolvedColor = resolveColorToCSS(color);\n if (!resolvedColor) return undefined;\n\n return `${width} ${style} ${resolvedColor}`;\n };\n\n const hasIndividualSides =\n borderConfig.top ||\n borderConfig.right ||\n borderConfig.bottom ||\n borderConfig.left;\n\n if (hasIndividualSides) {\n const topBorder = resolveSide(\n borderConfig.top,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (topBorder) result.borderTop = topBorder;\n\n const rightBorder = resolveSide(\n borderConfig.right,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (rightBorder) result.borderRight = rightBorder;\n\n const bottomBorder = resolveSide(\n borderConfig.bottom,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (bottomBorder) result.borderBottom = bottomBorder;\n\n const leftBorder = resolveSide(\n borderConfig.left,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (leftBorder) result.borderLeft = leftBorder;\n } else if (borderConfig.width && borderConfig.style && borderConfig.color) {\n const color = resolveColorToCSS(borderConfig.color);\n if (color) {\n result.border = `${borderConfig.width} ${borderConfig.style} ${color}`;\n }\n }\n\n if (borderConfig.radius) {\n result.borderRadius = borderConfig.radius;\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Normalize an optional ResponsiveValue into a flat object with optional breakpoint keys.\n */\nexport function normalizeResponsiveValue<T>(\n value: ResponsiveValue<T> | undefined,\n): {\n base?: T;\n sm?: T;\n md?: T;\n lg?: T;\n xl?: T;\n \"2xl\"?: T;\n} {\n if (!value) return {};\n\n if (isResponsiveConfig(value)) {\n return {\n base: value.base,\n sm: value.sm,\n md: value.md,\n lg: value.lg,\n xl: value.xl,\n \"2xl\": value[\"2xl\"],\n };\n }\n\n return { base: value };\n}\n\nexport interface ResponsiveSpacingConfig {\n border?: ResponsiveValue<BorderConfig>;\n margin?: ResponsiveValue<string>;\n padding?: ResponsiveValue<string>;\n gap?: ResponsiveValue<string>;\n shadow?: ResponsiveValue<ShadowConfig>;\n fontSize?: ResponsiveValue<string>;\n}\n\nconst BREAKPOINTS = [\n { key: \"Sm\", minWidth: \"640px\" },\n { key: \"Md\", minWidth: \"768px\" },\n { key: \"Lg\", minWidth: \"1024px\" },\n { key: \"Xl\", minWidth: \"1280px\" },\n];\n\n/**\n * Generate responsive CSS for spacing (margin, padding, gap, border) with media queries\n */\nexport function generateResponsiveSpacingCSS(\n className: string,\n config: ResponsiveSpacingConfig,\n): string | null {\n const css: string[] = [];\n const targetClass = `.${className}`;\n\n const normalizedBorder = normalizeResponsiveValue(config.border);\n const normalizedMargin = normalizeResponsiveValue(config.margin);\n const normalizedPadding = normalizeResponsiveValue(config.padding);\n const normalizedGap = normalizeResponsiveValue(config.gap);\n const normalizedShadow = normalizeResponsiveValue(config.shadow);\n const normalizedFontSize = normalizeResponsiveValue(config.fontSize);\n\n const border = {\n base: normalizedBorder.base,\n sm: normalizedBorder.sm,\n md: normalizedBorder.md,\n lg: normalizedBorder.lg,\n xl: normalizedBorder.xl,\n };\n\n const margin = {\n base: normalizedMargin.base,\n sm: normalizedMargin.sm,\n md: normalizedMargin.md,\n lg: normalizedMargin.lg,\n xl: normalizedMargin.xl,\n };\n\n const padding = {\n base: normalizedPadding.base,\n sm: normalizedPadding.sm,\n md: normalizedPadding.md,\n lg: normalizedPadding.lg,\n xl: normalizedPadding.xl,\n };\n\n const gap = {\n base: normalizedGap.base,\n sm: normalizedGap.sm,\n md: normalizedGap.md,\n lg: normalizedGap.lg,\n xl: normalizedGap.xl,\n };\n\n const shadow = {\n base: normalizedShadow.base,\n sm: normalizedShadow.sm,\n md: normalizedShadow.md,\n lg: normalizedShadow.lg,\n xl: normalizedShadow.xl,\n };\n\n const fontSize = {\n base: normalizedFontSize.base,\n sm: normalizedFontSize.sm,\n md: normalizedFontSize.md,\n lg: normalizedFontSize.lg,\n xl: normalizedFontSize.xl,\n };\n\n const shadowToCSS = (s: ShadowConfig): string => {\n const parts = [s.offsetX, s.offsetY, s.blurRadius, s.spreadRadius, s.color];\n return s.inset ? `inset ${parts.join(\" \")}` : parts.join(\" \");\n };\n\n const baseStyles: string[] = [];\n\n if (border.base) {\n const resolvedBorder = resolveBorderToCSS(border.base);\n if (resolvedBorder) {\n Object.entries(resolvedBorder).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n baseStyles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (margin.base) {\n baseStyles.push(`margin:${margin.base}`);\n }\n\n if (padding.base) {\n baseStyles.push(`padding:${padding.base}`);\n }\n\n if (gap.base) {\n baseStyles.push(`gap:${gap.base}`);\n }\n\n if (shadow.base) {\n baseStyles.push(`box-shadow:${shadowToCSS(shadow.base)}`);\n }\n\n if (fontSize.base) {\n baseStyles.push(`font-size:${fontSize.base}`);\n }\n\n if (baseStyles.length > 0) {\n css.push(`${targetClass}{${baseStyles.join(\";\")}}`);\n }\n\n BREAKPOINTS.forEach(({ key, minWidth }) => {\n const bpKey = key.toLowerCase() as \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n const borderBp = border[bpKey];\n const marginBp = margin[bpKey];\n const paddingBp = padding[bpKey];\n const gapBp = gap[bpKey];\n const shadowBp = shadow[bpKey];\n const fontSizeBp = fontSize[bpKey];\n\n if (borderBp || marginBp || paddingBp || gapBp || shadowBp || fontSizeBp) {\n const styles: string[] = [];\n\n if (borderBp) {\n const resolvedBorderBp = resolveBorderToCSS(borderBp);\n if (resolvedBorderBp) {\n Object.entries(resolvedBorderBp).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n styles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (marginBp) {\n styles.push(`margin:${marginBp}`);\n }\n\n if (paddingBp) {\n styles.push(`padding:${paddingBp}`);\n }\n\n if (gapBp) {\n styles.push(`gap:${gapBp}`);\n }\n\n if (shadowBp) {\n styles.push(`box-shadow:${shadowToCSS(shadowBp)}`);\n }\n\n if (fontSizeBp) {\n styles.push(`font-size:${fontSizeBp}`);\n }\n\n if (styles.length > 0) {\n css.push(\n `@media(min-width:${minWidth}){${targetClass}{${styles.join(\";\")}}}`,\n );\n }\n }\n });\n\n return css.length > 0 ? minifyCSS(css.join(\"\")) : null;\n}\n","/**\n * CSS Animation Utilities\n * Generates CSS keyframe animations and transitions for navigation components.\n */\n\n/**\n * Generate CSS keyframe animations for toggle icons (hamburger, kebab, meatball, grid)\n */\nexport function generateToggleIconAnimations(): string[] {\n return [\n `@keyframes hamburger-top-open{0%{top:25%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(-45deg)}}`,\n `@keyframes hamburger-top-close{0%{top:50%;transform:translateY(-50%) rotate(-45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:25%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-bottom-open{0%{top:75%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(45deg)}}`,\n `@keyframes hamburger-bottom-close{0%{top:50%;transform:translateY(-50%) rotate(45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:75%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes hamburger-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes kebab-top-open{0%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes kebab-top-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-bottom-open{0%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes kebab-bottom-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes kebab-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes meatballs-left-open{0%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes meatballs-left-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-right-open{0%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes meatballs-right-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes meatballs-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes grid-tl-open{0%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes grid-tl-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes grid-tr-hide{0%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-tr-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}100%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-hide{0%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}100%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-br-open{0%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes grid-br-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n ];\n}\n\n/**\n * Generate CSS transitions for mobile menu open/close\n */\nexport function generateMobileMenuAnimations(): string[] {\n return [\n `.mobile-menu-enter{max-height:0;opacity:0}`,\n `.mobile-menu-enter-active{max-height:500px;opacity:1;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n `.mobile-menu-exit{max-height:500px;opacity:1}`,\n `.mobile-menu-exit-active{max-height:0;opacity:0;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n ];\n}\n\n/**\n * Generate CSS transitions for desktop dropdown open/close\n */\nexport function generateDesktopDropdownAnimations(): string[] {\n return [\n `.desktop-dropdown-enter{opacity:0;transform:translateY(-8px)}`,\n `.desktop-dropdown-enter-active{opacity:1;transform:translateY(0);transition:opacity 200ms ease-out,transform 200ms ease-out}`,\n `.desktop-dropdown-exit{opacity:1;transform:translateY(0)}`,\n `.desktop-dropdown-exit-active{opacity:0;transform:translateY(-8px);transition:opacity 200ms ease-in,transform 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS transitions for same-layer dropdown open/close (grid-template-rows animation)\n */\nexport function generateSameLayerDropdownAnimations(): string[] {\n return [\n `.same-layer-dropdown-enter{grid-template-rows:0fr;opacity:0}`,\n `.same-layer-dropdown-enter-active{grid-template-rows:1fr;opacity:1;transition:grid-template-rows 250ms ease-out,opacity 200ms ease-out}`,\n `.same-layer-dropdown-exit{grid-template-rows:1fr;opacity:1}`,\n `.same-layer-dropdown-exit-active{grid-template-rows:0fr;opacity:0;transition:grid-template-rows 250ms ease-in,opacity 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS for custom scrollbar styling on mobile dropdowns\n */\nexport function generateScrollbarStyles(): string[] {\n return [\n `.mobile-dropdown-nav{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,0.2) transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar{width:0.5rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-track{background:transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2);border-radius:0.25rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.3)}`,\n `@media(prefers-color-scheme:dark){.mobile-dropdown-nav{scrollbar-color:rgba(255,255,255,0.2) transparent}.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.2)}.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,0.3)}}`,\n ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/classnames.utils.ts","../src/css.utils.ts","../src/animations.utils.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Utility for merging Tailwind CSS class names\n * Combines clsx for conditional classes with tailwind-merge to handle conflicts\n */\n\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names intelligently\n * - Uses clsx for conditional classes\n * - Uses tailwind-merge to deduplicate and resolve conflicts\n *\n * @example\n * cn(\"px-2 py-1\", condition && \"bg-blue-500\")\n * cn({ \"font-bold\": isActive }, \"text-lg\")\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * CSS Resolution Utilities\n * Converts CMS type system values (ColorReference, BorderConfig, ResponsiveValue)\n * into CSS strings for rendering.\n */\n\nimport type {\n BorderConfig,\n ColorReference,\n ResponsiveConfig,\n ResponsiveValue,\n ShadowConfig,\n} from \"@otl-core/cms-types\";\n\n/**\n * Private type guard — inlined to avoid circular dependency on cms-utils\n */\nfunction isResponsiveConfig<T>(\n value: ResponsiveValue<T>,\n): value is ResponsiveConfig<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"base\" in value &&\n !Array.isArray(value)\n );\n}\n\n/**\n * Minify CSS by removing comments, extra whitespace, and unnecessary characters\n */\nexport function minifyCSS(css: string): string {\n return css\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*([{}:;,>+~()[\\]])\\s*/g, \"$1\")\n .replace(/:\\s+/g, \":\")\n .replace(/;}/g, \"}\")\n .replace(/:0px/g, \":0\")\n .replace(/:0em/g, \":0\")\n .replace(/:0rem/g, \":0\")\n .trim();\n}\n\n/**\n * Resolve a ColorReference to a CSS color string\n */\nexport function resolveColorToCSS(\n colorRef: ColorReference | undefined,\n target?: \"background\" | \"foreground\",\n): string | undefined {\n if (!colorRef) return undefined;\n if (typeof colorRef !== \"object\") return undefined;\n\n // Determine which target to use: parameter, or colorRef.target (if exists), or default to background\n const resolvedTarget =\n target ??\n (colorRef.type !== \"custom\" ? colorRef.target : undefined) ??\n \"background\";\n\n if (colorRef.type === \"custom\") {\n if (typeof colorRef.value === \"string\") {\n return resolvedTarget === \"foreground\" ? undefined : colorRef.value;\n }\n return resolvedTarget === \"foreground\"\n ? colorRef.value.foreground\n : colorRef.value.background;\n } else if (colorRef.type === \"theme\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n } else if (colorRef.type === \"variable\") {\n return resolvedTarget === \"foreground\"\n ? `var(--${colorRef.value}-foreground)`\n : `var(--${colorRef.value})`;\n }\n\n return undefined;\n}\n\n/**\n * Resolve multiple ColorReferences to CSS color strings\n */\nexport function resolveColorsToCSS<\n T extends Record<string, ColorReference | undefined>,\n>(colorRefs: T): Partial<Record<keyof T, string>> {\n const resolved: Partial<Record<keyof T, string>> = {};\n\n for (const key in colorRefs) {\n const colorRef = colorRefs[key];\n if (colorRef) {\n const color = resolveColorToCSS(colorRef);\n if (color) {\n resolved[key] = color;\n }\n }\n }\n\n return resolved;\n}\n\n/**\n * Resolve a BorderConfig to CSS border properties\n */\nexport function resolveBorderToCSS(\n borderConfig: BorderConfig | undefined,\n): Record<string, string> | undefined {\n if (!borderConfig) return undefined;\n\n const result: Record<string, string> = {};\n\n const resolveSide = (\n side:\n | { width?: string; style?: string; color?: ColorReference }\n | undefined,\n defaultWidth?: string,\n defaultStyle?: string,\n defaultColor?: ColorReference,\n ): string | undefined => {\n const width = side?.width || defaultWidth;\n const style = side?.style || defaultStyle;\n const color = side?.color || defaultColor;\n\n if (!width || !style || !color) return undefined;\n\n const resolvedColor = resolveColorToCSS(color);\n if (!resolvedColor) return undefined;\n\n return `${width} ${style} ${resolvedColor}`;\n };\n\n const hasIndividualSides =\n borderConfig.top ||\n borderConfig.right ||\n borderConfig.bottom ||\n borderConfig.left;\n\n if (hasIndividualSides) {\n const topBorder = resolveSide(\n borderConfig.top,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (topBorder) result.borderTop = topBorder;\n\n const rightBorder = resolveSide(\n borderConfig.right,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (rightBorder) result.borderRight = rightBorder;\n\n const bottomBorder = resolveSide(\n borderConfig.bottom,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (bottomBorder) result.borderBottom = bottomBorder;\n\n const leftBorder = resolveSide(\n borderConfig.left,\n borderConfig.width,\n borderConfig.style,\n borderConfig.color,\n );\n if (leftBorder) result.borderLeft = leftBorder;\n } else if (borderConfig.width && borderConfig.style && borderConfig.color) {\n const color = resolveColorToCSS(borderConfig.color);\n if (color) {\n result.border = `${borderConfig.width} ${borderConfig.style} ${color}`;\n }\n }\n\n if (borderConfig.radius) {\n result.borderRadius = borderConfig.radius;\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Normalize an optional ResponsiveValue into a flat object with optional breakpoint keys.\n */\nexport function normalizeResponsiveValue<T>(\n value: ResponsiveValue<T> | undefined,\n): {\n base?: T;\n sm?: T;\n md?: T;\n lg?: T;\n xl?: T;\n \"2xl\"?: T;\n} {\n if (!value) return {};\n\n if (isResponsiveConfig(value)) {\n return {\n base: value.base,\n sm: value.sm,\n md: value.md,\n lg: value.lg,\n xl: value.xl,\n \"2xl\": value[\"2xl\"],\n };\n }\n\n return { base: value };\n}\n\nexport interface ResponsiveSpacingConfig {\n border?: ResponsiveValue<BorderConfig>;\n margin?: ResponsiveValue<string>;\n padding?: ResponsiveValue<string>;\n gap?: ResponsiveValue<string>;\n height?: ResponsiveValue<string>;\n shadow?: ResponsiveValue<ShadowConfig>;\n fontSize?: ResponsiveValue<string>;\n}\n\nconst BREAKPOINTS = [\n { key: \"Sm\", minWidth: \"640px\" },\n { key: \"Md\", minWidth: \"768px\" },\n { key: \"Lg\", minWidth: \"1024px\" },\n { key: \"Xl\", minWidth: \"1280px\" },\n];\n\n/**\n * Generate responsive CSS for spacing (margin, padding, gap, border) with media queries\n */\nexport function generateResponsiveSpacingCSS(\n className: string,\n config: ResponsiveSpacingConfig,\n): string | null {\n const css: string[] = [];\n const targetClass = `.${className}`;\n\n const normalizedBorder = normalizeResponsiveValue(config.border);\n const normalizedMargin = normalizeResponsiveValue(config.margin);\n const normalizedPadding = normalizeResponsiveValue(config.padding);\n const normalizedGap = normalizeResponsiveValue(config.gap);\n const normalizedHeight = normalizeResponsiveValue(config.height);\n const normalizedShadow = normalizeResponsiveValue(config.shadow);\n const normalizedFontSize = normalizeResponsiveValue(config.fontSize);\n\n const border = {\n base: normalizedBorder.base,\n sm: normalizedBorder.sm,\n md: normalizedBorder.md,\n lg: normalizedBorder.lg,\n xl: normalizedBorder.xl,\n };\n\n const margin = {\n base: normalizedMargin.base,\n sm: normalizedMargin.sm,\n md: normalizedMargin.md,\n lg: normalizedMargin.lg,\n xl: normalizedMargin.xl,\n };\n\n const padding = {\n base: normalizedPadding.base,\n sm: normalizedPadding.sm,\n md: normalizedPadding.md,\n lg: normalizedPadding.lg,\n xl: normalizedPadding.xl,\n };\n\n const gap = {\n base: normalizedGap.base,\n sm: normalizedGap.sm,\n md: normalizedGap.md,\n lg: normalizedGap.lg,\n xl: normalizedGap.xl,\n };\n\n const height = {\n base: normalizedHeight.base,\n sm: normalizedHeight.sm,\n md: normalizedHeight.md,\n lg: normalizedHeight.lg,\n xl: normalizedHeight.xl,\n };\n\n const shadow = {\n base: normalizedShadow.base,\n sm: normalizedShadow.sm,\n md: normalizedShadow.md,\n lg: normalizedShadow.lg,\n xl: normalizedShadow.xl,\n };\n\n const fontSize = {\n base: normalizedFontSize.base,\n sm: normalizedFontSize.sm,\n md: normalizedFontSize.md,\n lg: normalizedFontSize.lg,\n xl: normalizedFontSize.xl,\n };\n\n const shadowToCSS = (s: ShadowConfig): string => {\n const parts = [s.offsetX, s.offsetY, s.blurRadius, s.spreadRadius, s.color];\n return s.inset ? `inset ${parts.join(\" \")}` : parts.join(\" \");\n };\n\n const baseStyles: string[] = [];\n\n if (border.base) {\n const resolvedBorder = resolveBorderToCSS(border.base);\n if (resolvedBorder) {\n Object.entries(resolvedBorder).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n baseStyles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (margin.base) {\n baseStyles.push(`margin:${margin.base}`);\n }\n\n if (padding.base) {\n baseStyles.push(`padding:${padding.base}`);\n }\n\n if (gap.base) {\n baseStyles.push(`gap:${gap.base}`);\n }\n\n if (height.base) {\n baseStyles.push(`height:${height.base}`);\n }\n\n if (shadow.base) {\n baseStyles.push(`box-shadow:${shadowToCSS(shadow.base)}`);\n }\n\n if (fontSize.base) {\n baseStyles.push(`font-size:${fontSize.base}`);\n }\n\n if (baseStyles.length > 0) {\n css.push(`${targetClass}{${baseStyles.join(\";\")}}`);\n }\n\n BREAKPOINTS.forEach(({ key, minWidth }) => {\n const bpKey = key.toLowerCase() as \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n const borderBp = border[bpKey];\n const marginBp = margin[bpKey];\n const paddingBp = padding[bpKey];\n const gapBp = gap[bpKey];\n const heightBp = height[bpKey];\n const shadowBp = shadow[bpKey];\n const fontSizeBp = fontSize[bpKey];\n\n if (\n borderBp ||\n marginBp ||\n paddingBp ||\n gapBp ||\n heightBp ||\n shadowBp ||\n fontSizeBp\n ) {\n const styles: string[] = [];\n\n if (borderBp) {\n const resolvedBorderBp = resolveBorderToCSS(borderBp);\n if (resolvedBorderBp) {\n Object.entries(resolvedBorderBp).forEach(([prop, value]) => {\n if (value) {\n const cssProp = prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n styles.push(`${cssProp}:${value}`);\n }\n });\n }\n }\n\n if (marginBp) {\n styles.push(`margin:${marginBp}`);\n }\n\n if (paddingBp) {\n styles.push(`padding:${paddingBp}`);\n }\n\n if (gapBp) {\n styles.push(`gap:${gapBp}`);\n }\n\n if (heightBp) {\n styles.push(`height:${heightBp}`);\n }\n\n if (shadowBp) {\n styles.push(`box-shadow:${shadowToCSS(shadowBp)}`);\n }\n\n if (fontSizeBp) {\n styles.push(`font-size:${fontSizeBp}`);\n }\n\n if (styles.length > 0) {\n css.push(\n `@media(min-width:${minWidth}){${targetClass}{${styles.join(\";\")}}}`,\n );\n }\n }\n });\n\n return css.length > 0 ? minifyCSS(css.join(\"\")) : null;\n}\n","/**\n * CSS Animation Utilities\n * Generates CSS keyframe animations and transitions for navigation components.\n */\n\n/**\n * Generate CSS keyframe animations for toggle icons (hamburger, kebab, meatball, grid)\n */\nexport function generateToggleIconAnimations(): string[] {\n return [\n `@keyframes hamburger-top-open{0%{top:25%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(-45deg)}}`,\n `@keyframes hamburger-top-close{0%{top:50%;transform:translateY(-50%) rotate(-45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:25%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-bottom-open{0%{top:75%;transform:translateY(-50%) rotate(0deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:50%;transform:translateY(-50%) rotate(45deg)}}`,\n `@keyframes hamburger-bottom-close{0%{top:50%;transform:translateY(-50%) rotate(45deg)}50%{top:50%;transform:translateY(-50%) rotate(0deg)}100%{top:75%;transform:translateY(-50%) rotate(0deg)}}`,\n `@keyframes hamburger-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes hamburger-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes kebab-top-open{0%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes kebab-top-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:25%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-bottom-open{0%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes kebab-bottom-close{0%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{top:50%;width:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{top:75%;width:var(--dot-width);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes kebab-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes kebab-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes meatballs-left-open{0%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes meatballs-left-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-right-open{0%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes meatballs-right-close{0%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(-45deg)}50%{left:50%;height:100%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;height:var(--dot-height);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes meatballs-middle-hide{0%{opacity:1}50%{opacity:1}50.01%{opacity:0}100%{opacity:0}}`,\n `@keyframes meatballs-middle-show{0%{opacity:0}49.99%{opacity:0}50%{opacity:1}100%{opacity:1}}`,\n `@keyframes grid-tl-open{0%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}}`,\n `@keyframes grid-tl-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(-45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:25%;top:25%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n `@keyframes grid-tr-hide{0%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-tr-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}100%{left:75%;top:25%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-hide{0%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}33%{left:50%;top:50%;opacity:1;transform:translate(-50%,-50%)}33.01%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}100%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-bl-show{0%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}66.99%{left:50%;top:50%;opacity:0;transform:translate(-50%,-50%)}67%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}100%{left:25%;top:75%;opacity:1;transform:translate(-50%,-50%)}}`,\n `@keyframes grid-br-open{0%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}33%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}100%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}}`,\n `@keyframes grid-br-close{0%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(45deg)}33%{left:50%;top:50%;width:100%;height:12.5%;transform:translate(-50%,-50%) rotate(0deg)}66%{left:50%;top:50%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}100%{left:75%;top:75%;width:var(--square-size);height:var(--square-size);transform:translate(-50%,-50%) rotate(0deg)}}`,\n ];\n}\n\n/**\n * Generate CSS transitions for mobile menu open/close\n */\nexport function generateMobileMenuAnimations(): string[] {\n return [\n `.mobile-menu-enter{max-height:0;opacity:0}`,\n `.mobile-menu-enter-active{max-height:500px;opacity:1;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n `.mobile-menu-exit{max-height:500px;opacity:1}`,\n `.mobile-menu-exit-active{max-height:0;opacity:0;transition:max-height 300ms ease-in-out,opacity 300ms ease-in-out}`,\n ];\n}\n\n/**\n * Generate CSS transitions for desktop dropdown open/close\n */\nexport function generateDesktopDropdownAnimations(): string[] {\n return [\n `.desktop-dropdown-enter{opacity:0;transform:translateY(-8px)}`,\n `.desktop-dropdown-enter-active{opacity:1;transform:translateY(0);transition:opacity 200ms ease-out,transform 200ms ease-out}`,\n `.desktop-dropdown-exit{opacity:1;transform:translateY(0)}`,\n `.desktop-dropdown-exit-active{opacity:0;transform:translateY(-8px);transition:opacity 200ms ease-in,transform 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS transitions for same-layer dropdown open/close (grid-template-rows animation)\n */\nexport function generateSameLayerDropdownAnimations(): string[] {\n return [\n `.same-layer-dropdown-enter{grid-template-rows:0fr;opacity:0}`,\n `.same-layer-dropdown-enter-active{grid-template-rows:1fr;opacity:1;transition:grid-template-rows 250ms ease-out,opacity 200ms ease-out}`,\n `.same-layer-dropdown-exit{grid-template-rows:1fr;opacity:1}`,\n `.same-layer-dropdown-exit-active{grid-template-rows:0fr;opacity:0;transition:grid-template-rows 250ms ease-in,opacity 200ms ease-in}`,\n ];\n}\n\n/**\n * Generate CSS for custom scrollbar styling on mobile dropdowns\n */\nexport function generateScrollbarStyles(): string[] {\n return [\n `.mobile-dropdown-nav{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,0.2) transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar{width:0.5rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-track{background:transparent}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2);border-radius:0.25rem}`,\n `.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.3)}`,\n `@media(prefers-color-scheme:dark){.mobile-dropdown-nav{scrollbar-color:rgba(255,255,255,0.2) transparent}.mobile-dropdown-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.2)}.mobile-dropdown-nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,0.3)}}`,\n ];\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@otl-core/style-utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.36",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CSS rendering utilities for OTL CMS — color/border/shadow resolution, responsive CSS generation, animation keyframes",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"url": "https://github.com/otl-core/style-utils.git"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@otl-core/cms-types": "^1.1.
|
|
40
|
+
"@otl-core/cms-types": "^1.1.36",
|
|
41
41
|
"clsx": "^2.1.1",
|
|
42
42
|
"tailwind-merge": "^3.3.1"
|
|
43
43
|
},
|