Files
lucide/packages/astro/scripts/exportTemplate.mts

43 lines
1.4 KiB
TypeScript
Raw Normal View History

import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
feat(@lucide/astro): add lucide package for Astro (#2665) * feat(lucide-astro): initial commit * test: add test suite * fix module resolution issue * chore: update lock file * chore: update lock file * chore: fix precommit hook failing * sync icons generated by precommit hook * remove useless tab in template * style: add space for readability * docs: add bun installation instructions * fix `clean` script * fix testing setup * remove unnecessary `key` props in Astro icons * fix jest matchers types and undefined behavior * chore: update lock file * setup prettier for formatting Astro files * remove mistakenly added prop from the `Icon` component * docs: add documentation for new Astro package * fix incorrect types in `Icon` component * refactor: use `stroke-width` over `strokeWidth` * fix unexpected module resolution behavior * remove hack in test types * remove review marker * docs: progress on documentation of lucide-astro * chore: remove unnecessary .gitignore * docs: add sidebar entry * edit package description * fix uneven icon heights in homepage packages list * docs: add package to readme table * add workflows for lucide-astro package * docs: add package-logos * use the appropriate Astro logo in light and dark mode * Remove inadvertently added class * Update snapshots to reflect removed class `lucide-icon` * remove dependency on internal `@lucide/shared` package * fix: revert changes * revert grid-2x2-x.json * revert grid-2x2-check.json * revert picture-in-picture svg * add package in labeler workflow * add previously uncommited utils.ts file * fix dom type errors * up one major from legacy package * add package to issue and feature request templates * docs: add acknowledgement of Aviortheking as original creator of the package * format * optimization: more lightweight component footprint * refactor: simplify removal of `data-astro-source` debugging attributes * format * style: fix linting error once again 😠 * wip: rename package to `@lucide/astro` * remove acknowledgment of `lucide-astro` * fix error caused by change in build tooling * chore: upgrade dependencies * chore: rename lucide-astro folder * further renaming * use correct package name in key * more renaming * chore: update lock file * apply review suggestions (#1) set correct path for package in actions * apply suggestions from code review (#2) Co-authored-by: Eric Fennis <eric.fennis@gmail.com> * apply @dotspencer's review resolve correct link to package docs page and github source * Format files --------- Co-authored-by: realguse <realguse@icloud.com> Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-03-31 14:20:33 +00:00
export default defineExportTemplate(async ({
feat(@lucide/astro): add lucide package for Astro (#2665) * feat(lucide-astro): initial commit * test: add test suite * fix module resolution issue * chore: update lock file * chore: update lock file * chore: fix precommit hook failing * sync icons generated by precommit hook * remove useless tab in template * style: add space for readability * docs: add bun installation instructions * fix `clean` script * fix testing setup * remove unnecessary `key` props in Astro icons * fix jest matchers types and undefined behavior * chore: update lock file * setup prettier for formatting Astro files * remove mistakenly added prop from the `Icon` component * docs: add documentation for new Astro package * fix incorrect types in `Icon` component * refactor: use `stroke-width` over `strokeWidth` * fix unexpected module resolution behavior * remove hack in test types * remove review marker * docs: progress on documentation of lucide-astro * chore: remove unnecessary .gitignore * docs: add sidebar entry * edit package description * fix uneven icon heights in homepage packages list * docs: add package to readme table * add workflows for lucide-astro package * docs: add package-logos * use the appropriate Astro logo in light and dark mode * Remove inadvertently added class * Update snapshots to reflect removed class `lucide-icon` * remove dependency on internal `@lucide/shared` package * fix: revert changes * revert grid-2x2-x.json * revert grid-2x2-check.json * revert picture-in-picture svg * add package in labeler workflow * add previously uncommited utils.ts file * fix dom type errors * up one major from legacy package * add package to issue and feature request templates * docs: add acknowledgement of Aviortheking as original creator of the package * format * optimization: more lightweight component footprint * refactor: simplify removal of `data-astro-source` debugging attributes * format * style: fix linting error once again 😠 * wip: rename package to `@lucide/astro` * remove acknowledgment of `lucide-astro` * fix error caused by change in build tooling * chore: upgrade dependencies * chore: rename lucide-astro folder * further renaming * use correct package name in key * more renaming * chore: update lock file * apply review suggestions (#1) set correct path for package in actions * apply suggestions from code review (#2) Co-authored-by: Eric Fennis <eric.fennis@gmail.com> * apply @dotspencer's review resolve correct link to package docs page and github source * Format files --------- Co-authored-by: realguse <realguse@icloud.com> Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-03-31 14:20:33 +00:00
componentName,
iconName,
children,
getSvg,
deprecated,
deprecationReason,
}) => {
const svgContents = await getSvg();
const svgBase64 = base64SVG(svgContents);
// Astro doesn't need keyed children in loops
const keylessChildren = children.map((c) => {
const [element, { key, ...otherAttrs }] = c;
return [element, otherAttrs];
});
// TODO: build-icons' `pretty` is set to false as the prettier
// formatter uses babel which I'm not sure it supports typescript
return `
import createLucideIcon from '../createLucideIcon';
import type { AstroComponent } from '../types'
/**
* @component @name ${componentName}
* @description Lucide SVG icon component, renders SVG Element with children.
*
* @preview ![img](data:image/svg+xml;base64,${svgBase64}) - https://lucide.dev/icons/${iconName}
* @see https://lucide.dev/guide/packages/lucide-astro - Documentation
*
* @param {import('../types').IconProps} props - Lucide icons props and any valid SVG attribute
* @returns {any} Astro Component
* ${deprecated ? `@deprecated ${deprecationReason}` : ''}
*/
const ${componentName} = createLucideIcon('${iconName}', ${JSON.stringify(keylessChildren)}) as AstroComponent;
export default ${componentName};
`;
});