dirk-cfx-react 1.0.33 → 1.0.35
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/dist/components/index.cjs +41 -9
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +274 -274
- package/dist/components/index.d.ts +274 -274
- package/dist/components/index.js +41 -9
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.cjs +72 -0
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.cts +6 -1
- package/dist/hooks/index.d.ts +6 -1
- package/dist/hooks/index.js +71 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.cjs +409 -393
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +410 -395
- package/dist/index.js.map +1 -1
- package/dist/providers/index.cjs +2 -53
- package/dist/providers/index.cjs.map +1 -1
- package/dist/providers/index.js +2 -52
- package/dist/providers/index.js.map +1 -1
- package/dist/styles/fonts.css +62 -0
- package/dist/styles/tornEdge.css +30 -0
- package/package.json +2 -3
- package/src/styles/fonts.css +62 -0
- package/src/styles/tornEdge.css +30 -0
- package/dist/Akrobat-Black-ZNQ3X2DR.woff +0 -0
- package/dist/Akrobat-Bold-WHODCGVH.woff +0 -0
- package/dist/Akrobat-ExtraLight-EEU4O7A5.woff +0 -0
- package/dist/Akrobat-Light-G27NBZ3I.woff +0 -0
- package/dist/Akrobat-Regular-BWHYS34M.woff +0 -0
- package/dist/Akrobat-SemiBold-W7XR4FV7.woff +0 -0
- package/dist/RedDead-6PKXYEUH.otf +0 -0
- package/dist/akrobat-extrabold-webfont-T2DLCOEC.woff +0 -0
- package/dist/styles/fonts.ts +0 -46
- package/src/styles/fonts.ts +0 -46
- /package/dist/{Akrobat-Black.woff → fonts/Akrobat-Black.woff} +0 -0
- /package/dist/{Akrobat-Bold.woff → fonts/Akrobat-Bold.woff} +0 -0
- /package/dist/{Akrobat-ExtraLight.woff → fonts/Akrobat-ExtraLight.woff} +0 -0
- /package/dist/{Akrobat-Light.woff → fonts/Akrobat-Light.woff} +0 -0
- /package/dist/{Akrobat-Regular.woff → fonts/Akrobat-Regular.woff} +0 -0
- /package/dist/{Akrobat-SemiBold.woff → fonts/Akrobat-SemiBold.woff} +0 -0
- /package/dist/{CREDC___.otf → fonts/CREDC___.otf} +0 -0
- /package/dist/{CREDC___.ttf → fonts/CREDC___.ttf} +0 -0
- /package/dist/{RedDead.otf → fonts/RedDead.otf} +0 -0
- /package/dist/{akrobat-extrabold-webfont.woff → fonts/akrobat-extrabold-webfont.woff} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/styles/fonts.ts","../../src/utils/misc.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":["createTheme","library","fas","far","fab","create","useMemo","useEffect","jsx","MantineProvider","BackgroundImage"],"mappings":"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","file":"index.cjs","sourcesContent":["// Fonts.ts — registers all fonts using FontFace API\r\nimport AkrobatRegular from '../fonts/Akrobat-Regular.woff';\r\nimport AkrobatLight from '../fonts/Akrobat-Light.woff';\r\nimport AkrobatExtraLight from '../fonts/Akrobat-ExtraLight.woff';\r\nimport AkrobatSemiBold from '../fonts/Akrobat-SemiBold.woff';\r\nimport AkrobatBold from '../fonts/Akrobat-Bold.woff';\r\nimport AkrobatExtraBold from '../fonts/akrobat-extrabold-webfont.woff';\r\nimport AkrobatBlack from '../fonts/Akrobat-Black.woff';\r\nimport RedDead from '../fonts/RedDead.otf';\r\n\r\n// ✅ Resolve URLs relative to the built module (not the page root)\r\nfunction resolveFontUrl(fontPath: string): string {\r\n try {\r\n // When bundled by Vite or tsup, import.meta.url points to the dist/styles/fonts.js file.\r\n // This creates a correct absolute URL under /@fs/... in dev or /assets/... in build.\r\n return new URL(fontPath, import.meta.url).href;\r\n } catch {\r\n // fallback for environments without import.meta.url support\r\n return fontPath;\r\n }\r\n}\r\n\r\nconst fontDefs = [\r\n { name: 'Akrobat Regular', src: AkrobatRegular },\r\n { name: 'Akrobat Light', src: AkrobatLight },\r\n { name: 'Akrobat ExtraLight', src: AkrobatExtraLight },\r\n { name: 'Akrobat SemiBold', src: AkrobatSemiBold },\r\n { name: 'Akrobat Bold', src: AkrobatBold },\r\n { name: 'Akrobat ExtraBold Regular', src: AkrobatExtraBold },\r\n { name: 'Akrobat Black', src: AkrobatBlack },\r\n { name: 'Red Dead', src: RedDead },\r\n];\r\n\r\nfor (const f of fontDefs) {\r\n const url = resolveFontUrl(f.src);\r\n console.log(`Loading font: ${f.name} from ${url}`);\r\n\r\n const font = new FontFace(f.name, `url(${url})`);\r\n font\r\n .load()\r\n .then(() => {\r\n document.fonts.add(font);\r\n console.log(`✅ Loaded: ${f.name}`);\r\n })\r\n .catch((err) => console.error(`❌ Failed: ${f.name}`, err));\r\n}\r\n","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/core/styles.css';\r\nimport '@mantine/notifications/styles.css';\r\nimport '@/styles/fonts';\r\nimport './styles/scrollBar.css';\r\n\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineColorShade, MantineProvider, MantineThemeOverride } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nimport { useEffect, useMemo } from 'react';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\n\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n const game = useSettings((data) => data.game);\r\n // Memoize the merged theme to avoid unnecessary recalculations\r\n const mergedTheme = useMemo<MantineThemeOverride>(() => ({\r\n ...theme,\r\n primaryColor: primaryColor,\r\n primaryShade: primaryShade as MantineColorShade,\r\n colors: {\r\n ...theme.colors,\r\n ...customTheme, // Custom theme colors will override/extend base colors\r\n },\r\n }), [primaryColor, primaryShade, customTheme]);\r\n\r\n useEffect(() => {\r\n document.fonts.ready.then(() => {\r\n document.body.style.fontFamily = \r\n game === 'rdr3' ? '\"Red Dead\", sans-serif' :\r\n game === 'fivem' ? '\"Akrobat Regular\", sans-serif' :\r\n 'sans-serif';\r\n console.log(`Game set to ${game}, applied corresponding font family.: ${document.body.style.fontFamily}`);\r\n });\r\n }, [game]);\r\n\r\n return (\r\n <MantineProvider theme={mergedTheme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/misc.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":["createTheme","library","fas","far","fab","create","useMemo","useEffect","jsx","MantineProvider","BackgroundImage"],"mappings":"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","file":"index.cjs","sourcesContent":["export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/core/styles.css';\r\nimport '@mantine/notifications/styles.css';\r\nimport './styles/fonts.css';\r\nimport './styles/scrollBar.css';\r\nimport './styles/tornEdge.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineColorShade, MantineProvider, MantineThemeOverride } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nimport { useEffect, useMemo } from 'react';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\n\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n const game = useSettings((data) => data.game);\r\n // Memoize the merged theme to avoid unnecessary recalculations\r\n const mergedTheme = useMemo<MantineThemeOverride>(() => ({\r\n ...theme,\r\n primaryColor: primaryColor,\r\n primaryShade: primaryShade as MantineColorShade,\r\n colors: {\r\n ...theme.colors,\r\n ...customTheme, // Custom theme colors will override/extend base colors\r\n },\r\n }), [primaryColor, primaryShade, customTheme]);\r\n\r\n useEffect(() => {\r\n document.fonts.ready.then(() => {\r\n document.body.style.fontFamily = \r\n game === 'rdr3' ? '\"Red Dead\", sans-serif' :\r\n game === 'fivem' ? '\"Akrobat Regular\", sans-serif' :\r\n 'sans-serif';\r\n console.log(`Game set to ${game}, applied corresponding font family.: ${document.body.style.fontFamily}`);\r\n });\r\n }, [game]);\r\n\r\n return (\r\n <MantineProvider theme={mergedTheme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
|
package/dist/providers/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import '@mantine/core/styles.css';
|
|
2
2
|
import '@mantine/notifications/styles.css';
|
|
3
|
+
import './styles/fonts.css';
|
|
3
4
|
import './styles/scrollBar.css';
|
|
5
|
+
import './styles/tornEdge.css';
|
|
4
6
|
import { library } from '@fortawesome/fontawesome-svg-core';
|
|
5
7
|
import { fab } from '@fortawesome/free-brands-svg-icons';
|
|
6
8
|
import { far } from '@fortawesome/free-regular-svg-icons';
|
|
@@ -12,58 +14,6 @@ import { jsx, Fragment } from 'react/jsx-runtime';
|
|
|
12
14
|
|
|
13
15
|
// src/providers/DirkProvider.tsx
|
|
14
16
|
|
|
15
|
-
// src/fonts/Akrobat-Regular.woff
|
|
16
|
-
var Akrobat_Regular_default = "../Akrobat-Regular-BWHYS34M.woff";
|
|
17
|
-
|
|
18
|
-
// src/fonts/Akrobat-Light.woff
|
|
19
|
-
var Akrobat_Light_default = "../Akrobat-Light-G27NBZ3I.woff";
|
|
20
|
-
|
|
21
|
-
// src/fonts/Akrobat-ExtraLight.woff
|
|
22
|
-
var Akrobat_ExtraLight_default = "../Akrobat-ExtraLight-EEU4O7A5.woff";
|
|
23
|
-
|
|
24
|
-
// src/fonts/Akrobat-SemiBold.woff
|
|
25
|
-
var Akrobat_SemiBold_default = "../Akrobat-SemiBold-W7XR4FV7.woff";
|
|
26
|
-
|
|
27
|
-
// src/fonts/Akrobat-Bold.woff
|
|
28
|
-
var Akrobat_Bold_default = "../Akrobat-Bold-WHODCGVH.woff";
|
|
29
|
-
|
|
30
|
-
// src/fonts/akrobat-extrabold-webfont.woff
|
|
31
|
-
var akrobat_extrabold_webfont_default = "../akrobat-extrabold-webfont-T2DLCOEC.woff";
|
|
32
|
-
|
|
33
|
-
// src/fonts/Akrobat-Black.woff
|
|
34
|
-
var Akrobat_Black_default = "../Akrobat-Black-ZNQ3X2DR.woff";
|
|
35
|
-
|
|
36
|
-
// src/fonts/RedDead.otf
|
|
37
|
-
var RedDead_default = "../RedDead-6PKXYEUH.otf";
|
|
38
|
-
|
|
39
|
-
// src/styles/fonts.ts
|
|
40
|
-
function resolveFontUrl(fontPath) {
|
|
41
|
-
try {
|
|
42
|
-
return new URL(fontPath, import.meta.url).href;
|
|
43
|
-
} catch {
|
|
44
|
-
return fontPath;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
var fontDefs = [
|
|
48
|
-
{ name: "Akrobat Regular", src: Akrobat_Regular_default },
|
|
49
|
-
{ name: "Akrobat Light", src: Akrobat_Light_default },
|
|
50
|
-
{ name: "Akrobat ExtraLight", src: Akrobat_ExtraLight_default },
|
|
51
|
-
{ name: "Akrobat SemiBold", src: Akrobat_SemiBold_default },
|
|
52
|
-
{ name: "Akrobat Bold", src: Akrobat_Bold_default },
|
|
53
|
-
{ name: "Akrobat ExtraBold Regular", src: akrobat_extrabold_webfont_default },
|
|
54
|
-
{ name: "Akrobat Black", src: Akrobat_Black_default },
|
|
55
|
-
{ name: "Red Dead", src: RedDead_default }
|
|
56
|
-
];
|
|
57
|
-
for (const f of fontDefs) {
|
|
58
|
-
const url = resolveFontUrl(f.src);
|
|
59
|
-
console.log(`Loading font: ${f.name} from ${url}`);
|
|
60
|
-
const font = new FontFace(f.name, `url(${url})`);
|
|
61
|
-
font.load().then(() => {
|
|
62
|
-
document.fonts.add(font);
|
|
63
|
-
console.log(`\u2705 Loaded: ${f.name}`);
|
|
64
|
-
}).catch((err) => console.error(`\u274C Failed: ${f.name}`, err));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
17
|
// src/utils/misc.ts
|
|
68
18
|
var isEnvBrowser = () => !window.invokeNative;
|
|
69
19
|
var theme = createTheme({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/styles/fonts.ts","../../src/utils/misc.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// Fonts.ts — registers all fonts using FontFace API\r\nimport AkrobatRegular from '../fonts/Akrobat-Regular.woff';\r\nimport AkrobatLight from '../fonts/Akrobat-Light.woff';\r\nimport AkrobatExtraLight from '../fonts/Akrobat-ExtraLight.woff';\r\nimport AkrobatSemiBold from '../fonts/Akrobat-SemiBold.woff';\r\nimport AkrobatBold from '../fonts/Akrobat-Bold.woff';\r\nimport AkrobatExtraBold from '../fonts/akrobat-extrabold-webfont.woff';\r\nimport AkrobatBlack from '../fonts/Akrobat-Black.woff';\r\nimport RedDead from '../fonts/RedDead.otf';\r\n\r\n// ✅ Resolve URLs relative to the built module (not the page root)\r\nfunction resolveFontUrl(fontPath: string): string {\r\n try {\r\n // When bundled by Vite or tsup, import.meta.url points to the dist/styles/fonts.js file.\r\n // This creates a correct absolute URL under /@fs/... in dev or /assets/... in build.\r\n return new URL(fontPath, import.meta.url).href;\r\n } catch {\r\n // fallback for environments without import.meta.url support\r\n return fontPath;\r\n }\r\n}\r\n\r\nconst fontDefs = [\r\n { name: 'Akrobat Regular', src: AkrobatRegular },\r\n { name: 'Akrobat Light', src: AkrobatLight },\r\n { name: 'Akrobat ExtraLight', src: AkrobatExtraLight },\r\n { name: 'Akrobat SemiBold', src: AkrobatSemiBold },\r\n { name: 'Akrobat Bold', src: AkrobatBold },\r\n { name: 'Akrobat ExtraBold Regular', src: AkrobatExtraBold },\r\n { name: 'Akrobat Black', src: AkrobatBlack },\r\n { name: 'Red Dead', src: RedDead },\r\n];\r\n\r\nfor (const f of fontDefs) {\r\n const url = resolveFontUrl(f.src);\r\n console.log(`Loading font: ${f.name} from ${url}`);\r\n\r\n const font = new FontFace(f.name, `url(${url})`);\r\n font\r\n .load()\r\n .then(() => {\r\n document.fonts.add(font);\r\n console.log(`✅ Loaded: ${f.name}`);\r\n })\r\n .catch((err) => console.error(`❌ Failed: ${f.name}`, err));\r\n}\r\n","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/core/styles.css';\r\nimport '@mantine/notifications/styles.css';\r\nimport '@/styles/fonts';\r\nimport './styles/scrollBar.css';\r\n\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineColorShade, MantineProvider, MantineThemeOverride } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nimport { useEffect, useMemo } from 'react';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\n\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n const game = useSettings((data) => data.game);\r\n // Memoize the merged theme to avoid unnecessary recalculations\r\n const mergedTheme = useMemo<MantineThemeOverride>(() => ({\r\n ...theme,\r\n primaryColor: primaryColor,\r\n primaryShade: primaryShade as MantineColorShade,\r\n colors: {\r\n ...theme.colors,\r\n ...customTheme, // Custom theme colors will override/extend base colors\r\n },\r\n }), [primaryColor, primaryShade, customTheme]);\r\n\r\n useEffect(() => {\r\n document.fonts.ready.then(() => {\r\n document.body.style.fontFamily = \r\n game === 'rdr3' ? '\"Red Dead\", sans-serif' :\r\n game === 'fivem' ? '\"Akrobat Regular\", sans-serif' :\r\n 'sans-serif';\r\n console.log(`Game set to ${game}, applied corresponding font family.: ${document.body.style.fontFamily}`);\r\n });\r\n }, [game]);\r\n\r\n return (\r\n <MantineProvider theme={mergedTheme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/misc.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/core/styles.css';\r\nimport '@mantine/notifications/styles.css';\r\nimport './styles/fonts.css';\r\nimport './styles/scrollBar.css';\r\nimport './styles/tornEdge.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineColorShade, MantineProvider, MantineThemeOverride } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nimport { useEffect, useMemo } from 'react';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\n\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n const game = useSettings((data) => data.game);\r\n // Memoize the merged theme to avoid unnecessary recalculations\r\n const mergedTheme = useMemo<MantineThemeOverride>(() => ({\r\n ...theme,\r\n primaryColor: primaryColor,\r\n primaryShade: primaryShade as MantineColorShade,\r\n colors: {\r\n ...theme.colors,\r\n ...customTheme, // Custom theme colors will override/extend base colors\r\n },\r\n }), [primaryColor, primaryShade, customTheme]);\r\n\r\n useEffect(() => {\r\n document.fonts.ready.then(() => {\r\n document.body.style.fontFamily = \r\n game === 'rdr3' ? '\"Red Dead\", sans-serif' :\r\n game === 'fivem' ? '\"Akrobat Regular\", sans-serif' :\r\n 'sans-serif';\r\n console.log(`Game set to ${game}, applied corresponding font family.: ${document.body.style.fontFamily}`);\r\n });\r\n }, [game]);\r\n\r\n return (\r\n <MantineProvider theme={mergedTheme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: 'Akrobat Regular';
|
|
3
|
+
font-style: normal;
|
|
4
|
+
font-weight: normal;
|
|
5
|
+
src: local('Akrobat Regular'), url('../fonts/Akrobat-Regular.woff') format('woff');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@font-face {
|
|
9
|
+
font-family: 'Akrobat Light';
|
|
10
|
+
font-style: normal;
|
|
11
|
+
font-weight: normal;
|
|
12
|
+
src: local('Akrobat Light'), url('../fonts/Akrobat-Light.woff') format('woff');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@font-face {
|
|
16
|
+
font-family: 'Akrobat ExtraLight';
|
|
17
|
+
font-style: normal;
|
|
18
|
+
font-weight: normal;
|
|
19
|
+
src: local('Akrobat ExtraLight'), url('../fonts/Akrobat-ExtraLight.woff') format('woff');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: 'Akrobat SemiBold';
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-weight: normal;
|
|
26
|
+
src: local('Akrobat SemiBold'), url('../fonts/Akrobat-SemiBold.woff') format('woff');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@font-face {
|
|
30
|
+
font-family: 'Akrobat Bold';
|
|
31
|
+
font-style: normal;
|
|
32
|
+
font-weight: normal;
|
|
33
|
+
src: local('Akrobat Bold'), url('../fonts/Akrobat-Bold.woff') format('woff');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@font-face {
|
|
37
|
+
font-family: 'Akrobat ExtraBold Regular';
|
|
38
|
+
font-style: normal;
|
|
39
|
+
font-weight: normal;
|
|
40
|
+
src: local('Akrobat ExtraBold Regular'), url('../fonts/akrobat-extrabold-webfont.woff') format('woff');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@font-face {
|
|
44
|
+
font-family: 'Akrobat Black';
|
|
45
|
+
font-style: normal;
|
|
46
|
+
font-weight: normal;
|
|
47
|
+
src: local('Akrobat Black'), url('../fonts/Akrobat-Black.woff') format('woff');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@font-face {
|
|
51
|
+
font-family: 'CreditCard';
|
|
52
|
+
font-style: normal;
|
|
53
|
+
font-weight: normal;
|
|
54
|
+
src: local('Credit Card'), url('../fonts/CREDC___.otf') format('opentype');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@font-face {
|
|
58
|
+
font-family: 'Red Dead';
|
|
59
|
+
font-style: normal;
|
|
60
|
+
font-weight: normal;
|
|
61
|
+
src: local('Red Dead'), url('../fonts/RedDead.otf') format('opentype');
|
|
62
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.torn-edge-wrapper {
|
|
2
|
+
position: relative;
|
|
3
|
+
isolation: isolate;
|
|
4
|
+
border-radius: inherit;
|
|
5
|
+
overflow: visible;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.torn-edge-wrapper::before {
|
|
9
|
+
content: "";
|
|
10
|
+
position: absolute;
|
|
11
|
+
inset: -1.5px;
|
|
12
|
+
background: inherit;
|
|
13
|
+
border: inherit;
|
|
14
|
+
border-radius: inherit;
|
|
15
|
+
filter: url(#torn-edge-filter);
|
|
16
|
+
mix-blend-mode: screen; /* best for dark panels */
|
|
17
|
+
opacity: 0.95; /* slightly brighter */
|
|
18
|
+
z-index: -1;
|
|
19
|
+
pointer-events: none;
|
|
20
|
+
|
|
21
|
+
/* Add a faint inner glow + edge lift for contrast */
|
|
22
|
+
box-shadow:
|
|
23
|
+
0 0 10px rgba(255, 255, 255, 0.08) inset,
|
|
24
|
+
0 0 12px rgba(0, 0, 0, 0.65);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.torn-edge-wrapper > * {
|
|
28
|
+
position: relative;
|
|
29
|
+
z-index: 0;
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dirk-cfx-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.35",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -83,8 +83,7 @@
|
|
|
83
83
|
"**/*.woff",
|
|
84
84
|
"**/*.woff2",
|
|
85
85
|
"**/*.ttf",
|
|
86
|
-
"**/*.otf"
|
|
87
|
-
"src/styles/fonts.ts"
|
|
86
|
+
"**/*.otf"
|
|
88
87
|
],
|
|
89
88
|
"typesVersions": {
|
|
90
89
|
"*": {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: 'Akrobat Regular';
|
|
3
|
+
font-style: normal;
|
|
4
|
+
font-weight: normal;
|
|
5
|
+
src: local('Akrobat Regular'), url('../fonts/Akrobat-Regular.woff') format('woff');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@font-face {
|
|
9
|
+
font-family: 'Akrobat Light';
|
|
10
|
+
font-style: normal;
|
|
11
|
+
font-weight: normal;
|
|
12
|
+
src: local('Akrobat Light'), url('../fonts/Akrobat-Light.woff') format('woff');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@font-face {
|
|
16
|
+
font-family: 'Akrobat ExtraLight';
|
|
17
|
+
font-style: normal;
|
|
18
|
+
font-weight: normal;
|
|
19
|
+
src: local('Akrobat ExtraLight'), url('../fonts/Akrobat-ExtraLight.woff') format('woff');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: 'Akrobat SemiBold';
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-weight: normal;
|
|
26
|
+
src: local('Akrobat SemiBold'), url('../fonts/Akrobat-SemiBold.woff') format('woff');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@font-face {
|
|
30
|
+
font-family: 'Akrobat Bold';
|
|
31
|
+
font-style: normal;
|
|
32
|
+
font-weight: normal;
|
|
33
|
+
src: local('Akrobat Bold'), url('../fonts/Akrobat-Bold.woff') format('woff');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@font-face {
|
|
37
|
+
font-family: 'Akrobat ExtraBold Regular';
|
|
38
|
+
font-style: normal;
|
|
39
|
+
font-weight: normal;
|
|
40
|
+
src: local('Akrobat ExtraBold Regular'), url('../fonts/akrobat-extrabold-webfont.woff') format('woff');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@font-face {
|
|
44
|
+
font-family: 'Akrobat Black';
|
|
45
|
+
font-style: normal;
|
|
46
|
+
font-weight: normal;
|
|
47
|
+
src: local('Akrobat Black'), url('../fonts/Akrobat-Black.woff') format('woff');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@font-face {
|
|
51
|
+
font-family: 'CreditCard';
|
|
52
|
+
font-style: normal;
|
|
53
|
+
font-weight: normal;
|
|
54
|
+
src: local('Credit Card'), url('../fonts/CREDC___.otf') format('opentype');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@font-face {
|
|
58
|
+
font-family: 'Red Dead';
|
|
59
|
+
font-style: normal;
|
|
60
|
+
font-weight: normal;
|
|
61
|
+
src: local('Red Dead'), url('../fonts/RedDead.otf') format('opentype');
|
|
62
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.torn-edge-wrapper {
|
|
2
|
+
position: relative;
|
|
3
|
+
isolation: isolate;
|
|
4
|
+
border-radius: inherit;
|
|
5
|
+
overflow: visible;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.torn-edge-wrapper::before {
|
|
9
|
+
content: "";
|
|
10
|
+
position: absolute;
|
|
11
|
+
inset: -1.5px;
|
|
12
|
+
background: inherit;
|
|
13
|
+
border: inherit;
|
|
14
|
+
border-radius: inherit;
|
|
15
|
+
filter: url(#torn-edge-filter);
|
|
16
|
+
mix-blend-mode: screen; /* best for dark panels */
|
|
17
|
+
opacity: 0.95; /* slightly brighter */
|
|
18
|
+
z-index: -1;
|
|
19
|
+
pointer-events: none;
|
|
20
|
+
|
|
21
|
+
/* Add a faint inner glow + edge lift for contrast */
|
|
22
|
+
box-shadow:
|
|
23
|
+
0 0 10px rgba(255, 255, 255, 0.08) inset,
|
|
24
|
+
0 0 12px rgba(0, 0, 0, 0.65);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.torn-edge-wrapper > * {
|
|
28
|
+
position: relative;
|
|
29
|
+
z-index: 0;
|
|
30
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/styles/fonts.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
// Fonts.ts — registers all fonts using FontFace API
|
|
2
|
-
import AkrobatRegular from '../fonts/Akrobat-Regular.woff';
|
|
3
|
-
import AkrobatLight from '../fonts/Akrobat-Light.woff';
|
|
4
|
-
import AkrobatExtraLight from '../fonts/Akrobat-ExtraLight.woff';
|
|
5
|
-
import AkrobatSemiBold from '../fonts/Akrobat-SemiBold.woff';
|
|
6
|
-
import AkrobatBold from '../fonts/Akrobat-Bold.woff';
|
|
7
|
-
import AkrobatExtraBold from '../fonts/akrobat-extrabold-webfont.woff';
|
|
8
|
-
import AkrobatBlack from '../fonts/Akrobat-Black.woff';
|
|
9
|
-
import RedDead from '../fonts/RedDead.otf';
|
|
10
|
-
|
|
11
|
-
// ✅ Resolve URLs relative to the built module (not the page root)
|
|
12
|
-
function resolveFontUrl(fontPath: string): string {
|
|
13
|
-
try {
|
|
14
|
-
// When bundled by Vite or tsup, import.meta.url points to the dist/styles/fonts.js file.
|
|
15
|
-
// This creates a correct absolute URL under /@fs/... in dev or /assets/... in build.
|
|
16
|
-
return new URL(fontPath, import.meta.url).href;
|
|
17
|
-
} catch {
|
|
18
|
-
// fallback for environments without import.meta.url support
|
|
19
|
-
return fontPath;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const fontDefs = [
|
|
24
|
-
{ name: 'Akrobat Regular', src: AkrobatRegular },
|
|
25
|
-
{ name: 'Akrobat Light', src: AkrobatLight },
|
|
26
|
-
{ name: 'Akrobat ExtraLight', src: AkrobatExtraLight },
|
|
27
|
-
{ name: 'Akrobat SemiBold', src: AkrobatSemiBold },
|
|
28
|
-
{ name: 'Akrobat Bold', src: AkrobatBold },
|
|
29
|
-
{ name: 'Akrobat ExtraBold Regular', src: AkrobatExtraBold },
|
|
30
|
-
{ name: 'Akrobat Black', src: AkrobatBlack },
|
|
31
|
-
{ name: 'Red Dead', src: RedDead },
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
for (const f of fontDefs) {
|
|
35
|
-
const url = resolveFontUrl(f.src);
|
|
36
|
-
console.log(`Loading font: ${f.name} from ${url}`);
|
|
37
|
-
|
|
38
|
-
const font = new FontFace(f.name, `url(${url})`);
|
|
39
|
-
font
|
|
40
|
-
.load()
|
|
41
|
-
.then(() => {
|
|
42
|
-
document.fonts.add(font);
|
|
43
|
-
console.log(`✅ Loaded: ${f.name}`);
|
|
44
|
-
})
|
|
45
|
-
.catch((err) => console.error(`❌ Failed: ${f.name}`, err));
|
|
46
|
-
}
|
package/src/styles/fonts.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
// Fonts.ts — registers all fonts using FontFace API
|
|
2
|
-
import AkrobatRegular from '../fonts/Akrobat-Regular.woff';
|
|
3
|
-
import AkrobatLight from '../fonts/Akrobat-Light.woff';
|
|
4
|
-
import AkrobatExtraLight from '../fonts/Akrobat-ExtraLight.woff';
|
|
5
|
-
import AkrobatSemiBold from '../fonts/Akrobat-SemiBold.woff';
|
|
6
|
-
import AkrobatBold from '../fonts/Akrobat-Bold.woff';
|
|
7
|
-
import AkrobatExtraBold from '../fonts/akrobat-extrabold-webfont.woff';
|
|
8
|
-
import AkrobatBlack from '../fonts/Akrobat-Black.woff';
|
|
9
|
-
import RedDead from '../fonts/RedDead.otf';
|
|
10
|
-
|
|
11
|
-
// ✅ Resolve URLs relative to the built module (not the page root)
|
|
12
|
-
function resolveFontUrl(fontPath: string): string {
|
|
13
|
-
try {
|
|
14
|
-
// When bundled by Vite or tsup, import.meta.url points to the dist/styles/fonts.js file.
|
|
15
|
-
// This creates a correct absolute URL under /@fs/... in dev or /assets/... in build.
|
|
16
|
-
return new URL(fontPath, import.meta.url).href;
|
|
17
|
-
} catch {
|
|
18
|
-
// fallback for environments without import.meta.url support
|
|
19
|
-
return fontPath;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const fontDefs = [
|
|
24
|
-
{ name: 'Akrobat Regular', src: AkrobatRegular },
|
|
25
|
-
{ name: 'Akrobat Light', src: AkrobatLight },
|
|
26
|
-
{ name: 'Akrobat ExtraLight', src: AkrobatExtraLight },
|
|
27
|
-
{ name: 'Akrobat SemiBold', src: AkrobatSemiBold },
|
|
28
|
-
{ name: 'Akrobat Bold', src: AkrobatBold },
|
|
29
|
-
{ name: 'Akrobat ExtraBold Regular', src: AkrobatExtraBold },
|
|
30
|
-
{ name: 'Akrobat Black', src: AkrobatBlack },
|
|
31
|
-
{ name: 'Red Dead', src: RedDead },
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
for (const f of fontDefs) {
|
|
35
|
-
const url = resolveFontUrl(f.src);
|
|
36
|
-
console.log(`Loading font: ${f.name} from ${url}`);
|
|
37
|
-
|
|
38
|
-
const font = new FontFace(f.name, `url(${url})`);
|
|
39
|
-
font
|
|
40
|
-
.load()
|
|
41
|
-
.then(() => {
|
|
42
|
-
document.fonts.add(font);
|
|
43
|
-
console.log(`✅ Loaded: ${f.name}`);
|
|
44
|
-
})
|
|
45
|
-
.catch((err) => console.error(`❌ Failed: ${f.name}`, err));
|
|
46
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|