mirror of
https://github.com/lucide-icons/lucide.git
synced 2025-12-21 15:49:24 +01:00
* add new docs
* Add styling
* Move files
* Add active selection
* improve grid overview
* improve grid
* Add icon detail page
* Minor changes
* Fix icon preview
* optimize home card
* Add code examples
* Add gitignore
* correct temp directory
* Add first cusotmizer
* Add customizer
* fix images paths
* Add reset function
* Adjust category rendering
* Add packages section
* Some fixes
* Fix vercel build icon
* Small code adjustment
* move file
* Try this
* Add code groups with syntax highlighting
* Add search icon
* Cleanup
* update lockfile
* turnoff 404
* remove docs/iconMetaData.ts
* fix build
* Fix build 2
* cleanup
* Add icon customizer
* Fix build
* Add steps
* Add Button menu
* A lot off fixes!
* cleanup
* Fix build
* Css fixes
* Override menu icon
* try this to improve preformance
* minor improvements
* add comment
* add readme
* Add title
* minor fixes
* Fixes sliders + removes random backticks from index
* Added package list base, still WIP
* Added Guide+Source buttons to package list items
* Responsive support for XS screens
* Map categories count
* Adjust tooltip hover position
* Add see in action icon
* Add download options
* Aligns category list items to baseline and decreases category count weight
* Fixes event target error for categorylistitems
* Added icon release metadata builder
* Adds version badges to hero + icon detail overlay
* Added contributors.
Added Copy Angular.
Added release info to icon page.
* Centres contributor tooltip
* Fixed stroke step + added reset button
* Extracted reset button as a separate component for reusability
* Makes HomeIconCustomizerIcons less dense
* Fixes Button menu
* adjust versions and contributors styling on detail page
* Fix build?
* Fix build 2?
* Fix build 3
* Fix build 4
* Fix build 5?
* Add latest gh-icon changes
* Add comment
* Try fetch tags to retrieve release data
* try fetch all tags
* Add related icons
* Add stikcy search bar
* Add no results components
* Try to fix animation
* Try optimizing for categories
* Hide buggy animated icon
* minor fixes
* Add footer
* Add contributute link in footer
* Add copy name
* Add 100% preview icons
* remove site directory
* clean up
* Add redirects
* Fix build?
* fix redirect?
* minor improvements
* Fix icons preview on mobile
* Small preformance improvement
* Dark mode fixes for package icons
* Sort related icons by similarity + somewhat better name similarity matching
* Replace icon design guide images with uniform SVGs
* update lockfile
* Adds git clone to manually fetch the main repository for creating release metadata
* Remove initial v0.0.0 from release metadata
* Add extra CTA to no results behaviour
* Remove tags, as they are too overused
* Revert "Remove tags, as they are too overused"
This reverts commit 909b7563c0.
* Checkout icons from main
* Add absoluteStrokeWidth switch
* Add absolute strokewidth to home customizer
* Add absolute strokewidth to copy code button
* remove unused import
* compare build time
* improve build speed
* Try new release meta data script
* add fetch tags
* try with branch and remote
* try with url
* try without ssh
* Fix fetch tags in build file
* Cleanup
* Fix fallback
* improve release data
* delete relatedIcons.json, because it should be gitignored
* Add icon details
* Fix import
* minor fixes
* Try running script parallel
* Revert icon details
* include aliases in release meta data
* Final fixes
* Final fixes 2
* minor code adjustment
* Fix build
* test
* Revert concurrent build flow
* switch back to concurrent build strategy
* revert icon changes
* update package.json
* update package.json
* dedube packages
---------
Co-authored-by: Karsa <karsa@karsa.org>
79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
import fs from 'fs';
|
|
import path from 'path';
|
|
import { readSvgDirectory } from './helpers.mjs';
|
|
|
|
const currentDir = process.cwd();
|
|
const ICONS_DIR = path.resolve(currentDir, '../icons');
|
|
const svgFiles = readSvgDirectory(ICONS_DIR, '.json');
|
|
|
|
const location = path.resolve(currentDir, '.vitepress/data', 'relatedIcons.json');
|
|
|
|
if (fs.existsSync(location)) {
|
|
fs.unlinkSync(location);
|
|
}
|
|
|
|
const nameWeight = 5;
|
|
const tagWeight = 4;
|
|
const categoryWeight = 3;
|
|
|
|
const arrayMatches = (a, b) => {
|
|
// let matches = 0;
|
|
// for (let i = 0; i < a.length; ++i) {
|
|
// if (b.indexOf(a[i]) != -1) {
|
|
// matches++;
|
|
// }
|
|
// }
|
|
// return matches;
|
|
return a.filter(item => b.includes(item)).length;
|
|
}
|
|
|
|
const nameParts = (icon) => [icon.name, ...icon.aliases ?? []]
|
|
.join('-')
|
|
.split('-')
|
|
.filter(word => word.length > 2)
|
|
|
|
const getRelatedIcons = (currentIcon, icons) => {
|
|
const iconSimilarity = (item) =>
|
|
nameWeight * arrayMatches(nameParts(item), nameParts(currentIcon))
|
|
+ categoryWeight * arrayMatches(item.categories, currentIcon.categories)
|
|
+ tagWeight * arrayMatches(item.tags, currentIcon.tags)
|
|
;
|
|
return icons
|
|
.filter(i => i.name !== currentIcon.name)
|
|
.map(icon => ({icon, similarity: iconSimilarity(icon)}))
|
|
.filter(a => a.similarity > 0) // @todo: maybe require a minimal non-zero similarity
|
|
.sort((a, b) => b.similarity - a.similarity)
|
|
.map(i => i.icon)
|
|
;
|
|
}
|
|
|
|
const iconsMetaDataPromises = svgFiles.map(async (iconName) => {
|
|
// eslint-disable-next-line import/no-dynamic-require, global-require
|
|
const metaData = await import(`../icons/${iconName}`, {
|
|
assert: { type: 'json' }
|
|
});
|
|
|
|
const name = iconName.replace('.json', '');
|
|
|
|
return {
|
|
name,
|
|
...metaData.default
|
|
};
|
|
});
|
|
|
|
const iconsMetaData = await Promise.all(iconsMetaDataPromises);
|
|
|
|
const relatedIcons = iconsMetaData.map(icon => {
|
|
const iconRelatedIcons = getRelatedIcons(icon, iconsMetaData);
|
|
return [icon.name, iconRelatedIcons.map(i => i.name)];
|
|
});
|
|
|
|
fs.promises
|
|
.writeFile(location, JSON.stringify(Object.fromEntries(relatedIcons), null, 2), 'utf-8')
|
|
.then(() => {
|
|
console.log('Successfully written relatedIcons.json file');
|
|
})
|
|
.catch((error) => {
|
|
throw new Error(`Something went wrong generating iconNode files,\n ${error}`);
|
|
});
|