diff --git a/README.md b/README.md
index 26604ae..f84948e 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
### Skills
-A clear way to give an overview of programming languages, tools, and software that you're familiar with.
+A clear way to give an overview of programming languages, tools, software, and AI/LLM tools that you're familiar with.
#### Languages
@@ -63,6 +63,18 @@ Default | &includeNames=true
[](https://github.com/Jurredr/github-widgetbox)
```
+#### AI
+
+Default | &includeNames=true
+:-------------------------:|:-------------------------:
+[](https://github.com/Jurredr/github-widgetbox) | [](https://github.com/Jurredr/github-widgetbox)
+
+```md
+[](https://github.com/Jurredr/github-widgetbox)
+```
+
+Full list: `anthropic`, `claude`, `googlegemini`, `githubcopilot`, `perplexity`, `mistralai`, `metaai`, `huggingface`, `langchain`, `ollama`, `cursor`, `deepseek`, `replicate`.
+
### Profile
diff --git a/api/routes/skills-route.ts b/api/routes/skills-route.ts
index a307dcc..ae4ca8e 100644
--- a/api/routes/skills-route.ts
+++ b/api/routes/skills-route.ts
@@ -8,25 +8,26 @@ import { getBoolean, getTheme } from '../../src/utils'
import errorWidget from '../../src/widgets/error'
/**
* Primary skill path.
- *
+ *
* This path is for the primary skill screen. It has the following possible queries
* @param languages the list of languages to show.
* @param frameworks the list of frameworks to show.
* @param libraries the list of libraries to show.
* @param tools the list of tools to show.
* @param software the list of software to show
+ * @param ai the list of AI/LLM tools to show
* @param includeNames the option if it has to include names.
* @param theme the theme of the widget.
* @param names @deprecated the full list of all skills it needs to show. deprecated from version 1.1.0 onwards.
*/
router.get('/', function (req: Request, res: Response) {
- const { names, languages, frameworks, libraries, tools, software, includeNames, theme} = req.query
+ const { names, languages, frameworks, libraries, tools, software, ai, includeNames, theme} = req.query
// Set the header's type to svg/xml
res.setHeader('Content-Type', 'image/svg+xml')
// Check if languages argument is not present
- if (!languages && !frameworks && !libraries && !names && !tools && !software
+ if (!languages && !frameworks && !libraries && !names && !tools && !software && !ai
) {
res.send(
errorWidget('Skills', '-24%', 'Languages are undefined!', '-28%')
@@ -35,9 +36,9 @@ router.get('/', function (req: Request, res: Response) {
}
if (names) {
- res.send(skillsWidget(String(names), undefined, undefined, undefined, undefined, getBoolean(String(includeNames)), String(theme)))
+ res.send(skillsWidget(String(names), undefined, undefined, undefined, undefined, undefined, getBoolean(String(includeNames)), String(theme)))
} else {
- res.send(skillsWidget(String(languages), String(frameworks), String(libraries), String(tools), String(software), getBoolean(String(includeNames)), String(theme)))
+ res.send(skillsWidget(String(languages), String(frameworks), String(libraries), String(tools), String(software), String(ai), getBoolean(String(includeNames)), String(theme)))
}
// Grab the Skills widget
diff --git a/public/api/routes/skills-route.js b/public/api/routes/skills-route.js
index 4c1dd24..20a42e9 100644
--- a/public/api/routes/skills-route.js
+++ b/public/api/routes/skills-route.js
@@ -17,24 +17,25 @@ const error_1 = __importDefault(require("../../src/widgets/error"));
* @param libraries the list of libraries to show.
* @param tools the list of tools to show.
* @param software the list of software to show
+ * @param ai the list of AI/LLM tools to show
* @param includeNames the option if it has to include names.
* @param theme the theme of the widget.
* @param names @deprecated the full list of all skills it needs to show. deprecated from version 1.1.0 onwards.
*/
router.get('/', function (req, res) {
- const { names, languages, frameworks, libraries, tools, software, includeNames, theme } = req.query;
+ const { names, languages, frameworks, libraries, tools, software, ai, includeNames, theme } = req.query;
// Set the header's type to svg/xml
res.setHeader('Content-Type', 'image/svg+xml');
// Check if languages argument is not present
- if (!languages && !frameworks && !libraries && !names && !tools && !software) {
- res.send(error_1.default('Skills', '-24%', 'Languages are undefined!', '-28%'));
+ if (!languages && !frameworks && !libraries && !names && !tools && !software && !ai) {
+ res.send((0, error_1.default)('Skills', '-24%', 'Languages are undefined!', '-28%'));
return;
}
if (names) {
- res.send(skills_1.default(String(names), undefined, undefined, undefined, undefined, utils_1.getBoolean(String(includeNames)), String(theme)));
+ res.send((0, skills_1.default)(String(names), undefined, undefined, undefined, undefined, undefined, (0, utils_1.getBoolean)(String(includeNames)), String(theme)));
}
else {
- res.send(skills_1.default(String(languages), String(frameworks), String(libraries), String(tools), String(software), utils_1.getBoolean(String(includeNames)), String(theme)));
+ res.send((0, skills_1.default)(String(languages), String(frameworks), String(libraries), String(tools), String(software), String(ai), (0, utils_1.getBoolean)(String(includeNames)), String(theme)));
}
// Grab the Skills widget
});
diff --git a/public/api/routes/skills-route.js.map b/public/api/routes/skills-route.js.map
index 6868820..38fbe69 100644
--- a/public/api/routes/skills-route.js.map
+++ b/public/api/routes/skills-route.js.map
@@ -1 +1 @@
-{"version":3,"file":"skills-route.js","sourceRoot":"","sources":["../../../api/routes/skills-route.ts"],"names":[],"mappings":";;;;;AAEA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,sEAAmD;AACnD,2CAAsD;AACtD,oEAAiD;AACjD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAY,EAAE,GAAa;IACjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,KAAK,CAAA;IAElG,mCAAmC;IACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAE9C,6CAA6C;IAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAC1E;QACE,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,CAAC,CACpE,CAAA;QACD,OAAM;KACT;IAED,IAAI,KAAK,EAAE;QACP,GAAG,CAAC,IAAI,CAAC,gBAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrI;SAAM;QACH,GAAG,CAAC,IAAI,CAAC,gBAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrK;IAED,yBAAyB;AAC7B,CAAC,CAAC,CAAA;AAEF,kBAAe,MAAM,CAAA"}
\ No newline at end of file
+{"version":3,"file":"skills-route.js","sourceRoot":"","sources":["../../../api/routes/skills-route.ts"],"names":[],"mappings":";;;;;AAEA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,sEAAmD;AACnD,2CAAsD;AACtD,oEAAiD;AACjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAY,EAAE,GAAa;IACjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,KAAK,CAAA;IAEtG,mCAAmC;IACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAE9C,6CAA6C;IAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,EACjF;QACE,GAAG,CAAC,IAAI,CACJ,IAAA,eAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,CAAC,CACpE,CAAA;QACD,OAAM;KACT;IAED,IAAI,KAAK,EAAE;QACP,GAAG,CAAC,IAAI,CAAC,IAAA,gBAAY,EAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAA,kBAAU,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KAChJ;SAAM;QACH,GAAG,CAAC,IAAI,CAAC,IAAA,gBAAY,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAA,kBAAU,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACjL;IAED,yBAAyB;AAC7B,CAAC,CAAC,CAAA;AAEF,kBAAe,MAAM,CAAA"}
\ No newline at end of file
diff --git a/public/src/data/ai.js b/public/src/data/ai.js
new file mode 100644
index 0000000..3c772c6
--- /dev/null
+++ b/public/src/data/ai.js
@@ -0,0 +1,162 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const ai = [
+ {
+ name: ['Anthropic'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#191919',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Claude'],
+ colorFrom: '#F2D2C2',
+ colorTo: '#D97757',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Gemini', 'GoogleGemini'],
+ colorFrom: '#DBD1EC',
+ colorTo: '#8E75B2',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Copilot', 'GitHubCopilot'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Perplexity'],
+ colorFrom: '#B3E9F2',
+ colorTo: '#1FB8CD',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Mistral', 'MistralAI'],
+ colorFrom: '#FDC79E',
+ colorTo: '#FA520F',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['MetaAI'],
+ colorFrom: '#D3C4FA',
+ colorTo: '#9844FF',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['HuggingFace'],
+ colorFrom: '#FFEFB0',
+ colorTo: '#FFD21E',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['LangChain'],
+ colorFrom: '#E0F0FF',
+ colorTo: '#7FC8FF',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Ollama'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Cursor'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['DeepSeek'],
+ colorFrom: '#C4D2FF',
+ colorTo: '#5786FE',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Replicate'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+];
+exports.default = ai;
+//# sourceMappingURL=ai.js.map
\ No newline at end of file
diff --git a/public/src/data/ai.js.map b/public/src/data/ai.js.map
new file mode 100644
index 0000000..5b29a09
--- /dev/null
+++ b/public/src/data/ai.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/data/ai.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/public/src/widgets/skills.js b/public/src/widgets/skills.js
index 742d01e..019b57e 100644
--- a/public/src/widgets/skills.js
+++ b/public/src/widgets/skills.js
@@ -11,23 +11,25 @@ const frameworks_1 = __importDefault(require("../data/frameworks"));
const libraries_1 = __importDefault(require("../data/libraries"));
const tools_1 = __importDefault(require("../data/tools"));
const software_ides_1 = __importDefault(require("../data/software-ides"));
+const ai_1 = __importDefault(require("../data/ai"));
const themes_1 = __importDefault(require("../data/themes"));
/**
* Builds the skill widget page
*
* This method builds a SVG file that contains all the languages, frameworks,
- * libraries, tools and other software that can be found in the data folder and
- * are passed by the calling method.
+ * libraries, tools, software and AI/LLM tools that can be found in the data
+ * folder and are passed by the calling method.
*
* @param languagesString The string with all the languages
* @param frameworksString The string with all the frameworks
* @param librariesString The string with all the libraries
* @param toolsString The string with all the tools
* @param softwareString The string with all the software
+ * @param aiString The string with all the AI/LLM tools
* @param includeNames The boolean that determines whether or not to include names
* @returns The SVG with all the skills that were passed.
*/
-function skillsWidget(languagesString, frameworksString, librariesString, toolsString, softwareString, includeNames, themeString) {
+function skillsWidget(languagesString, frameworksString, librariesString, toolsString, softwareString, aiString, includeNames, themeString) {
const BASE_HEIGHT = 125;
const BASE_WIDTH = 812;
const FIRST_ROW = 90;
@@ -48,19 +50,23 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS
if (!softwareString) {
softwareString = 'undefined';
}
+ if (!aiString) {
+ aiString = 'undefined';
+ }
// Set the theme
- let theme = utils_1.getTheme(themes_1.default, 'default');
+ let theme = (0, utils_1.getTheme)(themes_1.default, 'default');
if (themeString) {
- theme = utils_1.getTheme(themes_1.default, themeString);
+ theme = (0, utils_1.getTheme)(themes_1.default, themeString);
}
if (!theme) {
- theme = utils_1.getTheme(themes_1.default, 'default');
+ theme = (0, utils_1.getTheme)(themes_1.default, 'default');
}
const languageList = languagesString.split(',');
const frameworkList = frameworksString.split(',');
const libraryList = librariesString.split(',');
const toolsList = toolsString.split(',');
const softwareList = softwareString.split(',');
+ const aiList = aiString.split(',');
const rowHeightLanguages = Math.round((languageList.length - 0.1) / 7) > 1 ? Math.round((languageList.length - 0.1) / 7) : 1;
const languagesTitleHeight = FIRST_ROW;
const rowHeightFrameworks = Math.round((frameworkList.length - 0.1) / 7) > 1 ? Math.round((frameworkList.length - 0.1) / 7) : 1;
@@ -83,6 +89,11 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS
+ ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD)
+ ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) * ROW)
+ (includeNames && (toolsList.length > 1 || toolsList[0] !== 'undefined') ? (rowHeightSoftware) * 25 : 0);
+ const rowHeightAI = Math.round((aiList.length - 0.1) / 7) > 1 ? Math.round((aiList.length - 0.1) / 7) : 1;
+ const aiTitleHeight = softwareTitleHeight
+ + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) * PAD)
+ + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) * ROW)
+ + (includeNames && (softwareList.length > 1 || softwareList[0] !== 'undefined') ? (rowHeightAI) * 25 : 0);
// Set the size of the main SVG container
const width = BASE_WIDTH;
const height = BASE_HEIGHT +
@@ -90,15 +101,17 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS
(frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) +
(libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) +
(toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) +
- (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0)))
+ (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) +
+ (aiList.length > 1 || aiList[0] !== 'undefined' ? rowHeightAI : 0)))
+ (PAD * (1 +
(languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) +
(frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) +
(libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) +
(toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) +
- (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0)))
+ (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) +
+ (aiList.length > 1 || aiList[0] !== 'undefined' ? 1 : 0)))
// Add space for the names if true.
- + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length + softwareList.length) - 0.1) / 7) + 1) * 25 : 0);
+ + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length + softwareList.length + aiList.length) - 0.1) / 7) + 1) * 25 : 0);
/**
* Builds the gradient boxes and sets the names.
* @param listToBuild The list of items to build the boxes with
@@ -110,7 +123,7 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS
for (let i = 0; i < listToBuild.length; i++) {
// Check the data and add the first result that isn't defined.
// It checks the languages first, then the frameworks, and then the libraries.
- let foundData = utils_1.findData(languages_1.default, listToBuild[i]) || utils_1.findData(frameworks_1.default, listToBuild[i]) || utils_1.findData(libraries_1.default, listToBuild[i]) || utils_1.findData(tools_1.default, listToBuild[i]) || utils_1.findData(software_ides_1.default, listToBuild[i]);
+ let foundData = (0, utils_1.findData)(languages_1.default, listToBuild[i]) || (0, utils_1.findData)(frameworks_1.default, listToBuild[i]) || (0, utils_1.findData)(libraries_1.default, listToBuild[i]) || (0, utils_1.findData)(tools_1.default, listToBuild[i]) || (0, utils_1.findData)(software_ides_1.default, listToBuild[i]) || (0, utils_1.findData)(ai_1.default, listToBuild[i]);
if (foundData === undefined) {
foundData = {
name: [''],
@@ -125,7 +138,7 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS
const row = Math.floor(i / 7);
const transX = 102 * (i - row * 7);
const transY = ROW * row + (includeNames && row > 0 ? 25 * row : 0);
- boxes += gradient_box_1.default(
+ boxes += (0, gradient_box_1.default)(
// Combine the index and the type number.
(i * Math.pow(10, Math.floor(Math.log10(type)) + 1) + type), foundData.colorFrom, foundData.colorTo, transX, transY);
boxes +=
@@ -149,7 +162,7 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS
return `
`;
}
diff --git a/public/src/widgets/skills.js.map b/public/src/widgets/skills.js.map
index d9ad547..0ca4a31 100644
--- a/public/src/widgets/skills.js.map
+++ b/public/src/widgets/skills.js.map
@@ -1 +1 @@
-{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/widgets/skills.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/widgets/skills.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/data/ai.ts b/src/data/ai.ts
new file mode 100644
index 0000000..12aeea1
--- /dev/null
+++ b/src/data/ai.ts
@@ -0,0 +1,162 @@
+import { IconData } from '../interfaces/IconData'
+
+const ai: IconData[] = [
+ {
+ name: ['Anthropic'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#191919',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Claude'],
+ colorFrom: '#F2D2C2',
+ colorTo: '#D97757',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Gemini', 'GoogleGemini'],
+ colorFrom: '#DBD1EC',
+ colorTo: '#8E75B2',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Copilot', 'GitHubCopilot'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Perplexity'],
+ colorFrom: '#B3E9F2',
+ colorTo: '#1FB8CD',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Mistral', 'MistralAI'],
+ colorFrom: '#FDC79E',
+ colorTo: '#FA520F',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['MetaAI'],
+ colorFrom: '#D3C4FA',
+ colorTo: '#9844FF',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['HuggingFace'],
+ colorFrom: '#FFEFB0',
+ colorTo: '#FFD21E',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['LangChain'],
+ colorFrom: '#E0F0FF',
+ colorTo: '#7FC8FF',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Ollama'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Cursor'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['DeepSeek'],
+ colorFrom: '#C4D2FF',
+ colorTo: '#5786FE',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+ {
+ name: ['Replicate'],
+ colorFrom: '#B3B3B3',
+ colorTo: '#000000',
+ icon: `
+ `,
+ width: 36,
+ height: 36,
+ xOffset: 0,
+ },
+]
+
+export default ai
diff --git a/src/widgets/skills.ts b/src/widgets/skills.ts
index 2f34cf6..00846f6 100644
--- a/src/widgets/skills.ts
+++ b/src/widgets/skills.ts
@@ -6,20 +6,22 @@ import frameworks from '../data/frameworks'
import libraries from '../data/libraries'
import tools from '../data/tools'
import softwareIDEs from '../data/software-ides'
+import ai from '../data/ai'
import { Theme } from "../interfaces/Theme";
import themes from '../data/themes'
/**
* Builds the skill widget page
- *
+ *
* This method builds a SVG file that contains all the languages, frameworks,
- * libraries, tools and other software that can be found in the data folder and
- * are passed by the calling method.
- *
+ * libraries, tools, software and AI/LLM tools that can be found in the data
+ * folder and are passed by the calling method.
+ *
* @param languagesString The string with all the languages
* @param frameworksString The string with all the frameworks
* @param librariesString The string with all the libraries
* @param toolsString The string with all the tools
* @param softwareString The string with all the software
+ * @param aiString The string with all the AI/LLM tools
* @param includeNames The boolean that determines whether or not to include names
* @returns The SVG with all the skills that were passed.
*/
@@ -29,6 +31,7 @@ export default function skillsWidget(
librariesString?: string,
toolsString?: string,
softwareString?: string,
+ aiString?: string,
includeNames?: boolean,
themeString?: string
@@ -55,6 +58,9 @@ export default function skillsWidget(
if (!softwareString) {
softwareString = 'undefined'
}
+ if (!aiString) {
+ aiString = 'undefined'
+ }
// Set the theme
let theme : Theme = getTheme(themes, 'default')
@@ -70,6 +76,7 @@ export default function skillsWidget(
const libraryList: string[] = librariesString.split(',')
const toolsList: string[] = toolsString.split(',')
const softwareList: string[] = softwareString.split(',')
+ const aiList: string[] = aiString.split(',')
const rowHeightLanguages = Math.round((languageList.length - 0.1) / 7) > 1 ? Math.round((languageList.length - 0.1) / 7) : 1
const languagesTitleHeight = FIRST_ROW
@@ -94,30 +101,38 @@ export default function skillsWidget(
const rowHeightSoftware = Math.round((softwareList.length - 0.1) / 7) > 1 ? Math.round((softwareList.length - 0.1) / 7) : 1
const softwareTitleHeight = toolsTitleHeight
- + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD)
+ + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD)
+ ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) * ROW)
+ (includeNames && (toolsList.length > 1 || toolsList[0] !== 'undefined') ? (rowHeightSoftware) * 25 : 0)
+ const rowHeightAI = Math.round((aiList.length - 0.1) / 7) > 1 ? Math.round((aiList.length - 0.1) / 7) : 1
+ const aiTitleHeight = softwareTitleHeight
+ + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) * PAD)
+ + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) * ROW)
+ + (includeNames && (softwareList.length > 1 || softwareList[0] !== 'undefined') ? (rowHeightAI) * 25 : 0)
+
// Set the size of the main SVG container
const width = BASE_WIDTH
const height =
BASE_HEIGHT +
(ROW * (
- (languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) +
- (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) +
+ (languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) +
+ (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) +
(libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) +
(toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) +
- (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0)
+ (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) +
+ (aiList.length > 1 || aiList[0] !== 'undefined' ? rowHeightAI : 0)
))
+ (PAD * ( 1 +
- (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) +
- (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) +
+ (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) +
+ (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) +
(libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) +
(toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) +
- (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0)
+ (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) +
+ (aiList.length > 1 || aiList[0] !== 'undefined' ? 1 : 0)
))
// Add space for the names if true.
- + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length+ softwareList.length) - 0.1) / 7) + 1) * 25 : 0)
+ + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length+ softwareList.length + aiList.length) - 0.1) / 7) + 1) * 25 : 0)
/**
* Builds the gradient boxes and sets the names.
@@ -130,7 +145,7 @@ export default function skillsWidget(
for (let i = 0; i < listToBuild.length; i++) {
// Check the data and add the first result that isn't defined.
// It checks the languages first, then the frameworks, and then the libraries.
- let foundData = findData(languageData, listToBuild[i]) || findData(frameworks, listToBuild[i]) || findData(libraries, listToBuild[i]) || findData(tools, listToBuild[i]) || findData(softwareIDEs, listToBuild[i])
+ let foundData = findData(languageData, listToBuild[i]) || findData(frameworks, listToBuild[i]) || findData(libraries, listToBuild[i]) || findData(tools, listToBuild[i]) || findData(softwareIDEs, listToBuild[i]) || findData(ai, listToBuild[i])
if (foundData === undefined) {
foundData = {
name: [''],
@@ -205,6 +220,9 @@ export default function skillsWidget(
Software
+
+ AI
+
${getBoxes(languageList, 1)}
@@ -221,7 +239,10 @@ export default function skillsWidget(
${getBoxes(softwareList, 5)}
-
+
+ ${getBoxes(aiList, 6)}
+
+
`
}