diff --git a/packages/website/build-scripts/icons-generation/index.mjs b/packages/website/build-scripts/icons-generation/index.mjs
index ca4404488d61..efcbe2395d5d 100644
--- a/packages/website/build-scripts/icons-generation/index.mjs
+++ b/packages/website/build-scripts/icons-generation/index.mjs
@@ -1,7 +1,35 @@
import fs from "fs";
import path from "path";
+
let counter = 0;
+const SAPIconsConfig = {
+ title: "SAP Icons",
+ npmLink: "https://www.npmjs.com/package/@ui5/webcomponents-icons",
+ npmPackage: "@ui5/webcomponents-icons",
+ version: "v5",
+ dir: "icons",
+ componentName: "SAPIcons",
+};
+
+const SAPTNTIconsConfig = {
+ title: "SAP TNT Icons",
+ npmLink: "https://www.npmjs.com/package/@ui5/webcomponents-icons-tnt",
+ npmPackage: "@ui5/webcomponents-icons-tnt",
+ version: "v3",
+ dir: "icons-tnt",
+ componentName: "SAPTNTIcons",
+};
+
+const SAPBSIconsConfig = {
+ title: "SAP Business Suite Icons",
+ npmLink: "https://www.npmjs.com/package/@ui5/webcomponents-icons-business-suite",
+ npmPackage: "@ui5/webcomponents-icons-business-suite",
+ version: "v2",
+ dir: "icons-business-suite",
+ componentName: "SAPBSIcons"
+};
+
const replaceFirstNumber = (str) => {
const firstLetter = str.charAt(0);
if (!isNaN(firstLetter)) {
@@ -16,7 +44,17 @@ const capitalize = (str) => {
const remainingLetters = str.slice(1);
const capitalizedWord = firstLetterCap + remainingLetters;
return capitalizedWord;
-}
+};
+
+const writeFile = (targetDir, content) => {
+ const targetPath = path.resolve(`./${targetDir}`);
+ const targetFile = path.resolve(`${targetPath}/index.js`);
+
+ if (!fs.existsSync(targetPath)) {
+ fs.mkdirSync(targetPath, { recursive: true });
+ }
+ fs.writeFileSync(targetFile, content,{ encoding:'utf8', flag:'w' });
+};
const commonImports = `
import React from 'react';
@@ -25,7 +63,14 @@ import Heading from '@theme/Heading';
import Link from '@docusaurus/Link';
`
-const _generateIconsPage = (sourceDir, collection, version) => {
+const additionalImports = `
+import CopySvg from "../local-cdn/local-cdn/icons/dist/v5/copy.svg";
+import AcceptSvg from "../local-cdn/local-cdn/icons/dist/v5/accept.svg";
+import PictureSvg from "../local-cdn/local-cdn/icons/dist/v5/picture.svg";
+`;
+
+
+const _generateIconsPage = (sourceDir, config) => {
let imports = ``;
let icons = ``;
@@ -36,139 +81,93 @@ const _generateIconsPage = (sourceDir, collection, version) => {
const iconNameImport = `${fileNameImportName}SvgName`;
const svgImport = `${capitalize(fileNameImportName)}Svg`;
-
- imports += `
-import ${iconNameImport} from "../local-cdn/local-cdn/${collection}/dist/${fileName}.js";
-import ${svgImport} from "../local-cdn/local-cdn/${collection}/dist/${version}/${fileName}.svg";
-`;
+
+ imports += `
+ import ${iconNameImport} from "../local-cdn/local-cdn/${config.dir}/dist/${fileName}.js";
+ import ${svgImport} from "../local-cdn/local-cdn/${config.dir}/dist/${config.version}/${fileName}.svg";
+ `;
icons += `
-
{
- target.classList.remove("icon__wrapper--copied");
- }, 600)
- }}>
-
-
-
<${svgImport} fill="var(--ifm-font-color-base)"/>
-
{${iconNameImport}}
-
`;
+ {
+ acceptSVG.classList.remove("icon__svg--accept--visible");
+ }, 600);
+ }
+ }}>
+
+
+
<${svgImport} fill="var(--ifm-font-color-base)"/>
+
{${iconNameImport}.replace("tnt/", "").replace("business-suite/", "")}
+
+
+
`;
}
});
- return { imports, icons};
-};
-
-const generateIconsPage = (sourceDir, collection, version) => {
- const { imports, icons} = _generateIconsPage(sourceDir, collection, version);
-
- const content =`
-${commonImports}
-
-${imports}
-
-export default function SAPIcons() {
- return (
-
-
-
SAP Icons
-
@ui5/webcomponents-icons
-
-
- ${icons}
+ const classDef = `export default function ${config.componentName}() {
+ return (
+
+
+
${config.title}
+
${config.npmPackage}
+
+
+ ${icons}
+
-
- );
-}`;
-
- const targetPath = path.resolve(`./${collection}`);
- const targetFile = path.resolve(`${targetPath}/index.js`);
+ );
+ }`
- if (!fs.existsSync(targetPath)) {
- fs.mkdirSync(targetPath, { recursive: true });
- }
- fs.writeFileSync(targetFile,content,{ encoding:'utf8', flag:'w' });
+ return { imports, classDef};
};
-const generateTNTIconsPage = (sourceDir, collection, version) => {
- const { imports, icons} = _generateIconsPage(sourceDir, collection, version);
-
- const content =`
-${commonImports}
-import CopySvg from "../local-cdn/local-cdn/icons/dist/v5/copy.svg";
-import AcceptSvg from "../local-cdn/local-cdn/icons/dist/v5/accept.svg";
+const generateIconsPage = (sourceDir, config) => {
+ const { imports, classDef} = _generateIconsPage(sourceDir, config);
+ let content
+ if (config.componentName === "SAPIcons" ) {
+ content =`
+${commonImports}
${imports}
-
- export default function SAPTNTIcons() {
- return (
-
-
-
SAP TNT Icons
-
@ui5/webcomponents-icons-tnt
-
-
- ${icons}
-
-
- );
- }`;
-
- const targetPath = path.resolve(`./${collection}`);
- const targetFile = path.resolve(`${targetPath}/index.js`);
-
- if (!fs.existsSync(targetPath)) {
- fs.mkdirSync(targetPath, { recursive: true });
- }
- fs.writeFileSync(targetFile, content,{ encoding:'utf8', flag:'w' });
-};
-
-const generateBSIconsPage = (sourceDir, collection, version) => {
- const { imports, icons} = _generateIconsPage(sourceDir, collection, version);
-
- const content =`
+${classDef}`;
+ } else {
+ content =`
${commonImports}
-
-import CopySvg from "../local-cdn/local-cdn/icons/dist/v5/copy.svg";
-import AcceptSvg from "../local-cdn/local-cdn/icons/dist/v5/accept.svg";
-
+${additionalImports}
${imports}
-
- export default function SAPBSIcons() {
- return (
-
-
-
SAP Business Suite Icons
-
@ui5/webcomponents-icons-business-suite
-
-
- ${icons}
-
-
- );
- }`;
-
- const targetPath = path.resolve(`./${collection}`);
- const targetFile = path.resolve(`${targetPath}/index.js`);
-
- if (!fs.existsSync(targetPath)) {
- fs.mkdirSync(targetPath, { recursive: true });
- }
- fs.writeFileSync(targetFile, content,{ encoding:'utf8', flag:'w' });
+${classDef}`;
+ }
+
+ writeFile(config.dir, content);
};
-generateIconsPage(path.join(path.resolve(), "./local-cdn/local-cdn/icons/dist/v5"), "icons", "v5");
-generateTNTIconsPage(path.join(path.resolve(), "./local-cdn/local-cdn/icons-tnt/dist/v3"), "icons-tnt", "v3");
-generateBSIconsPage(path.join(path.resolve(), "./local-cdn/local-cdn/icons-business-suite/dist/v2"), "icons-business-suite", "v2");
+
+generateIconsPage(path.join(path.resolve(), "./local-cdn/local-cdn/icons/dist/v5"), SAPIconsConfig);
+generateIconsPage(path.join(path.resolve(), "./local-cdn/local-cdn/icons-tnt/dist/v3"), SAPTNTIconsConfig);
+generateIconsPage(path.join(path.resolve(), "./local-cdn/local-cdn/icons-business-suite/dist/v2"), SAPBSIconsConfig);
diff --git a/packages/website/src/pages/icons.css b/packages/website/src/pages/icons.css
index f72f282f727a..89ecb6159cf9 100644
--- a/packages/website/src/pages/icons.css
+++ b/packages/website/src/pages/icons.css
@@ -32,29 +32,30 @@
background-color: var(--ifm-menu-color-background-active);
}
-.icon__wrapper.icon__wrapper--copied .icon__wrapper__copy {
- display: none;
-}
-
-.icon__wrapper.icon__wrapper--copied .icon__wrapper__accept {
+.icon__svg--accept.icon__svg--accept--visible {
fill: var(--ifm-color-primary);
- display: inline-block;
+ visibility: visible;
}
-.icon__wrapper__copy,
-.icon__wrapper__accept {
+.icon__svg--copy,
+.icon__svg--accept,
+.icon__svg--picture {
width: 1rem;
height: 1rem;
align-self: end;
- fill: var(--ifm-font-color-base);
pointer-events: none;
}
-.icon__wrapper__accept {
- display: none;
+.icon__svg--accept {
+ visibility: hidden;
}
-
+[data-theme='dark'] .icon__svg--copy,
+[data-theme='dark'] .icon__svg--accept,
+[data-theme='dark'] .icon__svg--picture {
+ fill: var(--ifm-color-primary);
+}
+
.icon__wrapper__title {
color: var(--ifm-font-color-base);
@@ -63,8 +64,37 @@
word-break: break-all;
font-size: 0.813rem;
pointer-events: none;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-wrap: nowrap;
+ width: 100%;
}
+.icon__button--copy,
+.icon__button--picture {
+ width: 1.5rem;
+ height: 1.5rem;
+ display: inline-flex;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+ padding: 0.25rem;
+ margin: 0.25rem;
+}
+
+[data-theme='dark'] .icon__button--copy,
+[data-theme='dark'] .icon__button--picture {
+ background-color: transparent;
+ border-color: transparent;
+}
+
+[data-theme='dark'] .icon__button--copy:hover,
+[data-theme='dark'] .icon__button--picture:hover {
+ background-color: var(--ifm-background-surface-color);
+}
+
+
+
.segmented__button {
display: inline-flex;
align-items: center;