├── .editorconfig ├── .env.example ├── .github ├── actions │ └── prepare │ │ └── action.yml └── workflows │ ├── lint.yaml │ └── typecheck.yaml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc.js ├── app.vue ├── assets ├── css │ ├── fonts.css │ ├── global.css │ ├── main.css │ ├── tv.css │ └── vars.css ├── fonts │ ├── fira_code-400.woff │ ├── inter-italic.woff2 │ ├── inter.woff2 │ ├── material_symbols_outlined.woff2 │ ├── poppins-300.woff2 │ ├── poppins-400.woff2 │ ├── poppins-600.woff2 │ ├── poppins-700.woff2 │ └── signature.woff2 ├── shiki │ ├── directus-dark.json │ └── directus-light.json └── svg │ ├── gradient.svg │ ├── logo-dark.svg │ ├── logo-light.svg │ ├── logo-tv-white.svg │ ├── logomark-white.svg │ ├── placeholder-avatar.svg │ ├── social │ ├── dev-to.svg │ ├── discord.svg │ ├── docker.svg │ ├── github.svg │ ├── linkedin.svg │ ├── mastodon.svg │ ├── npm.svg │ ├── reddit.svg │ ├── twitter.svg │ ├── website.svg │ ├── x.svg │ └── youtube.svg │ ├── star.svg │ └── waves.svg ├── components ├── Art │ └── Lines.vue ├── Base │ ├── Badge.vue │ ├── Block.vue │ ├── Button.vue │ ├── ButtonGroup.vue │ ├── Byline.vue │ ├── Card.vue │ ├── CardGroup.vue │ ├── CheckboxGroup.vue │ ├── CircularProgress.vue │ ├── CliSnippet.vue │ ├── CodeSnippet.vue │ ├── Container.vue │ ├── DirectusImage.vue │ ├── DirectusVideo.vue │ ├── Divider.vue │ ├── FormGroup.vue │ ├── Gallery.vue │ ├── Heading.vue │ ├── HsForm.vue │ ├── Icon.vue │ ├── Input.vue │ ├── Media.vue │ ├── Modal.vue │ ├── Pagination.vue │ ├── Panel.vue │ ├── Quote.vue │ ├── SlideIndicator.vue │ ├── Text.vue │ ├── TypeForm.vue │ └── Video.vue ├── Block │ ├── Accordion.vue │ ├── AccordionGroup.vue │ ├── Button.vue │ ├── ButtonGroup.vue │ ├── Card.vue │ ├── CardGroup.vue │ ├── CardGroupDynamic.vue │ ├── Carousel │ │ ├── Carousel.vue │ │ └── CarouselCard.vue │ ├── Code.vue │ ├── Columns.vue │ ├── Cta.vue │ ├── Directory.vue │ ├── Form.vue │ ├── Header.vue │ ├── LogoCloud.vue │ ├── MasonryGrid │ │ ├── MasonryGrid.vue │ │ └── MasonryGridCard.vue │ ├── Media.vue │ ├── Metric.vue │ ├── MetricGroup.vue │ ├── PageNav.vue │ ├── Paper.vue │ ├── Quote.vue │ ├── ResourceSlider.vue │ ├── RichText.vue │ ├── Separator.vue │ ├── Showcase.vue │ ├── Signature.vue │ ├── Table.vue │ ├── TestimonialSlider.vue │ ├── Tier.vue │ ├── TierGroup.vue │ ├── WallOfLove │ │ ├── Testimonial.vue │ │ └── WallOfLove.vue │ └── types.ts ├── Carousel │ ├── Carousel.vue │ ├── CarouselContent.vue │ ├── CarouselControls.vue │ ├── CarouselDots.vue │ ├── CarouselItem.vue │ ├── interface.ts │ └── useCarousel.ts ├── LogoDoubleTicker.vue ├── LogoGrid.vue ├── LogoTicker.vue ├── LogoTitle.vue ├── Nav │ ├── Banner.vue │ ├── Footer.vue │ └── Header.vue ├── NotFound.vue ├── OgImage │ └── Default.vue ├── PageBuilder.vue ├── PageSection.vue ├── ResourcePage.vue ├── Templates │ ├── TemplatesActions.vue │ └── TemplatesTitle.vue ├── ThemeProvider.vue └── Tv │ ├── TVByline.vue │ ├── TVCategory.vue │ ├── TVEpisode.vue │ ├── TVHero.vue │ ├── TVNavigation.vue │ ├── TVReactions.vue │ └── TVShow.vue ├── composables ├── useDirectory.ts ├── useHeaderHeight.ts ├── useSlider.ts ├── useTheme.ts └── useVisualEditing.ts ├── error.vue ├── eslint.config.mjs ├── layouts ├── blank.vue ├── default.vue └── tv.vue ├── middleware └── experiments.global.ts ├── modules ├── posthog │ ├── index.ts │ └── runtime │ │ ├── components │ │ └── PostHogFeatureFlag.vue │ │ ├── composables │ │ └── usePostHogFeatureFlag.ts │ │ ├── directives │ │ └── v-capture.ts │ │ ├── plugins │ │ ├── directives.ts │ │ ├── posthog.client.ts │ │ └── posthog.server.ts │ │ └── types │ │ ├── directives.d.ts │ │ └── index.d.ts ├── prerender.ts └── redirects.ts ├── nuxt.config.ts ├── package.json ├── pages ├── [...permalink].vue ├── agency-directory │ └── [slug].vue ├── blog │ └── [slug].vue ├── built-with-directus │ └── [slug].vue ├── case-studies │ └── [slug].vue ├── creators │ └── [slug].vue ├── features │ └── [slug].vue ├── team │ └── [slug].vue ├── templates │ └── [slug].vue ├── tv │ ├── [show] │ │ ├── [episode].vue │ │ └── index.vue │ ├── all.vue │ ├── index.vue │ └── live.vue └── videos │ └── [slug].vue ├── plugins ├── directus.ts ├── links.ts └── tv.ts ├── pnpm-lock.yaml ├── public ├── _redirects ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── favicon.svg ├── images │ └── logo-dark.svg ├── mstile-144x144.png ├── mstile-150x150.png ├── mstile-310x150.png ├── mstile-310x310.png ├── mstile-70x70.png ├── og-image.png ├── robots.txt └── safari-pinned-tab.svg ├── readme.md ├── server ├── api │ └── code-highlighter.post.ts ├── routes │ └── rss.xml.ts └── tsconfig.json ├── tsconfig.json ├── types └── schema │ ├── blocks │ ├── block-accordion-group.ts │ ├── block-accordion.ts │ ├── block-button-group.ts │ ├── block-button.ts │ ├── block-card-group-dynamic.ts │ ├── block-card-group.ts │ ├── block-card.ts │ ├── block-carousel-cards.ts │ ├── block-carousel.ts │ ├── block-code.ts │ ├── block-columns.ts │ ├── block-cta.ts │ ├── block-directory.ts │ ├── block-form.ts │ ├── block-header.ts │ ├── block-logo-cloud.ts │ ├── block-masonry-grid-card.ts │ ├── block-masonry-grid.ts │ ├── block-media.ts │ ├── block-metric-group.ts │ ├── block-metric.ts │ ├── block-page-nav.ts │ ├── block-paper.ts │ ├── block-quote.ts │ ├── block-resource-slider.ts │ ├── block-rich-text.ts │ ├── block-separator.ts │ ├── block-showcase.ts │ ├── block-signature.ts │ ├── block-table.ts │ ├── block-testimonial-slider.ts │ ├── block-tier-group.ts │ ├── block-tier.ts │ ├── block-wall-of-love.ts │ ├── block.ts │ └── index.ts │ ├── content │ ├── agency-partner.ts │ ├── developer-article.ts │ ├── event.ts │ ├── feature.ts │ ├── form.ts │ ├── index.ts │ ├── marketplace.ts │ ├── resource.ts │ ├── site-banner.ts │ ├── team.ts │ ├── testimonials.ts │ └── video.ts │ ├── index.ts │ ├── meta │ ├── experiment.ts │ ├── globals.ts │ ├── index.ts │ ├── navigation.ts │ ├── redirect.ts │ └── seo.ts │ ├── routes │ ├── content-type.ts │ ├── index.ts │ └── page.ts │ ├── schema.ts │ └── system │ ├── file.ts │ ├── folder.ts │ ├── index.ts │ ├── role.ts │ └── user.ts └── utils ├── dates.ts ├── easeInCirc.ts ├── easeInOutCirc.ts ├── easeOutCirc.ts ├── og.ts ├── randomInteger.ts ├── range.ts ├── resourcePermalink.ts ├── slugify.ts ├── social.ts ├── truncateString.ts └── userName.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root=true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | charset = utf-8 7 | indent_style = tab 8 | trim_trailing_whitespace = true 9 | 10 | [*.{yml,yaml}] 11 | indent_style = space -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | DIRECTUS_URL="https://your-instance.directus.app" 2 | DIRECTUS_TV_URL="https://your-instance.directus.app" 3 | NUXT_PUBLIC_SCRIPTS_GOOGLE_TAG_MANAGER_ID="GTM-PTLT3GH" 4 | NUXT_PUBLIC_SITE_URL=https://directus.io 5 | NUXT_PUBLIC_ENABLE_VISUAL_EDITING=true 6 | POSTHOG_API_KEY="phc_project_api_key" 7 | POSTHOG_API_HOST="https://us.i.posthog.com" 8 | -------------------------------------------------------------------------------- /.github/actions/prepare/action.yml: -------------------------------------------------------------------------------- 1 | name: Prepare 2 | description: Install and build the app 3 | inputs: 4 | registry: 5 | description: NPM registry to set up for auth 6 | required: false 7 | 8 | runs: 9 | using: 'composite' 10 | steps: 11 | - name: Install Node.js 12 | uses: actions/setup-node@v4 13 | with: 14 | node-version: 20 15 | registry-url: ${{ inputs.registry }} 16 | 17 | - uses: pnpm/action-setup@v3 18 | name: Install pnpm 19 | id: pnpm-install 20 | with: 21 | run_install: false 22 | 23 | - name: Get pnpm store directory 24 | id: pnpm-cache 25 | shell: bash 26 | run: | 27 | echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT 28 | 29 | - uses: actions/cache@v4 30 | name: Setup pnpm cache 31 | with: 32 | path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} 33 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 34 | restore-keys: | 35 | ${{ runner.os }}-pnpm-store- 36 | 37 | - name: Install dependencies 38 | shell: bash 39 | run: pnpm install 40 | -------------------------------------------------------------------------------- /.github/workflows/lint.yaml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | concurrency: 12 | group: lint-${{ github.ref }} 13 | cancel-in-progress: true 14 | 15 | env: 16 | NODE_OPTIONS: --max_old_space_size=6144 17 | 18 | jobs: 19 | lint: 20 | name: Lint 21 | runs-on: ubuntu-latest 22 | steps: 23 | - name: Checkout repository 24 | uses: actions/checkout@v4 25 | 26 | - name: Prepare 27 | uses: ./.github/actions/prepare 28 | 29 | - name: Run Linter 30 | run: pnpm lint 31 | -------------------------------------------------------------------------------- /.github/workflows/typecheck.yaml: -------------------------------------------------------------------------------- 1 | name: Typecheck 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | concurrency: 12 | group: typecheck-${{ github.ref }} 13 | cancel-in-progress: true 14 | 15 | env: 16 | NODE_OPTIONS: --max_old_space_size=6144 17 | 18 | jobs: 19 | typecheck: 20 | name: Typecheck 21 | runs-on: ubuntu-latest 22 | steps: 23 | - name: Checkout repository 24 | uses: actions/checkout@v4 25 | 26 | - name: Prepare 27 | uses: ./.github/actions/prepare 28 | 29 | - name: Run Typechecker 30 | run: pnpm typecheck 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .env 8 | dist 9 | .DS_Store 10 | .fleet 11 | .idea 12 | *.story.md 13 | .vscode 14 | .eslintcache 15 | .gitpod.yml 16 | # Local Netlify folder 17 | .netlify 18 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | coverage 3 | node_modules 4 | pnpm-lock.yaml 5 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | htmlWhitespaceSensitivity: 'ignore', 3 | printWidth: 120, 4 | singleQuote: true, 5 | proseWrap: 'always', 6 | }; 7 | -------------------------------------------------------------------------------- /app.vue: -------------------------------------------------------------------------------- 1 | 46 | 47 | 52 | -------------------------------------------------------------------------------- /assets/css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Signature'; 3 | src: url('~/assets/fonts/signature.woff2') format('woff2'); 4 | font-display: swap; 5 | } 6 | 7 | @font-face { 8 | font-family: 'Fira Code'; 9 | font-style: normal; 10 | font-weight: 400; 11 | font-display: swap; 12 | src: url('~/assets/fonts/fira_code-400.woff') format('woff'); 13 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 14 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 15 | } 16 | 17 | @font-face { 18 | font-family: 'Inter'; 19 | font-weight: 100 900; 20 | font-display: swap; 21 | src: url('~/assets/fonts/inter.woff2') format('woff2-variations'); 22 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 23 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 24 | } 25 | 26 | @font-face { 27 | font-family: 'Inter'; 28 | font-weight: 100 900; 29 | font-style: italic; 30 | font-display: swap; 31 | src: url('~/assets/fonts/inter-italic.woff2') format('woff2-variations'); 32 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 33 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 34 | } 35 | 36 | @font-face { 37 | font-family: 'Poppins'; 38 | font-style: normal; 39 | font-weight: 300; 40 | font-display: swap; 41 | src: url('~/assets/fonts/poppins-300.woff2') format('woff2'); 42 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 43 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 44 | } 45 | 46 | @font-face { 47 | font-family: 'Poppins'; 48 | font-style: normal; 49 | font-weight: 400; 50 | font-display: swap; 51 | src: url('~/assets/fonts/poppins-400.woff2') format('woff2'); 52 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 53 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 54 | } 55 | 56 | @font-face { 57 | font-family: 'Poppins'; 58 | font-style: normal; 59 | font-weight: 600; 60 | font-display: swap; 61 | src: url('~/assets/fonts/poppins-600.woff2') format('woff2'); 62 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 63 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 64 | } 65 | @font-face { 66 | font-family: 'Poppins'; 67 | font-style: normal; 68 | font-weight: 700; 69 | font-display: swap; 70 | src: url('~/assets/fonts/poppins-700.woff2') format('woff2'); 71 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, 72 | U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 73 | } 74 | -------------------------------------------------------------------------------- /assets/css/global.css: -------------------------------------------------------------------------------- 1 | *, 2 | *::before, 3 | *::after { 4 | box-sizing: border-box; 5 | } 6 | 7 | html { 8 | scroll-behavior: smooth; 9 | } 10 | 11 | :target { 12 | scroll-margin-top: var(--space-40); 13 | } 14 | 15 | body { 16 | margin: 0; 17 | font-family: var(--family-body); 18 | font-size: var(--font-size-base); 19 | line-height: var(--line-height-base); 20 | -webkit-font-smoothing: antialiased; 21 | font-weight: 500; 22 | } 23 | 24 | ::selection { 25 | background-color: color-mix(in srgb, transparent, var(--primary) 10%); 26 | } 27 | 28 | img, 29 | picture, 30 | video, 31 | canvas, 32 | svg { 33 | display: block; 34 | max-width: 100%; 35 | } 36 | 37 | input, 38 | textarea, 39 | button, 40 | select { 41 | font: inherit; 42 | } 43 | 44 | p { 45 | font-weight: 500; 46 | margin: 0; 47 | } 48 | 49 | h1, 50 | h2, 51 | h3, 52 | h4, 53 | h5, 54 | h6 { 55 | overflow-wrap: break-word; 56 | margin: 0; 57 | font-weight: 600; 58 | } 59 | 60 | pre, 61 | code { 62 | font-family: var(--family-code); 63 | } 64 | 65 | a { 66 | color: var(--primary); 67 | } 68 | 69 | a:not(:disabled):hover { 70 | cursor: pointer; 71 | } 72 | 73 | button { 74 | all: unset; 75 | line-height: 0; 76 | } 77 | 78 | button:focus { 79 | outline: revert; 80 | } 81 | 82 | .v-popper__inner { 83 | font-size: var(--font-size-sm); 84 | line-height: var(--line-height-sm); 85 | } 86 | -------------------------------------------------------------------------------- /assets/css/main.css: -------------------------------------------------------------------------------- 1 | @import url('fonts.css'); 2 | @import url('vars.css'); 3 | @import url('global.css'); 4 | @import url('tv.css'); 5 | -------------------------------------------------------------------------------- /assets/css/tv.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --tv-background: #0f172a; 3 | --gray: #9da6b3; 4 | } 5 | 6 | body.tv { 7 | background: var(--tv-background); 8 | color: white; 9 | } 10 | -------------------------------------------------------------------------------- /assets/css/vars.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --family-display: 'Poppins', sans-serif; 3 | --family-body: 'Inter', sans-serif; 4 | --family-code: 'Fira Code', monospace; 5 | --family-signature: 'Signature', cursive; 6 | 7 | /* Text sizes */ 8 | --font-size-xs: 0.75rem; /* 12px */ 9 | --font-size-sm: 0.875rem; /* 14px */ 10 | --font-size-base: 1rem; /* 16px */ 11 | --font-size-lg: 1.125rem; /* 18px */ 12 | --font-size-xl: 1.25rem; /* 20px */ 13 | --font-size-2xl: 1.5rem; /* 24px */ 14 | --font-size-3xl: 1.875rem; /* 30px */ 15 | --font-size-4xl: 2.5rem; /* 40px */ 16 | --font-size-5xl: 3rem; /* 48px */ 17 | --font-size-6xl: 3.75rem; /* 60px */ 18 | --font-size-7xl: 4.5rem; /* 72px */ 19 | --font-size-8xl: 6rem; /* 96px */ 20 | --font-size-9xl: 8rem; /* 128px */ 21 | 22 | --line-height-xs: 1rem; /* 16px */ 23 | --line-height-sm: 1.25rem; /* 20px */ 24 | --line-height-base: 1.5rem; /* 24px */ 25 | --line-height-lg: 1.625rem; /* 26px */ 26 | --line-height-xl: 1.75rem; /* 28px */ 27 | --line-height-2xl: 2rem; /* 32px */ 28 | --line-height-3xl: 2.5rem; /* 36px */ 29 | --line-height-4xl: 3rem; /* 40px */ 30 | --line-height-5xl: 3.5rem; /* 56px */ 31 | --line-height-6xl: 1; 32 | --line-height-7xl: 1; 33 | --line-height-8xl: 1; 34 | --line-height-9xl: 1; 35 | 36 | /* Spacing Scale */ 37 | --space-0: 0; 38 | --space-05: 0.125rem; /* 2px */ 39 | --space-1: 0.25rem; /* 4px */ 40 | --space-2: 0.5rem; /* 8px */ 41 | --space-3: 0.75rem; /* 12px */ 42 | --space-4: 1rem; /* 16px */ 43 | --space-5: 1.25rem; /* 20px */ 44 | --space-6: 1.5rem; /* 24px */ 45 | --space-7: 1.75rem; /* 28px */ 46 | --space-8: 2rem; /* 32px */ 47 | --space-9: 2.25rem; /* 36px */ 48 | --space-10: 2.5rem; /* 40px */ 49 | --space-11: 2.75rem; /* 44px */ 50 | --space-12: 3rem; /* 48px */ 51 | --space-14: 3.5rem; /* 56px */ 52 | --space-16: 4rem; /* 64px */ 53 | --space-20: 5rem; /* 80px */ 54 | --space-24: 6rem; /* 96px */ 55 | --space-28: 7rem; /* 112px */ 56 | --space-32: 8rem; /* 128px */ 57 | --space-36: 9rem; /* 144px */ 58 | --space-40: 10rem; /* 160px */ 59 | --space-44: 11rem; /* 176px */ 60 | --space-48: 12rem; /* 192px */ 61 | --space-52: 13rem; /* 208px */ 62 | --space-56: 14rem; /* 224px */ 63 | --space-60: 15rem; /* 240px */ 64 | --space-64: 16rem; /* 256px */ 65 | --space-72: 18rem; /* 288px */ 66 | --space-80: 20rem; /* 320px */ 67 | --space-96: 24rem; /* 384px */ 68 | 69 | /* Border Radius */ 70 | --rounded-none: 0; 71 | --rounded-sm: 0.125rem; /* 2px */ 72 | --rounded: 0.25rem; /* 4px */ 73 | --rounded-md: 0.375rem; /* 6px */ 74 | --rounded-lg: 0.5rem; /* 8px */ 75 | --rounded-xl: 0.75rem; /* 12px */ 76 | --rounded-2xl: 1rem; /* 16px */ 77 | --rounded-3xl: 1.5rem; /* 24px */ 78 | --rounded-full: 9999px; 79 | 80 | /* Transitions */ 81 | --ease-linear: linear; 82 | --ease-in: cubic-bezier(0.4, 0, 1, 1); 83 | --ease-out: cubic-bezier(0, 0, 0.2, 1); 84 | --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); 85 | 86 | --duration-0: 0s; 87 | --duration-75: 75ms; 88 | --duration-100: 100ms; 89 | --duration-150: 150ms; 90 | --duration-200: 200ms; 91 | --duration-300: 300ms; 92 | --duration-500: 500ms; 93 | --duration-700: 700ms; 94 | --duration-1000: 1000ms; 95 | } 96 | -------------------------------------------------------------------------------- /assets/fonts/fira_code-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/fira_code-400.woff -------------------------------------------------------------------------------- /assets/fonts/inter-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/inter-italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/inter.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/inter.woff2 -------------------------------------------------------------------------------- /assets/fonts/material_symbols_outlined.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/material_symbols_outlined.woff2 -------------------------------------------------------------------------------- /assets/fonts/poppins-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/poppins-300.woff2 -------------------------------------------------------------------------------- /assets/fonts/poppins-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/poppins-400.woff2 -------------------------------------------------------------------------------- /assets/fonts/poppins-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/poppins-600.woff2 -------------------------------------------------------------------------------- /assets/fonts/poppins-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/poppins-700.woff2 -------------------------------------------------------------------------------- /assets/fonts/signature.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/directus/website/42df550931fcd822a8d5af214441221c6d00a96f/assets/fonts/signature.woff2 -------------------------------------------------------------------------------- /assets/svg/logomark-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/svg/social/dev-to.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/svg/social/discord.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/docker.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/github.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/linkedin.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/mastodon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/svg/social/npm.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/reddit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/svg/social/twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/website.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/social/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/svg/social/youtube.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /components/Art/Lines.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 45 | 46 | 121 | -------------------------------------------------------------------------------- /components/Base/Badge.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 57 | 58 | 90 | -------------------------------------------------------------------------------- /components/Base/Block.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 57 | 58 | 71 | -------------------------------------------------------------------------------- /components/Base/ButtonGroup.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 22 | 23 | 69 | -------------------------------------------------------------------------------- /components/Base/Byline.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 21 | 22 | 58 | -------------------------------------------------------------------------------- /components/Base/CardGroup.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | 20 | 102 | -------------------------------------------------------------------------------- /components/Base/CircularProgress.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 19 | 20 | 48 | -------------------------------------------------------------------------------- /components/Base/CodeSnippet.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 27 | 28 | 53 | -------------------------------------------------------------------------------- /components/Base/Container.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 18 | 19 | 78 | -------------------------------------------------------------------------------- /components/Base/DirectusImage.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /components/Base/DirectusVideo.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /components/Base/Divider.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /components/Base/FormGroup.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 31 | 32 | 70 | -------------------------------------------------------------------------------- /components/Base/Gallery.vue: -------------------------------------------------------------------------------- 1 | 11 | 31 | 32 | 68 | -------------------------------------------------------------------------------- /components/Base/Media.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 21 | 22 | 84 | -------------------------------------------------------------------------------- /components/Base/Pagination.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 51 | 52 | 105 | -------------------------------------------------------------------------------- /components/Base/Panel.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 53 | -------------------------------------------------------------------------------- /components/Base/Quote.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 20 | 21 | 64 | -------------------------------------------------------------------------------- /components/Base/SlideIndicator.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 21 | 22 | 53 | -------------------------------------------------------------------------------- /components/Base/TypeForm.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /components/Base/Video.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 |