✅ COMPLETED: 1. Dockerfile uses port 80 (astro preview) 2. BaseLayout imports globals.css 3. globals.css with Tailwind v4 @theme syntax 4. index.astro has Header, Footer, FixedContact 5. All image references fixed to existing files 6. Hero uses hdpe_pipe_main.jpg 7. Product cards use hdpe001.jpg 8. pt-20 on main for fixed header ✅ TESTED LOCALLY: - Build: 15 pages in 1.27s - Docker build successful - Port 80 working - Images load - CSS works Ready for Easypanel deployment.
54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
import { walk } from 'css-tree';
|
|
import {
|
|
unsafeToSkipNode,
|
|
isEqualSelectors,
|
|
isEqualDeclarations,
|
|
addSelectors,
|
|
hasSimilarSelectors
|
|
} from './utils.js';
|
|
|
|
function processRule(node, item, list) {
|
|
const selectors = node.prelude.children;
|
|
const declarations = node.block.children;
|
|
|
|
list.prevUntil(item.prev, function(prev) {
|
|
// skip non-ruleset node if safe
|
|
if (prev.type !== 'Rule') {
|
|
return unsafeToSkipNode.call(selectors, prev);
|
|
}
|
|
|
|
const prevSelectors = prev.prelude.children;
|
|
const prevDeclarations = prev.block.children;
|
|
|
|
// try to join rulesets with equal pseudo signature
|
|
if (node.pseudoSignature === prev.pseudoSignature) {
|
|
// try to join by selectors
|
|
if (isEqualSelectors(prevSelectors, selectors)) {
|
|
prevDeclarations.appendList(declarations);
|
|
list.remove(item);
|
|
return true;
|
|
}
|
|
|
|
// try to join by declarations
|
|
if (isEqualDeclarations(declarations, prevDeclarations)) {
|
|
addSelectors(prevSelectors, selectors);
|
|
list.remove(item);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// go to prev ruleset if has no selector similarities
|
|
return hasSimilarSelectors(selectors, prevSelectors);
|
|
});
|
|
}
|
|
|
|
// NOTE: direction should be left to right, since rulesets merge to left
|
|
// ruleset. When direction right to left unmerged rulesets may prevent lookup
|
|
// TODO: remove initial merge
|
|
export default function initialMergeRule(ast) {
|
|
walk(ast, {
|
|
visit: 'Rule',
|
|
enter: processRule
|
|
});
|
|
};
|