@grove-dev/astro 0.6.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -33
- package/dist/index.js.map +1 -1
- package/dist/lib/display.d.ts +1 -1
- package/dist/lib/display.js +1 -1
- package/dist/lib/format.d.ts +1 -1
- package/dist/lib/format.js +1 -1
- package/dist/lib/icon-kinds.d.ts +1 -1
- package/dist/lib/icon-kinds.js +43 -43
- package/dist/lib/icon-registry.d.ts +2 -2
- package/dist/lib/icon-registry.js +23 -23
- package/dist/lib/index.d.ts +9 -9
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +9 -9
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/lenses.d.ts +1 -1
- package/dist/lib/lenses.js +1 -1
- package/dist/lib/packaged-icons.d.ts +1 -1
- package/dist/lib/packaged-icons.js +4 -4
- package/dist/lib/repo.d.ts +1 -1
- package/dist/lib/repo.js +1 -1
- package/dist/lib/search.d.ts +1 -1
- package/dist/lib/search.js +1 -1
- package/dist/lib/taxonomy-counts.d.ts +1 -1
- package/dist/lib/taxonomy-counts.js +1 -1
- package/package.json +7 -17
- package/src/index.ts +23 -38
- package/src/lib/display.ts +1 -1
- package/src/lib/format.ts +1 -1
- package/src/lib/icon-kinds.ts +44 -44
- package/src/lib/icon-registry.ts +25 -25
- package/src/lib/index.ts +9 -9
- package/src/lib/lenses.ts +1 -1
- package/src/lib/packaged-icons.ts +8 -8
- package/src/lib/repo.ts +1 -1
- package/src/lib/search.ts +1 -1
- package/src/lib/taxonomy-counts.ts +1 -1
- package/src/server/collections.ts +53 -42
- package/src/server/contrast.ts +14 -9
- package/src/server/directory.ts +22 -17
- package/src/server/index.ts +3 -2
- package/src/server/models.ts +404 -213
- package/src/server/seo.ts +34 -31
- package/src/styles.css +235 -91
- package/dist/layouts/index.d.ts +0 -25
- package/dist/layouts/index.d.ts.map +0 -1
- package/dist/layouts/index.js +0 -25
- package/dist/layouts/index.js.map +0 -1
- package/dist/ui/button.d.ts +0 -53
- package/dist/ui/button.d.ts.map +0 -1
- package/dist/ui/button.js +0 -90
- package/dist/ui/button.js.map +0 -1
- package/src/components/CardGrid.astro +0 -41
- package/src/components/CardIcon.astro +0 -67
- package/src/components/CategoryGrid.astro +0 -114
- package/src/components/CollectionCard.astro +0 -56
- package/src/components/CollectionIndex.astro +0 -102
- package/src/components/CollectionPage.astro +0 -128
- package/src/components/CollectionRow.astro +0 -81
- package/src/components/CollectionTeaser.astro +0 -47
- package/src/components/ContributorsGrid.astro +0 -143
- package/src/components/DirectoryIndexClient.astro +0 -510
- package/src/components/EditorialSummary.astro +0 -58
- package/src/components/FilterGroupMenu.astro +0 -69
- package/src/components/FilterOptions.astro +0 -49
- package/src/components/FinalCta.astro +0 -43
- package/src/components/Hero.astro +0 -243
- package/src/components/Icon.astro +0 -191
- package/src/components/IndexRow.astro +0 -37
- package/src/components/LanguageBreakdown.astro +0 -67
- package/src/components/MarkdownBody.astro +0 -37
- package/src/components/OriginalCollection.astro +0 -117
- package/src/components/Pagination.astro +0 -50
- package/src/components/PoweredBy.astro +0 -60
- package/src/components/ProjectCard.astro +0 -321
- package/src/components/RecordHeader.astro +0 -221
- package/src/components/RecordSection.astro +0 -128
- package/src/components/RecordSidebar.astro +0 -387
- package/src/components/RefinePanel.astro +0 -168
- package/src/components/SmartLensTabs.astro +0 -81
- package/src/components/StackGrid.astro +0 -151
- package/src/components/StackPlatformChips.astro +0 -73
- package/src/components/SubmissionClient.astro +0 -254
- package/src/components/TableOfContents.astro +0 -140
- package/src/components/WhyThisExists.astro +0 -116
- package/src/layouts/BaseLayout.astro +0 -415
- package/src/layouts/Container.astro +0 -18
- package/src/layouts/Footer.astro +0 -231
- package/src/layouts/Header.astro +0 -214
- package/src/layouts/SectionHeader.astro +0 -43
- package/src/layouts/Seo.astro +0 -171
- package/src/layouts/ThemeToggle.astro +0 -118
- package/src/layouts/astro-shim.d.ts +0 -29
- package/src/layouts/index.ts +0 -24
- package/src/server/collections.test.ts +0 -212
- package/src/server/contrast.test.ts +0 -82
- package/src/server/directory.test.ts +0 -177
- package/src/server/github-repo.test.ts +0 -88
- package/src/server/models-home.test.ts +0 -101
- package/src/server/models.test.ts +0 -135
- package/src/server/seo.test.ts +0 -123
- package/src/ui/Badge.astro +0 -38
- package/src/ui/Button.astro +0 -42
- package/src/ui/EmptyState.astro +0 -38
- package/src/ui/FilterDrawer.astro +0 -124
- package/src/ui/PageHeader.astro +0 -39
- package/src/ui/SearchField.astro +0 -106
- package/src/ui/button.test.ts +0 -54
- package/src/ui/button.ts +0 -107
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grove-dev/astro",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Astro integration + server view-models for Grove directories. UI ships from @grove-dev/registry, not from this package.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=22.12.0"
|
|
@@ -10,9 +10,7 @@
|
|
|
10
10
|
"keywords": [
|
|
11
11
|
"grove",
|
|
12
12
|
"astro",
|
|
13
|
-
"ui",
|
|
14
13
|
"directory",
|
|
15
|
-
"components",
|
|
16
14
|
"static-site"
|
|
17
15
|
],
|
|
18
16
|
"homepage": "https://github.com/tortuvshin/grove#readme",
|
|
@@ -31,14 +29,12 @@
|
|
|
31
29
|
"files": [
|
|
32
30
|
"assets",
|
|
33
31
|
"dist",
|
|
34
|
-
"src/components",
|
|
35
|
-
"src/layouts",
|
|
36
32
|
"src/lib",
|
|
37
|
-
"src/server",
|
|
38
|
-
"src/ui",
|
|
39
33
|
"src/index.ts",
|
|
40
34
|
"src/styles.css",
|
|
41
|
-
"README.md"
|
|
35
|
+
"README.md",
|
|
36
|
+
"src/server/**/*.ts",
|
|
37
|
+
"!src/server/**/*.test.ts"
|
|
42
38
|
],
|
|
43
39
|
"exports": {
|
|
44
40
|
".": {
|
|
@@ -46,14 +42,8 @@
|
|
|
46
42
|
"import": "./dist/index.js"
|
|
47
43
|
},
|
|
48
44
|
"./styles.css": "./src/styles.css",
|
|
49
|
-
"./components/*.astro": "./src/components/*.astro",
|
|
50
|
-
"./components/*": "./src/components/*.astro",
|
|
51
45
|
"./server": "./src/server/index.ts",
|
|
52
|
-
"./
|
|
53
|
-
"./ui/*.astro": "./src/ui/*.astro",
|
|
54
|
-
"./ui/*": "./src/ui/*.ts",
|
|
55
|
-
"./layouts/*.astro": "./src/layouts/*.astro",
|
|
56
|
-
"./layouts/*": "./src/layouts/*.astro"
|
|
46
|
+
"./package.json": "./package.json"
|
|
57
47
|
},
|
|
58
48
|
"dependencies": {
|
|
59
49
|
"astro": "^7.1.3",
|
|
@@ -61,7 +51,7 @@
|
|
|
61
51
|
"sanitize-html": "^2.17.5",
|
|
62
52
|
"shiki": "^1.29.2",
|
|
63
53
|
"yaml": "^2.9.0",
|
|
64
|
-
"@grove-dev/core": "0.
|
|
54
|
+
"@grove-dev/core": "0.8.0"
|
|
65
55
|
},
|
|
66
56
|
"peerDependencies": {
|
|
67
57
|
"astro": "^6.0.0 || ^7.0.0"
|
package/src/index.ts
CHANGED
|
@@ -24,49 +24,41 @@
|
|
|
24
24
|
* which is the classic "I changed the brand color in global.css
|
|
25
25
|
* and nothing happened" surprise.
|
|
26
26
|
*/
|
|
27
|
-
import { existsSync } from
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import
|
|
31
|
-
import {
|
|
32
|
-
import { syncPackagedIcons } from
|
|
27
|
+
import { existsSync } from 'node:fs';
|
|
28
|
+
import { dirname, resolve } from 'node:path';
|
|
29
|
+
import { fileURLToPath } from 'node:url';
|
|
30
|
+
import { loadConfig, prepareDirectory } from '@grove-dev/core';
|
|
31
|
+
import type { AstroIntegration } from 'astro';
|
|
32
|
+
import { syncPackagedIcons } from './lib/packaged-icons.js';
|
|
33
33
|
|
|
34
|
-
export * from
|
|
34
|
+
export * from '@grove-dev/core';
|
|
35
35
|
|
|
36
36
|
// Generic lib helpers — repo URL parsing, formatting, search /
|
|
37
37
|
// facet / sort / paginate, lens application, score tiers, taxonomy
|
|
38
38
|
// counts, and pretty-print display maps. All dependency-free and
|
|
39
39
|
// typed against `@grove-dev/core`.
|
|
40
|
-
export * from
|
|
40
|
+
export * from './lib/index.js';
|
|
41
41
|
|
|
42
42
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
43
|
-
// `here` is the compiled `dist/` directory. The components and
|
|
44
|
-
// layouts live in the source tree (the `dist/` is for the
|
|
45
|
-
// integration helper only). Walk up one level to reach `src/`
|
|
46
|
-
// before resolving the subpath roots.
|
|
47
|
-
const srcRoot = resolve(here, "..", "src");
|
|
48
|
-
const componentsDir = resolve(srcRoot, "components");
|
|
49
|
-
const layoutsDir = resolve(srcRoot, "layouts");
|
|
50
43
|
|
|
51
44
|
// Virtual module id used to inject the consumer's `src/styles/global.css`.
|
|
52
45
|
// Resolved by the inline Vite plugin below to the absolute file path
|
|
53
46
|
// when the file exists, or to an empty module when it doesn't.
|
|
54
|
-
const CONSUMER_GLOBAL_CSS_VIRTUAL_ID =
|
|
55
|
-
const CONSUMER_GLOBAL_CSS_EMPTY_ID =
|
|
56
|
-
"\0virtual:grove-consumer-global-css:empty";
|
|
47
|
+
const CONSUMER_GLOBAL_CSS_VIRTUAL_ID = 'virtual:grove-consumer-global-css';
|
|
48
|
+
const CONSUMER_GLOBAL_CSS_EMPTY_ID = '\0virtual:grove-consumer-global-css:empty';
|
|
57
49
|
|
|
58
50
|
export default function groveAstro(): AstroIntegration {
|
|
59
51
|
return {
|
|
60
|
-
name:
|
|
52
|
+
name: '@grove-dev/astro',
|
|
61
53
|
hooks: {
|
|
62
|
-
|
|
54
|
+
'astro:config:setup': async ({ config, updateConfig, injectScript, logger }) => {
|
|
63
55
|
// Alias the components/layouts source directories so
|
|
64
56
|
// consumer builds can import from
|
|
65
57
|
// @grove-dev/astro/components/ProjectCard.astro
|
|
66
58
|
// without us shipping a glob-shaped `exports` map that
|
|
67
59
|
// Vite/Rollup does not expand reliably.
|
|
68
60
|
const consumerRoot = fileURLToPath(config.root);
|
|
69
|
-
const groveConfigPath = resolve(consumerRoot,
|
|
61
|
+
const groveConfigPath = resolve(consumerRoot, 'grove.config.ts');
|
|
70
62
|
if (existsSync(groveConfigPath)) {
|
|
71
63
|
await prepareDirectory(consumerRoot);
|
|
72
64
|
// Data preparation and the icon sync below are the integration's
|
|
@@ -87,26 +79,24 @@ export default function groveAstro(): AstroIntegration {
|
|
|
87
79
|
// control is what makes it recoverable.
|
|
88
80
|
logger.info(
|
|
89
81
|
`Adopted ${icons.written.length} icon(s) into public/icons/ and recorded them in ` +
|
|
90
|
-
|
|
82
|
+
'.grove-icons.json. Review with `git diff public/icons` if you had edited any.',
|
|
91
83
|
);
|
|
92
84
|
}
|
|
93
85
|
if (icons.skipped.length > 0) {
|
|
94
86
|
logger.warn(
|
|
95
|
-
`Kept ${icons.skipped.length} locally modified icon(s): ${icons.skipped.join(
|
|
96
|
-
|
|
87
|
+
`Kept ${icons.skipped.length} locally modified icon(s): ${icons.skipped.join(', ')}. ` +
|
|
88
|
+
'Run `grove icons sync --force` to restore the packaged versions.',
|
|
97
89
|
);
|
|
98
90
|
}
|
|
99
91
|
}
|
|
100
|
-
const globalCssPath = resolve(consumerRoot,
|
|
92
|
+
const globalCssPath = resolve(consumerRoot, 'src/styles/global.css');
|
|
101
93
|
const globalCssExists = existsSync(globalCssPath);
|
|
102
94
|
|
|
103
95
|
updateConfig({
|
|
104
96
|
vite: {
|
|
105
97
|
resolve: {
|
|
106
98
|
alias: {
|
|
107
|
-
|
|
108
|
-
"@grove-dev/astro/layouts": layoutsDir,
|
|
109
|
-
"@grove/generated": resolve(consumerRoot, "data/generated"),
|
|
99
|
+
'@grove/generated': resolve(consumerRoot, 'data/generated'),
|
|
110
100
|
},
|
|
111
101
|
},
|
|
112
102
|
// The OG image pipeline (`@grove-dev/core`'s og-image.ts)
|
|
@@ -115,22 +105,20 @@ export default function groveAstro(): AstroIntegration {
|
|
|
115
105
|
// time) — never in page code — so keep the bundler away
|
|
116
106
|
// from the .node binary.
|
|
117
107
|
ssr: {
|
|
118
|
-
external: [
|
|
108
|
+
external: ['satori', '@resvg/resvg-js'],
|
|
119
109
|
},
|
|
120
110
|
plugins: [
|
|
121
111
|
{
|
|
122
|
-
name:
|
|
112
|
+
name: 'grove:consumer-global-css-resolver',
|
|
123
113
|
resolveId(id) {
|
|
124
114
|
if (id === CONSUMER_GLOBAL_CSS_VIRTUAL_ID) {
|
|
125
|
-
return globalCssExists
|
|
126
|
-
? globalCssPath
|
|
127
|
-
: CONSUMER_GLOBAL_CSS_EMPTY_ID;
|
|
115
|
+
return globalCssExists ? globalCssPath : CONSUMER_GLOBAL_CSS_EMPTY_ID;
|
|
128
116
|
}
|
|
129
117
|
return null;
|
|
130
118
|
},
|
|
131
119
|
load(id) {
|
|
132
120
|
if (id === CONSUMER_GLOBAL_CSS_EMPTY_ID) {
|
|
133
|
-
return
|
|
121
|
+
return '';
|
|
134
122
|
}
|
|
135
123
|
return null;
|
|
136
124
|
},
|
|
@@ -143,10 +131,7 @@ export default function groveAstro(): AstroIntegration {
|
|
|
143
131
|
// regardless of whether the consumer has a global.css yet.
|
|
144
132
|
// Vite's CSS pipeline (with @tailwindcss/vite) handles the
|
|
145
133
|
// resulting import as a stylesheet — no JS bundle weight.
|
|
146
|
-
injectScript(
|
|
147
|
-
"page-ssr",
|
|
148
|
-
`import "${CONSUMER_GLOBAL_CSS_VIRTUAL_ID}";`,
|
|
149
|
-
);
|
|
134
|
+
injectScript('page-ssr', `import "${CONSUMER_GLOBAL_CSS_VIRTUAL_ID}";`);
|
|
150
135
|
},
|
|
151
136
|
},
|
|
152
137
|
};
|
package/src/lib/display.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from '@grove-dev/core';
|
package/src/lib/format.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from '@grove-dev/core';
|
package/src/lib/icon-kinds.ts
CHANGED
|
@@ -10,50 +10,50 @@
|
|
|
10
10
|
* Keyed by `${folder}/${resolvedName}` — the folder matters because
|
|
11
11
|
* `apple` exists under both `stacks/` and `platforms/`.
|
|
12
12
|
*/
|
|
13
|
-
export type IconKind =
|
|
13
|
+
export type IconKind = 'color' | 'mono';
|
|
14
14
|
|
|
15
15
|
export const ICON_KINDS: Readonly<Record<string, IconKind>> = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
16
|
+
'platforms/android': 'color',
|
|
17
|
+
'platforms/app': 'mono',
|
|
18
|
+
'platforms/chrome': 'color',
|
|
19
|
+
'platforms/desktop': 'mono',
|
|
20
|
+
'platforms/embedded': 'mono',
|
|
21
|
+
'platforms/ios': 'mono',
|
|
22
|
+
'platforms/linux': 'color',
|
|
23
|
+
'platforms/macos': 'mono',
|
|
24
|
+
'platforms/ubuntu': 'color',
|
|
25
|
+
'platforms/web': 'mono',
|
|
26
|
+
'platforms/windows': 'color',
|
|
27
|
+
'stacks/android': 'color',
|
|
28
|
+
'stacks/apple': 'mono',
|
|
29
|
+
'stacks/bun': 'color',
|
|
30
|
+
'stacks/capacitor': 'color',
|
|
31
|
+
'stacks/clojure': 'color',
|
|
32
|
+
'stacks/dart': 'color',
|
|
33
|
+
'stacks/deno': 'mono',
|
|
34
|
+
'stacks/django': 'color',
|
|
35
|
+
'stacks/docker': 'color',
|
|
36
|
+
'stacks/firebase': 'color',
|
|
37
|
+
'stacks/flutter': 'color',
|
|
38
|
+
'stacks/go': 'color',
|
|
39
|
+
'stacks/graphql': 'color',
|
|
40
|
+
'stacks/ionic': 'color',
|
|
41
|
+
'stacks/java': 'color',
|
|
42
|
+
'stacks/javascript': 'color',
|
|
43
|
+
'stacks/kotlin': 'color',
|
|
44
|
+
'stacks/llm': 'mono',
|
|
45
|
+
'stacks/mongodb': 'color',
|
|
46
|
+
'stacks/nodejs': 'color',
|
|
47
|
+
'stacks/python': 'color',
|
|
48
|
+
'stacks/rag': 'mono',
|
|
49
|
+
'stacks/react': 'color',
|
|
50
|
+
'stacks/react-native': 'color',
|
|
51
|
+
'stacks/rust': 'mono',
|
|
52
|
+
'stacks/solidity': 'mono',
|
|
53
|
+
'stacks/sveltekit': 'color',
|
|
54
|
+
'stacks/swift': 'color',
|
|
55
|
+
'stacks/tauri': 'mono',
|
|
56
|
+
'stacks/tensorflow': 'color',
|
|
57
|
+
'stacks/typescript': 'color',
|
|
58
|
+
'stacks/vue': 'color',
|
|
59
59
|
};
|
package/src/lib/icon-registry.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* (and drifting from) the alias and folder rules.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
export type IconCategory =
|
|
11
|
-
export type IconFolder =
|
|
10
|
+
export type IconCategory = 'stack' | 'platform' | 'brand';
|
|
11
|
+
export type IconFolder = 'stacks' | 'platforms' | 'brands';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Normalize: lowercase + replace spaces/underscores with dashes.
|
|
@@ -21,7 +21,7 @@ export function slugifyIconName(s: string): string {
|
|
|
21
21
|
return s
|
|
22
22
|
.toLowerCase()
|
|
23
23
|
.trim()
|
|
24
|
-
.replace(/[\s_]+/g,
|
|
24
|
+
.replace(/[\s_]+/g, '-');
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -31,28 +31,28 @@ export function slugifyIconName(s: string): string {
|
|
|
31
31
|
*/
|
|
32
32
|
const defaultAliases: Partial<Record<IconCategory, Record<string, string>>> = {
|
|
33
33
|
stack: {
|
|
34
|
-
ios:
|
|
35
|
-
|
|
36
|
-
ipados:
|
|
37
|
-
macos:
|
|
38
|
-
|
|
39
|
-
spritekit:
|
|
40
|
-
swiftui:
|
|
41
|
-
kmp:
|
|
42
|
-
|
|
34
|
+
ios: 'apple',
|
|
35
|
+
'native-ios': 'apple',
|
|
36
|
+
ipados: 'apple',
|
|
37
|
+
macos: 'apple',
|
|
38
|
+
'objective-c': 'apple',
|
|
39
|
+
spritekit: 'apple',
|
|
40
|
+
swiftui: 'apple',
|
|
41
|
+
kmp: 'kotlin',
|
|
42
|
+
'kotlin-multiplatform': 'kotlin',
|
|
43
43
|
// Names the shipped set covers under a different file.
|
|
44
|
-
|
|
45
|
-
node:
|
|
46
|
-
clojurescript:
|
|
47
|
-
svelte:
|
|
44
|
+
'node.js': 'nodejs',
|
|
45
|
+
node: 'nodejs',
|
|
46
|
+
clojurescript: 'clojure',
|
|
47
|
+
svelte: 'sveltekit',
|
|
48
48
|
},
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
/** Stack marks that `category="platform"` should reuse rather than duplicate. */
|
|
52
|
-
const platformStackIcons = new Set([
|
|
52
|
+
const platformStackIcons = new Set(['docker']);
|
|
53
53
|
|
|
54
54
|
/** Platforms with no mark at all — always render the initials chip. */
|
|
55
|
-
export const textOnlyPlatforms = new Set([
|
|
55
|
+
export const textOnlyPlatforms = new Set(['self-host', 'self-hosted']);
|
|
56
56
|
|
|
57
57
|
export interface ResolvedIconAsset {
|
|
58
58
|
/** Subfolder under the icon base path. */
|
|
@@ -80,17 +80,17 @@ export function resolveIconAsset(
|
|
|
80
80
|
): ResolvedIconAsset {
|
|
81
81
|
const resolved = resolveName(name, category, aliases);
|
|
82
82
|
const folder: IconFolder =
|
|
83
|
-
category ===
|
|
84
|
-
?
|
|
85
|
-
: category ===
|
|
86
|
-
?
|
|
87
|
-
:
|
|
83
|
+
category === 'stack' || (category === 'platform' && platformStackIcons.has(resolved))
|
|
84
|
+
? 'stacks'
|
|
85
|
+
: category === 'platform'
|
|
86
|
+
? 'platforms'
|
|
87
|
+
: 'brands';
|
|
88
88
|
|
|
89
89
|
return {
|
|
90
90
|
folder,
|
|
91
91
|
name: resolved,
|
|
92
92
|
key: `${folder}/${resolved}`,
|
|
93
|
-
textOnly: category ===
|
|
93
|
+
textOnly: category === 'platform' && textOnlyPlatforms.has(resolved),
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -99,7 +99,7 @@ function resolveName(
|
|
|
99
99
|
category: IconCategory,
|
|
100
100
|
aliases?: Record<string, string>,
|
|
101
101
|
): string {
|
|
102
|
-
if (!raw) return
|
|
102
|
+
if (!raw) return '';
|
|
103
103
|
for (const registry of [aliases, defaultAliases[category]]) {
|
|
104
104
|
if (!registry) continue;
|
|
105
105
|
const lower = raw.toLowerCase();
|
package/src/lib/index.ts
CHANGED
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
* payload and the `Score` / `HealthStatus` unions).
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
export * from
|
|
21
|
-
export * from
|
|
22
|
-
export * from
|
|
23
|
-
export * from
|
|
24
|
-
export * from
|
|
25
|
-
export * from
|
|
26
|
-
export * from
|
|
27
|
-
export * from
|
|
28
|
-
export * from
|
|
20
|
+
export * from './display.js';
|
|
21
|
+
export * from './format.js';
|
|
22
|
+
export * from './icon-kinds.js';
|
|
23
|
+
export * from './icon-registry.js';
|
|
24
|
+
export * from './lenses.js';
|
|
25
|
+
export * from './packaged-icons.js';
|
|
26
|
+
export * from './repo.js';
|
|
27
|
+
export * from './search.js';
|
|
28
|
+
export * from './taxonomy-counts.js';
|
package/src/lib/lenses.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from '@grove-dev/core';
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* carries the matching artwork with it, so a consumer can never end up
|
|
7
7
|
* with a component asking for files their site does not have.
|
|
8
8
|
*/
|
|
9
|
-
import { dirname, resolve } from
|
|
10
|
-
import { fileURLToPath } from
|
|
11
|
-
import type { IconSyncOptions, IconSyncResult } from
|
|
12
|
-
import { syncIconAssets } from
|
|
9
|
+
import { dirname, resolve } from 'node:path';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import type { IconSyncOptions, IconSyncResult } from '@grove-dev/core';
|
|
12
|
+
import { syncIconAssets } from '@grove-dev/core';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* `packages/astro/assets/icons` — two levels up, which holds for both
|
|
@@ -17,10 +17,10 @@ import { syncIconAssets } from "@grove-dev/core";
|
|
|
17
17
|
*/
|
|
18
18
|
export const packagedIconsDir = resolve(
|
|
19
19
|
dirname(fileURLToPath(import.meta.url)),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
'..',
|
|
21
|
+
'..',
|
|
22
|
+
'assets',
|
|
23
|
+
'icons',
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
/** Copy the packaged icon set into a site's `public/`. */
|
package/src/lib/repo.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from '@grove-dev/core';
|
package/src/lib/search.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from '@grove-dev/core';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from '@grove-dev/core';
|