Skip to content

Commit 12ee340

Browse files
add material-theme-icon
1 parent 6e9a051 commit 12ee340

File tree

712 files changed

+5479
-21
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

712 files changed

+5479
-21
lines changed

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

preview/vite.config.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,5 @@ function vitePluginServiceWorker(): PluginOption {
106106

107107
export default defineConfig({
108108
plugins: [vitePluginServiceWorker(), viteSingleFile()],
109-
build: {
110-
}
109+
build: {},
111110
})

src/assets/material-theme-icon/dist/Material-Theme-Icons-Darker.json

Lines changed: 933 additions & 0 deletions
Large diffs are not rendered by default.

src/assets/material-theme-icon/dist/Material-Theme-Icons-Light.json

Lines changed: 931 additions & 0 deletions
Large diffs are not rendered by default.

src/assets/material-theme-icon/dist/Material-Theme-Icons-Ocean.json

Lines changed: 931 additions & 0 deletions
Large diffs are not rendered by default.

src/assets/material-theme-icon/dist/Material-Theme-Icons-Palenight.json

Lines changed: 935 additions & 0 deletions
Large diffs are not rendered by default.

src/assets/material-theme-icon/dist/Material-Theme-Icons.json

Lines changed: 931 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import { basename, extname } from "path"
2+
3+
import MaterialIcons from "./Material-Theme-Icons.json"
4+
5+
export interface Options {
6+
readonly light: boolean
7+
readonly isOpen: boolean
8+
readonly isFolder: boolean
9+
readonly filepath: string
10+
readonly language?: keyof (typeof MaterialIcons)["languageIds"]
11+
}
12+
13+
const icons = import.meta.glob("../icons/*.svg", { as: "url" })
14+
15+
async function getIconById(
16+
id: keyof typeof MaterialIcons.iconDefinitions
17+
): Promise<string> {
18+
return icons[MaterialIcons.iconDefinitions[id].iconPath]().then(
19+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
20+
(res) => (res as any).default
21+
) as Promise<string>
22+
}
23+
24+
function getIconDefinitions({
25+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
26+
light,
27+
isOpen,
28+
isFolder,
29+
filepath,
30+
language,
31+
}: Options): string {
32+
filepath = basename(filepath).toLowerCase()
33+
34+
if (isFolder) {
35+
if (isOpen) {
36+
if (filepath in MaterialIcons.folderNamesExpanded) {
37+
return MaterialIcons.folderNamesExpanded[
38+
filepath as keyof typeof MaterialIcons.folderNamesExpanded
39+
]
40+
}
41+
} else {
42+
if (filepath in MaterialIcons.folderNames) {
43+
return MaterialIcons.folderNames[
44+
filepath as keyof typeof MaterialIcons.folderNames
45+
]
46+
}
47+
}
48+
49+
return isOpen ? MaterialIcons.folderExpanded : MaterialIcons.folder
50+
} else {
51+
if (language && language in MaterialIcons.languageIds)
52+
return MaterialIcons.languageIds[language]
53+
54+
const ext = extname(filepath).replace(/^\./, "")
55+
const ext2 = filepath.includes(".")
56+
? basename(filepath).split(".").slice(-2).join(".")
57+
: ""
58+
59+
if (filepath in MaterialIcons.fileNames) {
60+
return MaterialIcons.fileNames[
61+
filepath as keyof typeof MaterialIcons.fileNames
62+
]
63+
}
64+
if (ext2 in MaterialIcons.fileExtensions) {
65+
return MaterialIcons.fileExtensions[
66+
ext2 as keyof typeof MaterialIcons.fileExtensions
67+
]
68+
}
69+
if (ext in MaterialIcons.fileExtensions) {
70+
return MaterialIcons.fileExtensions[
71+
ext as keyof typeof MaterialIcons.fileExtensions
72+
]
73+
}
74+
if (ext2 in MaterialIcons.iconDefinitions) return ext2
75+
76+
if (ext in MaterialIcons.iconDefinitions) return ext
77+
78+
return MaterialIcons.file
79+
}
80+
}
81+
82+
export default function getIcon(options: Options): Promise<string> {
83+
const icon = getIconDefinitions(options)
84+
85+
if (icon in MaterialIcons.iconDefinitions)
86+
return getIconById(icon as keyof typeof MaterialIcons.iconDefinitions)
87+
88+
if (options.isFolder)
89+
return options.isOpen ? getIconById("_folder_open") : getIconById("_folder")
90+
else return getIconById("_file_unknown")
91+
}
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)