├── stories ├── assets │ ├── .git.keep │ └── data.ts ├── base.stories.mdx ├── plugin.stories.mdx ├── force.css ├── knowledge.stories.mdx ├── plugin.tsx ├── Introduction.stories.mdx ├── force.tsx └── plugin.stories.tsx ├── packages ├── graphs │ ├── src │ │ ├── force │ │ │ ├── layout │ │ │ │ ├── index.ts │ │ │ │ └── force.ts │ │ │ ├── index.ts │ │ │ ├── plugins │ │ │ │ ├── index.ts │ │ │ │ ├── selected-nodes-plugin.ts │ │ │ │ ├── watermark-plugin.ts │ │ │ │ └── fisheye-plugin.ts │ │ │ ├── config │ │ │ │ ├── layout.ts │ │ │ │ └── index.ts │ │ │ ├── interface │ │ │ │ ├── style.ts │ │ │ │ └── index.ts │ │ │ ├── cores │ │ │ │ └── eventemitter.ts │ │ │ ├── force.ts │ │ │ └── utils │ │ │ │ ├── index.ts │ │ │ │ ├── fisheye.ts │ │ │ │ └── math │ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── .DS_Store │ │ ├── draws │ │ │ ├── index.ts │ │ │ ├── utils │ │ │ │ ├── round-rect.ts │ │ │ │ └── ellipsis-text.ts │ │ │ ├── circle-inner-shadow.ts │ │ │ ├── round-rect-bg-label.tsx │ │ │ ├── draw-link-style.ts │ │ │ └── draw-node-style.ts │ │ └── typings.d.ts │ ├── rollup.config.mjs │ ├── tsconfig.json │ ├── .npmignore │ └── package.json ├── g-plugins │ ├── src │ │ └── index.ts │ ├── rollup.config.mjs │ ├── tsconfig.json │ ├── .npmignore │ └── package.json └── mock │ ├── rollup.config.mjs │ ├── tsconfig.json │ ├── .npmignore │ └── package.json ├── docs ├── scripts │ ├── build.ts │ ├── watch.ts │ ├── mdx │ │ ├── rehype-highlight-word.js │ │ ├── remark-plugin-parser.js │ │ ├── rehype-meta-attribute.js │ │ ├── rehype-highlight-code.js │ │ └── rehype-highlight-line.js │ └── docs │ │ ├── frontmatter.ts │ │ ├── markdown.ts │ │ └── navigation.ts ├── public │ ├── favicon.ico │ ├── images │ │ ├── quotee │ │ │ ├── arzafran.png │ │ │ ├── no_name.jpeg │ │ │ ├── bruno_lemos.jpeg │ │ │ ├── josh_w._comeau.jpeg │ │ │ ├── pierre_bertet.jpeg │ │ │ ├── ryan_florence.jpeg │ │ │ ├── varun_vachhar.jpeg │ │ │ ├── ives_van_hoorne.jpeg │ │ │ ├── alex_stanislawski.jpeg │ │ │ └── alexander_prinzhorn.jpeg │ │ └── icons │ │ │ ├── ArrowSquareOutBlue.png │ │ │ └── ArrowSquareOutRed.png │ ├── manifest.json │ ├── icon-link.svg │ └── favicon.svg ├── remix.env.d.ts ├── app │ ├── helpers │ │ ├── guards.ts │ │ ├── strings.ts │ │ ├── links.ts │ │ ├── analytics.ts │ │ └── navigation.ts │ ├── routes │ │ ├── docs │ │ │ ├── plugins │ │ │ │ ├── index.mdx │ │ │ │ ├── gorgeous-node.mdx │ │ │ │ ├── brush-select.mdx │ │ │ │ ├── selected-nodes.mdx │ │ │ │ ├── three-scene.mdx │ │ │ │ ├── watermark.mdx │ │ │ │ └── fisheye.mdx │ │ │ ├── instance.mdx │ │ │ ├── index.mdx │ │ │ ├── getting-started.mdx │ │ │ └── config.mdx │ │ ├── examples.tsx │ │ └── index.tsx │ ├── entry.client.tsx │ ├── hooks │ │ ├── useIsDarkTheme.ts │ │ ├── useIsomorphicEffect.ts │ │ ├── useStickyHeader.ts │ │ ├── useWindowSize.ts │ │ ├── useAnimatedHeader.ts │ │ └── useWindowScrolling.ts │ ├── components │ │ ├── Widgets │ │ │ ├── WidgetPlausible.tsx │ │ │ ├── WidgetSearch.tsx │ │ │ └── WidgetTheme.tsx │ │ ├── HomeBlocks │ │ │ ├── HomeBlockSection.tsx │ │ │ ├── HomeBlockCopy.tsx │ │ │ └── HomeBlockImperative.tsx │ │ ├── InlineLink.tsx │ │ ├── Code │ │ │ ├── LivePreviewDeps.ts │ │ │ ├── H.tsx │ │ │ ├── Code.tsx │ │ │ ├── Pre.tsx │ │ │ └── LivePreviewStyles.ts │ │ ├── Text │ │ │ ├── GradientHeader.tsx │ │ │ ├── Copy.tsx │ │ │ ├── Anchor.tsx │ │ │ ├── List.tsx │ │ │ └── Heading.tsx │ │ ├── Fields │ │ │ └── FieldCode.tsx │ │ ├── AccessibleIcon.tsx │ │ ├── Asides │ │ │ └── StickyAside.tsx │ │ ├── AspectRatio.tsx │ │ ├── Buttons │ │ │ ├── GradientButton.tsx │ │ │ ├── Button.tsx │ │ │ ├── ButtonCopy.tsx │ │ │ └── NavButton.tsx │ │ ├── Header │ │ │ ├── HeaderSubNavigation.tsx │ │ │ ├── HeaderNavigation.tsx │ │ │ ├── HeaderSubnav.tsx │ │ │ └── HeaderSidePanel.tsx │ │ ├── Menu │ │ │ └── MenuSticky.tsx │ │ ├── Callout.tsx │ │ ├── Site │ │ │ ├── SiteFooter.tsx │ │ │ └── SiteThemePicker.tsx │ │ ├── Tables │ │ │ ├── TablesConfig.tsx │ │ │ └── TableCell.tsx │ │ ├── Logo.tsx │ │ └── Carousels │ │ │ └── CarouselQuotes.tsx │ ├── data │ │ ├── subnavSchema.generated.json │ │ └── navigationSchema.generated.json │ ├── entry.server.tsx │ ├── styles │ │ └── fontStyles.ts │ └── root.tsx ├── .eslintrc ├── .env.template ├── server.js ├── custom.d.ts ├── env.d.ts ├── tsconfig.json ├── remix.config.js └── package.json ├── lerna.json ├── .parcelrc ├── .vscode ├── extensions.json └── settings.json ├── .storybook ├── manager.js ├── preview.cjs └── main.cjs ├── .npmignore ├── .prettierrc ├── .gitignore ├── rollup.config.js ├── .eslintrc.cjs ├── patches └── @remix-run+dev+1.7.5.patch ├── LICENSE └── package.json /stories/assets/.git.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/graphs/src/force/layout/index.ts: -------------------------------------------------------------------------------- 1 | export * from './force'; 2 | -------------------------------------------------------------------------------- /docs/scripts/build.ts: -------------------------------------------------------------------------------- 1 | import { buildDocs } from './docs/docs' 2 | 3 | buildDocs() 4 | -------------------------------------------------------------------------------- /docs/scripts/watch.ts: -------------------------------------------------------------------------------- 1 | import { watchDocs } from './docs/docs' 2 | 3 | watchDocs() 4 | -------------------------------------------------------------------------------- /packages/graphs/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './force'; 2 | export * from './draws'; 3 | -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/favicon.ico -------------------------------------------------------------------------------- /packages/graphs/src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/packages/graphs/src/.DS_Store -------------------------------------------------------------------------------- /docs/remix.env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /packages/g-plugins/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './cores/gorgeous-node-plugin'; 2 | export * from './cores/three-scene-plugin' -------------------------------------------------------------------------------- /docs/app/helpers/guards.ts: -------------------------------------------------------------------------------- 1 | export const isStringGuard = (value: unknown): value is string => 2 | typeof value === 'string' 3 | -------------------------------------------------------------------------------- /docs/public/images/quotee/arzafran.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/arzafran.png -------------------------------------------------------------------------------- /docs/public/images/quotee/no_name.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/no_name.jpeg -------------------------------------------------------------------------------- /packages/graphs/rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import config from '../../rollup.config.js'; 2 | 3 | export default { 4 | ...config 5 | }; 6 | -------------------------------------------------------------------------------- /docs/public/images/quotee/bruno_lemos.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/bruno_lemos.jpeg -------------------------------------------------------------------------------- /docs/public/images/quotee/josh_w._comeau.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/josh_w._comeau.jpeg -------------------------------------------------------------------------------- /docs/public/images/quotee/pierre_bertet.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/pierre_bertet.jpeg -------------------------------------------------------------------------------- /docs/public/images/quotee/ryan_florence.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/ryan_florence.jpeg -------------------------------------------------------------------------------- /docs/public/images/quotee/varun_vachhar.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/varun_vachhar.jpeg -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "node_modules/lerna/schemas/lerna-schema.json", 3 | "useWorkspaces": true, 4 | "version": "0.0.0" 5 | } 6 | -------------------------------------------------------------------------------- /docs/app/routes/docs/plugins/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | meta: 3 | title: Plugins 插件 | @aoviz/graphs 4 | sidebar_position: 5 5 | noPage: true 6 | --- 7 | -------------------------------------------------------------------------------- /docs/public/images/icons/ArrowSquareOutBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/icons/ArrowSquareOutBlue.png -------------------------------------------------------------------------------- /docs/public/images/icons/ArrowSquareOutRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/icons/ArrowSquareOutRed.png -------------------------------------------------------------------------------- /docs/public/images/quotee/ives_van_hoorne.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/ives_van_hoorne.jpeg -------------------------------------------------------------------------------- /.parcelrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@parcel/config-default", 3 | "transformers": { 4 | "*.{ts,tsx}": ["@parcel/transformer-typescript-tsc"] 5 | } 6 | } -------------------------------------------------------------------------------- /docs/public/images/quotee/alex_stanislawski.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/alex_stanislawski.jpeg -------------------------------------------------------------------------------- /docs/public/images/quotee/alexander_prinzhorn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aoviz-Team/graphs/HEAD/docs/public/images/quotee/alexander_prinzhorn.jpeg -------------------------------------------------------------------------------- /docs/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@studiocompanion/eslint-config"], 3 | "parserOptions": { 4 | "project": ["./docs/tsconfig.json"] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/graphs/src/force/index.ts: -------------------------------------------------------------------------------- 1 | export * from './force'; 2 | export * from './interface'; 3 | export * from './config'; 4 | export * from './plugins'; 5 | -------------------------------------------------------------------------------- /docs/app/entry.client.tsx: -------------------------------------------------------------------------------- 1 | import { hydrate } from 'react-dom' 2 | import { RemixBrowser } from '@remix-run/react' 3 | 4 | hydrate(, document) 5 | -------------------------------------------------------------------------------- /stories/base.stories.mdx: -------------------------------------------------------------------------------- 1 | import { Meta } from '@storybook/addon-docs'; 2 | 3 | 4 | 5 | 6 | import Force from './force'; 7 | 8 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "esbenp.prettier-vscode", 4 | "dbaeumer.vscode-eslint", 5 | "firsttris.vscode-jest-runner" 6 | ] 7 | } -------------------------------------------------------------------------------- /stories/plugin.stories.mdx: -------------------------------------------------------------------------------- 1 | import { Meta } from '@storybook/addon-docs'; 2 | 3 | 4 | 5 | 6 | import Force from './plugin'; 7 | 8 | -------------------------------------------------------------------------------- /packages/g-plugins/rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import config from '../../rollup.config.js'; 2 | 3 | export default { 4 | ...config, 5 | external: [ 6 | '@aoviz/graphs' 7 | ] 8 | }; 9 | -------------------------------------------------------------------------------- /packages/graphs/src/draws/index.ts: -------------------------------------------------------------------------------- 1 | export * from './circle-inner-shadow'; 2 | export * from './round-rect-bg-label'; 3 | export * from './draw-node-style'; 4 | export * from './draw-link-style'; 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "aoviz" 4 | ], 5 | "editor.codeActionsOnSave": { 6 | "source.fixAll.eslint": true, 7 | "source.fixAll.stylelint": true, 8 | }, 9 | } -------------------------------------------------------------------------------- /docs/.env.template: -------------------------------------------------------------------------------- 1 | # 2 | # Plausible 3 | # 4 | ENABLE_PLAUSIBLE= 5 | 6 | # 7 | # Algolia 8 | # 9 | ALGOLIA_APP_ID= 10 | ALGOLIA_API_KEY= 11 | 12 | # 13 | # Carbon 14 | # 15 | ENABLE_CARBON= -------------------------------------------------------------------------------- /.storybook/manager.js: -------------------------------------------------------------------------------- 1 | import { addons } from '@storybook/addons'; 2 | import { themes } from '@storybook/theming'; 3 | 4 | addons.setConfig({ 5 | theme: { ...themes.dark, brandTitle: 'Aoviz' }, 6 | }); 7 | -------------------------------------------------------------------------------- /docs/server.js: -------------------------------------------------------------------------------- 1 | import { createRequestHandler } from '@remix-run/vercel' 2 | import * as build from '@remix-run/dev/server-build' 3 | 4 | export default createRequestHandler({ build, mode: process.env.NODE_ENV }) 5 | -------------------------------------------------------------------------------- /stories/force.css: -------------------------------------------------------------------------------- 1 | .force-base-container { 2 | display: flex; 3 | color: #fff; 4 | } 5 | 6 | .force-base-control { 7 | flex: 0 0 200px; 8 | } 9 | 10 | .force-base-canvas { 11 | flex: 1 1 auto; 12 | } -------------------------------------------------------------------------------- /packages/graphs/src/force/plugins/index.ts: -------------------------------------------------------------------------------- 1 | export * from './plugin'; 2 | export * from './brush-select-plugin'; 3 | export * from './watermark-plugin'; 4 | export * from './fisheye-plugin'; 5 | export * from './selected-nodes-plugin'; -------------------------------------------------------------------------------- /packages/mock/rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import config from '../../rollup.config.js'; 2 | import json from '@rollup/plugin-json'; 3 | const plugins = [config.plugins, json()]; 4 | export default { 5 | ...config, 6 | plugins 7 | }; 8 | -------------------------------------------------------------------------------- /packages/g-plugins/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "noImplicitAny": false, 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | }, 8 | "include": ["src"] 9 | } 10 | -------------------------------------------------------------------------------- /docs/custom.d.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | 3 | declare global { 4 | interface Window { 5 | plausible?: (...args: unknown[]) => void 6 | _carbonads: { 7 | refresh: () => void 8 | remove: (element: HTMLElement) => void 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/mock/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "noImplicitAny": false, 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "resolveJsonModule": true 8 | }, 9 | "include": ["src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/graphs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "noImplicitAny": false, 5 | "rootDir": "src", 6 | "outDir": "dist", 7 | "typeRoots": ["./src/typings",] 8 | }, 9 | "include": ["src"] 10 | } 11 | -------------------------------------------------------------------------------- /docs/app/helpers/strings.ts: -------------------------------------------------------------------------------- 1 | export const isValidHttpUrl = (string: string) => { 2 | let url 3 | 4 | try { 5 | url = new URL(string) 6 | } catch (_) { 7 | return false 8 | } 9 | 10 | return url.protocol === 'http:' || url.protocol === 'https:' 11 | } 12 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | example 3 | src 4 | docs 5 | rollup.config.js 6 | tsconfig.json 7 | node_modules 8 | yarn.lock 9 | .vercel 10 | .parcel-cache 11 | .storybook 12 | storybook-static 13 | stories 14 | .eslintrc.cjs 15 | .gitignore 16 | .parcelrc 17 | .prettierrc 18 | yarn-error.log 19 | patches -------------------------------------------------------------------------------- /packages/mock/.npmignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | example 3 | src 4 | docs 5 | rollup.config.js 6 | tsconfig.json 7 | node_modules 8 | yarn.lock 9 | .vercel 10 | .parcel-cache 11 | .storybook 12 | storybook-static 13 | stories 14 | .eslintrc.cjs 15 | .gitignore 16 | .parcelrc 17 | .prettierrc 18 | yarn-error.log 19 | patches -------------------------------------------------------------------------------- /packages/g-plugins/.npmignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | example 3 | src 4 | docs 5 | tsconfig.json 6 | node_modules 7 | yarn.lock 8 | .vercel 9 | .parcel-cache 10 | .storybook 11 | storybook-static 12 | stories 13 | .eslintrc.cjs 14 | .gitignore 15 | .parcelrc 16 | .prettierrc 17 | yarn-error.log 18 | patches 19 | rollup.config.mjs -------------------------------------------------------------------------------- /packages/graphs/.npmignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | example 3 | src 4 | docs 5 | tsconfig.json 6 | node_modules 7 | yarn.lock 8 | .vercel 9 | .parcel-cache 10 | .storybook 11 | storybook-static 12 | stories 13 | .eslintrc.cjs 14 | .gitignore 15 | .parcelrc 16 | .prettierrc 17 | yarn-error.log 18 | patches 19 | rollup.config.mjs -------------------------------------------------------------------------------- /docs/env.d.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | 3 | declare global { 4 | export interface Window { 5 | env: { 6 | // Plausible 7 | ENABLE_PLAUSIBLE: string 8 | // Algolia 9 | ALGOLIA_APP_ID: string 10 | ALGOLIA_API_KEY: string 11 | // Carbon 12 | ENABLE_CARBON: string 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/app/hooks/useIsDarkTheme.ts: -------------------------------------------------------------------------------- 1 | import { useAtom } from 'jotai' 2 | 3 | import { themeAtom, ThemeValue } from '~/components/Site/SiteThemePicker' 4 | 5 | export const useIsDarkTheme = () => { 6 | const [theme] = useAtom(themeAtom) 7 | 8 | const isDarkMode = theme === ThemeValue.Dark 9 | 10 | return isDarkMode 11 | } 12 | -------------------------------------------------------------------------------- /.storybook/preview.cjs: -------------------------------------------------------------------------------- 1 | import { themes } from "@storybook/theming"; 2 | 3 | export const parameters = { 4 | actions: { argTypesRegex: "^on[A-Z].*" }, 5 | controls: { 6 | matchers: { 7 | color: /(background|color)$/i, 8 | date: /Date$/, 9 | }, 10 | }, 11 | docs: { 12 | theme: themes.dark 13 | } 14 | } -------------------------------------------------------------------------------- /docs/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "type": "image/x-icon" 8 | } 9 | ], 10 | "start_url": ".", 11 | "display": "standalone", 12 | "theme_color": "#000000", 13 | "background_color": "#ffffff" 14 | } 15 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 150, 3 | "singleQuote": true, 4 | "semi": true, 5 | "stylelintIntegration": true, 6 | "tabWidth": 2, 7 | "useTabs": false, 8 | "proseWrap": "never", 9 | "trailingComma": "none", 10 | "overrides": [ 11 | { 12 | "files": ".prettierrc", 13 | "options": { 14 | "parser": "json" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /docs/app/routes/docs/instance.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | meta: 3 | title: Graph 方法 | @aoviz/graphs 4 | description: 内置方法 5 | sidebar_position: 4 6 | --- 7 | 8 | ## 方法介绍 9 | 10 | 11 | import { TablesConfiguration } from '~/components/Tables/TablesConfig' 12 | import { FORCE_INSTANCE_DATA } from '~/data/force' 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/app/components/Widgets/WidgetPlausible.tsx: -------------------------------------------------------------------------------- 1 | export const WidgetPlausible = () => { 2 | if (typeof window !== 'undefined' && !window.env.ENABLE_PLAUSIBLE) { 3 | return null 4 | } 5 | 6 | return ( 7 | 70 | 76 | 79 | 80 | 81 | {children} 82 | 83 |