From 5d97a5b0409907a7549fdd288a23608b3ad7f808 Mon Sep 17 00:00:00 2001 From: bryantgillespie Date: Tue, 2 Jun 2026 12:25:57 -0400 Subject: [PATCH] Switch site icons to Lucide --- app/app.config.ts | 24 ++++++------- app/components/CopyDocButton.vue | 10 +++--- app/components/DocsBanner.vue | 4 +-- app/components/DocsSearchPalette.vue | 30 ++++++++-------- app/components/DocsSearchPreview.vue | 4 +-- app/components/DocsSearchTrigger.vue | 2 +- app/components/DocsToc.vue | 2 +- app/components/DocsTocFeedback.vue | 6 ++-- app/components/FrameworkLinkList.vue | 2 +- app/components/HomeHero.vue | 6 ++-- app/components/HomePersonalized.vue | 26 +++++++------- app/components/InlinePersonalize.vue | 4 +-- app/components/MobileNavSectionSwitcher.vue | 2 +- app/components/PersonalizeIdleCta.vue | 6 ++-- app/components/SettingsDrawer.vue | 10 +++--- app/components/SettingsDrawerTrigger.vue | 2 +- app/components/TutorialsCategory.vue | 2 +- app/components/content/AgentPrompt.vue | 6 ++-- app/components/content/Chat.vue | 6 ++-- app/components/content/DocCliSnippet.vue | 2 +- app/components/content/Example.vue | 2 +- app/components/content/HomeFeatures.vue | 12 +++---- app/components/content/VideoEmbed.vue | 2 +- app/composables/useSectionLinks.ts | 10 +++--- app/layouts/docs.vue | 2 +- app/pages/[...slug].vue | 8 ++--- app/pages/frameworks/index.vue | 4 +-- app/pages/tutorials/[category]/[...slug].vue | 8 ++--- app/pages/tutorials/[category]/index.vue | 4 +-- app/pages/tutorials/index.vue | 4 +-- app/utils/deployments.ts | 4 +-- app/utils/experience.ts | 6 ++-- app/utils/libraries.ts | 2 +- app/utils/roles.ts | 4 +-- app/utils/useCases.ts | 14 ++++---- content/_partials/authentication.md | 2 +- content/_partials/config-env-vars.md | 2 +- .../_partials/deployment-public-instance.md | 2 +- .../extension-hook-system-collections.md | 2 +- content/_partials/extensions-api-internals.md | 2 +- content/_partials/extensions-app-internals.md | 6 ++-- content/_partials/extensions-theme.md | 2 +- content/_partials/extensions-uid.md | 2 +- content/_partials/license.md | 2 +- .../cloud/1.getting-started/1.introduction.md | 4 +-- content/cloud/1.getting-started/2.teams.md | 10 +++--- content/cloud/1.getting-started/3.accounts.md | 4 +-- content/cloud/2.projects/2.destroy.md | 2 +- .../cloud/2.projects/3.version-upgrades.md | 2 +- .../2.environment-variables.md | 4 +-- .../cloud/4.billing/3.cancel-subscription.md | 2 +- .../community/3.codebase/2.dev-environment.md | 6 ++-- content/community/3.codebase/3.testing.md | 2 +- content/configuration/1.general.md | 4 +-- content/configuration/ai.md | 8 ++--- content/configuration/auth-sso.md | 16 ++++----- content/configuration/cache.md | 6 ++-- content/configuration/database.md | 2 +- content/configuration/extensions.md | 4 +-- content/configuration/files.md | 6 ++-- content/configuration/flows.md | 2 +- content/configuration/logging.md | 2 +- content/configuration/metrics.md | 2 +- content/configuration/migrations.md | 2 +- content/configuration/realtime.md | 6 ++-- content/configuration/security-limits.md | 4 +-- content/configuration/theming.md | 4 +-- content/frameworks/.navigation.yml | 2 +- .../frameworks/01.nextjs/01.data-fetching.md | 2 +- .../08.live-preview-content-versioning.md | 2 +- .../frameworks/03.astro/01.data-fetching.md | 2 +- .../04.sveltekit/01.data-fetching.md | 6 ++-- .../frameworks/06.angular/01.data-fetching.md | 4 +-- .../frameworks/09.flask/01.data-fetching.md | 6 ++-- .../14.eleventy/01.data-fetching.md | 2 +- .../15.solidstart/01.data-fetching.md | 4 +-- content/getting-started/1.overview.md | 2 +- content/getting-started/2.create-a-project.md | 6 ++-- content/getting-started/4.use-the-api.md | 8 ++--- .../getting-started/5.authenticate-user.md | 4 +-- content/getting-started/6.upload-files.md | 4 +-- content/getting-started/9.resources.md | 36 +++++++++---------- content/guides/01.data-model/1.collections.md | 18 +++++----- content/guides/01.data-model/2.fields.md | 12 +++---- content/guides/01.data-model/3.interfaces.md | 12 +++---- .../guides/01.data-model/4.relationships.md | 8 ++--- content/guides/02.content/2.editor.md | 10 +++--- content/guides/02.content/3.layouts.md | 8 ++--- content/guides/02.content/4.import-export.md | 6 ++-- content/guides/02.content/5.live-preview.md | 4 +-- .../guides/02.content/6.content-versioning.md | 18 +++++----- content/guides/02.content/7.translations.md | 12 +++---- .../8.visual-editor/1.frontend-library.md | 16 ++++----- .../8.visual-editor/2.studio-module.md | 6 ++-- .../9.collaborative-editing/0.index.md | 8 ++--- .../1.configuration.md | 2 +- content/guides/03.auth/1.tokens-cookies.md | 6 ++-- content/guides/03.auth/2.access-control.md | 6 ++-- content/guides/03.auth/3.creating-users.md | 10 +++--- content/guides/03.auth/4.email-login.md | 8 ++--- content/guides/03.auth/6.accountability.md | 2 +- content/guides/03.auth/7.sso/1.index.md | 6 ++-- content/guides/03.auth/7.sso/2.seamless.md | 4 +-- content/guides/04.connect/1.authentication.md | 2 +- .../guides/04.connect/3.query-parameters.md | 18 +++++----- content/guides/04.connect/5.errors.md | 4 +-- content/guides/04.connect/6.sdk.md | 16 ++++----- .../04.connect/7.json/2.advanced-querying.md | 16 ++++----- content/guides/05.files/1.upload.md | 4 +-- content/guides/05.files/3.manage.md | 6 ++-- content/guides/05.files/4.access.md | 2 +- content/guides/05.files/5.transform.md | 4 +-- content/guides/06.flows/3.triggers.md | 14 ++++---- content/guides/06.flows/4.operations.md | 26 +++++++------- content/guides/06.flows/index.md | 6 ++-- content/guides/07.realtime/2.subscriptions.md | 2 +- content/guides/07.realtime/3.actions.md | 2 +- .../guides/07.realtime/4.custom-handlers.md | 6 ++-- content/guides/08.insights/1.overview.md | 2 +- content/guides/08.insights/2.panels.md | 14 ++++---- content/guides/09.extensions/0.overview.md | 2 +- content/guides/09.extensions/1.quickstart.md | 2 +- .../09.extensions/2.api-extensions/1.hooks.md | 6 ++-- .../2.api-extensions/2.endpoints.md | 2 +- .../2.api-extensions/3.operations.md | 4 +-- .../2.api-extensions/4.services.md | 14 ++++---- .../3.app-extensions/5.modules.md | 2 +- .../3.app-extensions/6.themes.md | 2 +- .../3.app-extensions/7.ui-library.md | 4 +-- .../09.extensions/5.marketplace/0.index.md | 4 +-- .../5.marketplace/1.publishing.md | 2 +- content/guides/09.extensions/6.cli.md | 8 ++--- content/guides/11.ai/0.index.md | 6 ++-- content/guides/11.ai/1.assistant/0.index.md | 14 ++++---- content/guides/11.ai/1.assistant/1.setup.md | 34 +++++++++--------- content/guides/11.ai/1.assistant/2.usage.md | 16 ++++----- content/guides/11.ai/1.assistant/3.tools.md | 12 +++---- content/guides/11.ai/1.assistant/4.tips.md | 6 ++-- .../guides/11.ai/1.assistant/5.security.md | 8 ++--- content/guides/11.ai/2.mcp/0.index.md | 18 +++++----- content/guides/11.ai/2.mcp/1.installation.md | 18 +++++----- content/guides/11.ai/2.mcp/3.tools.md | 4 +-- content/guides/11.ai/2.mcp/4.prompts.md | 4 +-- content/guides/11.ai/2.mcp/6.oauth.md | 2 +- content/guides/11.ai/2.mcp/7.security.md | 4 +-- .../guides/11.ai/2.mcp/8.local-mcp/0.index.md | 4 +-- .../guides/11.ai/2.mcp/8.local-mcp/1.tools.md | 2 +- .../11.ai/2.mcp/8.local-mcp/2.prompts.md | 4 +-- .../guides/12.integrations/1.n8n/0.index.md | 8 ++--- .../1.n8n/directus-n8n-actions.md | 4 +-- .../1.n8n/directus-n8n-advanced.md | 8 ++--- .../1.n8n/directus-n8n-triggers.md | 4 +-- .../use-clay-templates-with-directus.md | 2 +- .../12.integrations/3.zapier/0.index.md | 4 +-- .../12.integrations/3.zapier/actions.md | 14 ++++---- .../12.integrations/3.zapier/advanced.md | 4 +-- .../12.integrations/3.zapier/triggers.md | 2 +- .../12.integrations/4.vercel/0.index.md | 6 ++-- .../12.integrations/5.netlify/0.index.md | 6 ++-- .../12.integrations/6.framer/0.index.md | 2 +- .../guides/13.security/1.best-practices.md | 6 ++-- content/index.md | 18 +++++----- content/licensing/1.overview.md | 12 +++---- content/mcp-help.md | 2 +- content/releases/0.index.md | 8 ++--- .../3.breaking-changes/1.version-10.md | 16 ++++----- .../3.breaking-changes/2.version-11.md | 4 +-- .../3.breaking-changes/3.version-12.md | 2 +- content/self-hosting/1.overview.md | 2 +- content/self-hosting/2.requirements.md | 2 +- content/self-hosting/3.deploying.md | 6 ++-- ...e-blocks-with-many-to-any-relationships.md | 8 ++--- .../advanced-types-with-the-directus-sdk.md | 6 ++-- .../migrate-from-wordpress-to-directus.md | 4 +-- ...hanges-between-environments-in-directus.md | 2 +- .../check-permissions-in-a-custom-endpoint.md | 2 +- ...reate-collection-items-in-custom-panels.md | 4 +-- ...ew-customers-in-stripe-in-a-custom-hook.md | 2 +- ...l-api-data-from-vonage-in-custom-panels.md | 2 +- ...mat-dates-in-a-custom-display-extension.md | 2 +- ...-navigation-in-multipage-custom-modules.md | 10 +++--- ...rnal-api-in-a-custom-endpoint-extension.md | 4 +-- .../read-collection-data-in-custom-layouts.md | 4 +-- ...ssages-with-twilio-in-custom-operations.md | 2 +- ...s-messages-with-twilio-in-custom-panels.md | 2 +- ...nal-items-in-a-custom-display-extension.md | 2 +- ...stand-available-slots-in-custom-modules.md | 10 +++--- .../use-npm-packages-in-custom-operations.md | 2 +- ...ne-numbers-with-twilio-in-a-custom-hook.md | 2 +- .../deploy-directus-to-an-ubuntu-server.md | 8 ++--- .../deploy-directus-to-aws-ec2.md | 2 +- .../deploy-directus-to-azure-web-apps.md | 6 ++-- .../deploy-directus-to-digital-ocean.md | 2 +- ...eploy-directus-to-google-cloud-platform.md | 6 ++-- .../deploy-directus-to-railway.md | 2 +- content/tutorials/6.self-hosting/index.md | 4 +-- ...roval-workflows-with-custom-permissions.md | 4 +-- ...te-github-issues-with-directus-automate.md | 2 +- ...ata-with-clearbit-and-directus-automate.md | 2 +- ...pts-with-deepgram-and-directus-automate.md | 2 +- ...ent-workflows-with-inngest-and-directus.md | 2 +- ...e-future-content-with-directus-automate.md | 6 ++-- ...lify-site-builds-with-directus-automate.md | 4 +-- ...rcel-site-builds-with-directus-automate.md | 4 +-- nuxt.config.ts | 2 +- package.json | 3 +- pnpm-lock.yaml | 22 ++++-------- shared/utils/docsSections.ts | 30 ++++++++-------- 208 files changed, 653 insertions(+), 664 deletions(-) diff --git a/app/app.config.ts b/app/app.config.ts index 7d8b27f3..cab43c92 100644 --- a/app/app.config.ts +++ b/app/app.config.ts @@ -134,7 +134,7 @@ export default defineAppConfig({ { label: 'Security', to: '/guides/security/best-practices', - icon: 'material-symbols:verified-user-outline', + icon: 'i-lucide-shield-check', }, { label: 'AI', @@ -154,12 +154,12 @@ export default defineAppConfig({ { label: 'Cloud', to: '/cloud/getting-started/introduction', - icon: 'material-symbols:cloud-outline', + icon: 'i-lucide-cloud', }, { label: 'Self-Hosting', to: '/self-hosting/overview', - icon: 'material-symbols:dns-outline', + icon: 'i-lucide-server', }, ], }, @@ -173,22 +173,22 @@ export default defineAppConfig({ { label: 'Frameworks', to: '/frameworks', - icon: 'material-symbols:data-object', + icon: 'i-lucide-braces', }, { label: 'Tutorials', to: '/tutorials', - icon: 'material-symbols:article-outline', + icon: 'i-lucide-file-text', }, { label: 'Community', to: '/community/overview/welcome', - icon: 'material-symbols:volunteer-activism-outline', + icon: 'i-lucide-heart-handshake', }, { label: 'Releases', to: '/releases', - icon: 'material-symbols:menu-book-outline', + icon: 'i-lucide-book-open', }, ], }, @@ -223,7 +223,7 @@ export default defineAppConfig({ // Has "edit page" dynamically added in the first position in DocsTocAuthors.vue links: [ { - icon: 'material-symbols:star-outline', + icon: 'i-lucide-star', label: 'Star on GitHub', to: 'https://github.com/directus/directus', }, @@ -250,22 +250,22 @@ export default defineAppConfig({ preFooter: { links: [ { - icon: 'ic:baseline-support', + icon: 'i-lucide-headset', label: 'Need help? Contact Support.', to: 'https://directus.com/support', }, { - icon: 'ic:baseline-people-alt', + icon: 'i-lucide-users', label: 'Join our Community Platform.', to: 'https://community.directus.io', }, { - icon: 'ic:baseline-rocket-launch', + icon: 'i-lucide-rocket', label: 'Check out our product changelog.', to: '/releases/changelog', }, { - icon: 'ic:outline-help-outline', + icon: 'i-lucide-circle-question-mark', label: 'Need a license? Contact Sales.', to: 'https://directus.com/contact', }, diff --git a/app/components/CopyDocButton.vue b/app/components/CopyDocButton.vue index 0121f3b8..93c63166 100644 --- a/app/components/CopyDocButton.vue +++ b/app/components/CopyDocButton.vue @@ -70,12 +70,12 @@ const items = computed(() => [ [ { label: isMarkdownLinkCopied.value ? 'Copied Markdown link!' : 'Copy Markdown link', - icon: 'material-symbols:link', + icon: 'i-lucide-link', onSelect: () => copyMarkdownLink(), }, { label: 'View as Markdown', - icon: 'material-symbols:markdown-outline', + icon: 'i-lucide-file-code', external: true, onSelect: () => openExternal(markdownUrl.value), }, @@ -96,7 +96,7 @@ const items = computed(() => [ { label: isMcpUrlCopied.value ? 'Copied MCP URL!' : 'Copy MCP server URL', description: 'Use with any MCP-compatible client', - icon: 'material-symbols:link', + icon: 'i-lucide-link', onSelect: () => copyMcpUrl(), }, ...MCP_IDES.map(ide => ({ @@ -115,7 +115,7 @@ const items = computed(() => [ color="neutral" size="sm" variant="soft" - leading-icon="material-symbols:content-copy-outline" + leading-icon="i-lucide-copy" :label="isCopied ? 'Copied!' : 'Copy page'" @click="copyPage" /> @@ -128,7 +128,7 @@ const items = computed(() => [ size="sm" variant="soft" color="neutral" - icon="material-symbols:keyboard-arrow-down" + icon="i-lucide-chevron-down" /> @@ -512,7 +512,7 @@ onUnmounted(() => { class="font-mono uppercase tracking-wider" /> @@ -528,7 +528,7 @@ onUnmounted(() => { @@ -582,7 +582,7 @@ onUnmounted(() => {
@@ -605,7 +605,7 @@ onUnmounted(() => {
diff --git a/app/components/DocsSearchPreview.vue b/app/components/DocsSearchPreview.vue index 3b644647..c790bc76 100644 --- a/app/components/DocsSearchPreview.vue +++ b/app/components/DocsSearchPreview.vue @@ -21,7 +21,7 @@ const navigation = inject | null>('navigation', nul const { app } = useRuntimeConfig(); const sectionIcon = (id: DocsSearchItem['section']) => - docsSections.find(section => section.id === id)?.icon ?? 'i-ph-file-text'; + docsSections.find(section => section.id === id)?.icon ?? 'i-lucide-file-text'; const previewDisplayPath = computed(() => { const to = props.result?.to; @@ -118,7 +118,7 @@ const previewBreadcrumb = computed(() => { >
diff --git a/app/components/DocsSearchTrigger.vue b/app/components/DocsSearchTrigger.vue index 849cd0ee..7671b304 100644 --- a/app/components/DocsSearchTrigger.vue +++ b/app/components/DocsSearchTrigger.vue @@ -18,7 +18,7 @@ defineShortcuts({ @@ -322,7 +322,7 @@ const selectedUseCase = computed({ v-model="instanceUrlInput" type="url" placeholder="https://your-instance.directus.app" - icon="material-symbols:link" + icon="i-lucide-link" class="flex-1" /> Saved automatically diff --git a/app/components/SettingsDrawerTrigger.vue b/app/components/SettingsDrawerTrigger.vue index 531f47a6..a6ba36e4 100644 --- a/app/components/SettingsDrawerTrigger.vue +++ b/app/components/SettingsDrawerTrigger.vue @@ -6,7 +6,7 @@ const settings = useSettingsOverlay();
diff --git a/app/components/content/Example.vue b/app/components/content/Example.vue index 8d17c7e3..b2cef19c 100644 --- a/app/components/content/Example.vue +++ b/app/components/content/Example.vue @@ -4,7 +4,7 @@ withDefaults(defineProps<{ icon?: string; }>(), { title: 'Example', - icon: 'material-symbols:info-outline', + icon: 'i-lucide-info', }); diff --git a/app/components/content/HomeFeatures.vue b/app/components/content/HomeFeatures.vue index c5d21307..0d9851e4 100644 --- a/app/components/content/HomeFeatures.vue +++ b/app/components/content/HomeFeatures.vue @@ -1,11 +1,11 @@ diff --git a/app/components/content/VideoEmbed.vue b/app/components/content/VideoEmbed.vue index 9423c230..d7455b5f 100644 --- a/app/components/content/VideoEmbed.vue +++ b/app/components/content/VideoEmbed.vue @@ -48,7 +48,7 @@ const show = props.videoId