├── .eslintignore ├── .eslintrc.json ├── .github ├── CODEOWNERS ├── actions │ └── fetch_amplify_backend │ │ └── action.yml ├── pull_request_template.md └── workflows │ └── build.yml ├── .gitignore ├── .husky └── pre-commit ├── .vscode └── settings.json ├── LICENSE ├── NOTICE ├── README.md ├── THIRD-PARTY-NOTICES ├── amplify.yml ├── amplify ├── .config │ └── project-config.json ├── backend │ ├── api │ │ └── community │ │ │ ├── .migration-backup │ │ │ └── schema.graphql │ │ │ ├── .migration-config-backup │ │ │ └── cli.json │ │ │ ├── cli-inputs.json │ │ │ ├── parameters.json │ │ │ ├── resolvers │ │ │ └── README.md │ │ │ ├── schema.graphql │ │ │ ├── stacks │ │ │ └── CustomResources.json │ │ │ └── transform.conf.json │ ├── backend-config.json │ └── types │ │ └── amplify-dependent-resources-ref.d.ts ├── cli.json └── hooks │ └── README.md ├── build_support ├── create-temp-profile.sh └── pull-environment.sh ├── customHttp.yml ├── next-env.d.ts ├── next.config.js ├── package-lock.json ├── package.json ├── public ├── apple-touch-icon.png ├── favicon.ico ├── fonts │ ├── AmazonEmberDisplay_W_Bd.woff2 │ ├── AmazonEmberDisplay_W_He.woff2 │ ├── AmazonEmberDisplay_W_Lt.woff2 │ ├── AmazonEmberDisplay_W_Md.woff2 │ ├── AmazonEmberDisplay_W_Rg.woff2 │ ├── AmazonEmber_W_Bd.woff2 │ ├── AmazonEmber_W_BdIt.woff2 │ ├── AmazonEmber_W_He.woff2 │ ├── AmazonEmber_W_HeIt.woff2 │ ├── AmazonEmber_W_Lt.woff2 │ ├── AmazonEmber_W_LtIt.woff2 │ ├── AmazonEmber_W_Rg.woff2 │ ├── AmazonEmber_W_RgIt.woff2 │ ├── AmazonEmber_W_SBd.woff2 │ ├── AmazonEmber_W_SBdIt.woff2 │ ├── AmazonEmber_W_Th.woff2 │ └── AmazonEmber_W_ThIt.woff2 ├── images │ ├── cover_images │ │ ├── fullstack-for-frontend.png │ │ ├── membership-site.png │ │ └── swift-course.png │ ├── fullstack_for_frontend │ │ ├── actions.png │ │ ├── amplify-pull.png │ │ ├── authentication.png │ │ ├── authenticator.png │ │ ├── authorization-rules.png │ │ ├── content.png │ │ ├── delete.png │ │ ├── deployed.png │ │ ├── final-app.png │ │ ├── generate-data.png │ │ ├── get-started.png │ │ ├── host-a-web-app.png │ │ ├── note-collection.png │ │ ├── note-data-model.png │ │ ├── note-title.png │ │ ├── run-plugin.png │ │ ├── setup-data.png │ │ ├── studio-input.png │ │ ├── text-fields.png │ │ ├── theme.png │ │ ├── ui-library copy.png │ │ └── ui-library.png │ ├── membership_website │ │ ├── 1-dup-ui-kit.png │ │ ├── 1-theme-plugin.png │ │ ├── 1-ui-kit.png │ │ ├── 1-use-theme-plugin.png │ │ ├── 2-accept-theme.png │ │ ├── 2-add-auth.png │ │ ├── 2-content.png │ │ ├── 2-deploy-app.png │ │ ├── 2-generate-content-2.png │ │ ├── 2-generate-content.png │ │ ├── 2-import-figma.png │ │ ├── 2-model-data-2.png │ │ ├── 2-model-data.png │ │ ├── 2-new-app-2.png │ │ ├── 2-new-app.png │ │ ├── 2-save-components.png │ │ ├── 2-search-amplify.png │ │ ├── 2-sync-figma.png │ │ ├── 4-pull-comp.png │ │ ├── 4-run-app.png │ │ ├── 5-bind-card.png │ │ ├── 5-bind-hero.png │ │ ├── 5-bind-nav-2.png │ │ ├── 5-bind-nav-3.png │ │ ├── 5-bind-nav-4.png │ │ ├── 5-bind-nav.png │ │ ├── 5-bind-persuade.png │ │ ├── 5-bind-story.png │ │ ├── 5-create-collection-2.png │ │ ├── 5-create-collection-3.png │ │ ├── 5-create-collection.png │ │ ├── 7-client-integration.png │ │ ├── 7-create-product.png │ │ ├── 7-key.png │ │ ├── 7-product-id.png │ │ ├── 7-setup-stripe.png │ │ ├── 8-add-api.png │ │ └── 8-test-hook.png │ ├── mock_course_images │ │ ├── amplify-pull.png │ │ ├── content.png │ │ ├── delete.png │ │ ├── final-app.png │ │ ├── generate-data.png │ │ ├── get-started.png │ │ ├── note-collection.png │ │ ├── note-data-model.png │ │ ├── note-title.png │ │ ├── setup-data.png │ │ ├── studio-input.png │ │ ├── text-fields.png │ │ └── ui-library.png │ ├── profile_images │ │ ├── aspittel.jpeg │ │ ├── chnwamba.jpeg │ │ └── kyle.jpg │ └── swift_course │ │ ├── amplify-studio-auth-configure-login.png │ │ ├── amplify-studio-auth-configure-sign-up.png │ │ ├── amplify-studio-auth-multi-factor-off.png │ │ ├── amplify-studio-auth-start-from-scratch.png │ │ ├── amplify-studio-auth-successfully-deployed.png │ │ ├── amplify-studio-authentication-tab.png │ │ ├── amplify-studio-chatroom-lastmessage-models.png │ │ ├── amplify-studio-data-deployed.png │ │ ├── amplify-studio-data-tab-2.png │ │ ├── amplify-studio-data-tab.png │ │ ├── amplify-studio-message-model.png │ │ ├── amplify-studio-product-model.png │ │ ├── amplify-studio-project-name.png │ │ ├── amplify-studio-storage-configuration.png │ │ ├── amplify-studio-user-model.png │ │ ├── course-thumbnail.png │ │ ├── iam-add-user-add-tags.png │ │ ├── iam-add-user-credentials.png │ │ ├── iam-add-user-name.png │ │ ├── iam-add-user-set-permissions.png │ │ ├── launch-studio.png │ │ ├── local-setup-instructions.png │ │ ├── my-account-tab.png │ │ ├── navigate-to-amplify-from-console.png │ │ ├── new-amplify-app.png │ │ ├── project_setup_xcode_ios_new_app.png │ │ ├── project_setup_xcode_project_configuration.png │ │ ├── xcode-add-chat-files.png │ │ ├── xcode-add-configuration-files.png │ │ ├── xcode-add-packages.png │ │ ├── xcode-add-product-files.png │ │ ├── xcode-amplify-image-product-selected.png │ │ ├── xcode-amplify-image-repo.png │ │ ├── xcode-datastore-plugin-selected.png │ │ ├── xcode-models-folder.png │ │ ├── xcode-package-api-plugin-selected.png │ │ ├── xcode-package-auth-plugin-selected.png │ │ ├── xcode-package-product-select-amplify.png │ │ ├── xcode-photo-library-privacy-policy.png │ │ └── xcode-storage-plugin-selected.png ├── learn-preview.jpg ├── robots.txt ├── scripts │ └── aws-ux-shortbread-v1-0-14.js └── vercel.svg ├── src ├── components │ ├── ActionLayout │ │ ├── ActionLayout.tsx │ │ └── index.ts │ ├── Banner │ │ ├── Banner.module.scss │ │ ├── Banner.tsx │ │ ├── IconInfo.tsx │ │ └── index.ts │ ├── BreadcrumbLayout │ │ ├── Breadcrumb.tsx │ │ ├── BreadcrumbLayout.module.scss │ │ ├── BreadcrumbLayout.tsx │ │ └── index.ts │ ├── CardLayout │ │ ├── CardLayout.module.scss │ │ ├── CardLayout.tsx │ │ └── index.ts │ ├── CardLayoutCollection │ │ ├── CardLayoutCollection.tsx │ │ └── index.ts │ ├── ContributorCollection │ │ ├── ContributorCollection.module.scss │ │ ├── ContributorCollection.tsx │ │ ├── ContributorComponents │ │ │ ├── ContributorLargeCustom.d.ts │ │ │ ├── ContributorLargeCustom.jsx │ │ │ ├── ContributorVerticalCustom.d.ts │ │ │ └── ContributorVerticalCustom.jsx │ │ └── index.ts │ ├── CourseContributors │ │ ├── ContributorHorizontalCustom.d.ts │ │ ├── ContributorHorizontalCustom.jsx │ │ ├── CourseContributors.module.scss │ │ ├── CourseContributors.tsx │ │ └── index.ts │ ├── CoursesRouteLayout │ │ ├── CoursesRouteLayout.tsx │ │ └── index.ts │ ├── Fallback │ │ ├── Fallback.tsx │ │ └── index.ts │ ├── GlobalNav │ │ ├── GlobalNav.module.scss │ │ ├── GlobalNav.tsx │ │ ├── components │ │ │ ├── AmplifyNavLink.tsx │ │ │ ├── LeftNavLinks.tsx │ │ │ ├── NavMenuLink.tsx │ │ │ ├── RightNavLinks.tsx │ │ │ ├── SecondaryNav.tsx │ │ │ ├── SocialNavLinks.tsx │ │ │ └── icons │ │ │ │ ├── AmplifyLogo.tsx │ │ │ │ ├── ChevronIcon.tsx │ │ │ │ ├── ExternalLink.tsx │ │ │ │ ├── IconLink.tsx │ │ │ │ └── index.ts │ │ └── index.ts │ ├── HeroCourse │ │ ├── HeroCourse.tsx │ │ └── index.ts │ ├── Layout │ │ ├── Layout.module.scss │ │ ├── Layout.tsx │ │ └── index.ts │ ├── LearnFooter │ │ ├── LearnFooter.module.scss │ │ ├── LearnFooter.tsx │ │ └── index.ts │ ├── LearnMarkdown │ │ ├── LearnMarkdown.module.scss │ │ ├── LearnMarkdown.tsx │ │ └── index.ts │ ├── LearnNavBar │ │ ├── LearnNavBar.module.scss │ │ ├── LearnNavBarDesktop │ │ │ ├── LearnNavBarDesktop.tsx │ │ │ └── index.ts │ │ ├── LearnNavBarMobile │ │ │ ├── LearnNavBarMobile.tsx │ │ │ └── index.ts │ │ └── NavBarMenuItem.tsx │ ├── LessonLayout │ │ ├── LessonLayout.module.scss │ │ ├── LessonLayout.tsx │ │ └── index.ts │ ├── LessonTableOfContents │ │ ├── LessonTableOfContents.module.scss │ │ ├── LessonTableOfContents.tsx │ │ └── index.ts │ ├── MetaLayout │ │ ├── MetaLayout.tsx │ │ └── index.ts │ ├── ShareThis │ │ ├── ShareThis.tsx │ │ └── index.ts │ ├── SocialMediaButton │ │ ├── SocialMediaButton.module.scss │ │ ├── SocialMediaButton.tsx │ │ └── index.ts │ ├── TagButton │ │ ├── TagButton.tsx │ │ └── index.ts │ ├── YoutubeEmbed │ │ ├── YoutubeEmbed.module.scss │ │ ├── YoutubeEmbed.tsx │ │ └── index.ts │ └── YoutubeModal │ │ ├── YoutubeModal.module.scss │ │ ├── YoutubeModal.tsx │ │ └── index.ts ├── data │ └── globalnav.ts ├── lib │ └── getData.ts ├── models │ ├── index.d.ts │ ├── index.js │ ├── schema.d.ts │ └── schema.js ├── pages │ ├── 404.tsx │ ├── _app.tsx │ ├── _document.tsx │ ├── about │ │ ├── [contributor].tsx │ │ └── index.tsx │ ├── courses │ │ ├── [courseurltitle] │ │ │ ├── index.tsx │ │ │ └── lessons │ │ │ │ ├── [lesson].tsx │ │ │ │ └── lesson.module.scss │ │ └── index.tsx │ ├── index.tsx │ └── tags │ │ ├── [tagname].tsx │ │ └── index.tsx ├── styles │ ├── fonts.scss │ ├── globals.scss │ ├── index.scss │ ├── pageStyles.scss │ └── primitives │ │ └── buttonStyles.scss ├── types │ └── models.d.ts ├── ui-components │ ├── AmplifyBorderLogo.d.ts │ ├── AmplifyBorderLogo.jsx │ ├── ArrowRightIcon.d.ts │ ├── ArrowRightIcon.jsx │ ├── ArrowRightIconCustom.d.ts │ ├── ArrowRightIconCustom.jsx │ ├── CardLayout.d.ts │ ├── CardLayout.jsx │ ├── CardLayoutCollection.d.ts │ ├── CardLayoutCollection.jsx │ ├── CloseIcon.d.ts │ ├── CloseIcon.jsx │ ├── ContributorHorizontal.d.ts │ ├── ContributorHorizontal.jsx │ ├── ContributorLarge.d.ts │ ├── ContributorLarge.jsx │ ├── ContributorLargeCollection.d.ts │ ├── ContributorLargeCollection.jsx │ ├── ContributorVertical.d.ts │ ├── ContributorVertical.jsx │ ├── ContributorVerticalCollection.d.ts │ ├── ContributorVerticalCollection.jsx │ ├── DiscordIcon.d.ts │ ├── DiscordIcon.jsx │ ├── ExternalIcon.d.ts │ ├── ExternalIcon.jsx │ ├── ExternalIconCustom.d.ts │ ├── ExternalIconCustom.jsx │ ├── FacebookIcon.d.ts │ ├── FacebookIcon.jsx │ ├── GithubIcon.d.ts │ ├── GithubIcon.jsx │ ├── HeartIcon.d.ts │ ├── HeartIcon.jsx │ ├── HeroLayout.d.ts │ ├── HeroLayout.jsx │ ├── HeroLayoutCustom.d.ts │ ├── HeroLayoutCustom.jsx │ ├── HeroLayoutMobile.d.ts │ ├── HeroLayoutMobile.jsx │ ├── InstagramIcon.d.ts │ ├── InstagramIcon.jsx │ ├── LearnCounter.d.ts │ ├── LearnCounter.jsx │ ├── LearnFooter.d.ts │ ├── LearnFooter.jsx │ ├── LearnFooterCustom.d.ts │ ├── LearnFooterCustom.jsx │ ├── LearnFooterMobile.d.ts │ ├── LearnFooterMobile.jsx │ ├── LearnFooterMobileCustom.d.ts │ ├── LearnFooterMobileCustom.jsx │ ├── LearnLogo.d.ts │ ├── LearnLogo.jsx │ ├── LearnMenuItem.d.ts │ ├── LearnMenuItem.jsx │ ├── LearnSocial.d.ts │ ├── LearnSocial.jsx │ ├── LearnSocialBorderless.d.ts │ ├── LearnSocialBorderless.jsx │ ├── LearnSocialCustom.d.ts │ ├── LearnSocialCustom.jsx │ ├── LinkedinIcon.d.ts │ ├── LinkedinIcon.jsx │ ├── MadeLabel.d.ts │ ├── MadeLabel.jsx │ ├── MenuIcon.d.ts │ ├── MenuIcon.jsx │ ├── NavBar.d.ts │ ├── NavBar.jsx │ ├── NavBarMobileCollapsed.d.ts │ ├── NavBarMobileCollapsed.jsx │ ├── NavBarMobileExpanded.d.ts │ ├── NavBarMobileExpanded.jsx │ ├── PlayIcon.d.ts │ ├── PlayIcon.jsx │ ├── TwitchIcon.d.ts │ ├── TwitchIcon.jsx │ ├── TwitterIcon.d.ts │ ├── TwitterIcon.jsx │ ├── YouTubeIcon.d.ts │ ├── YouTubeIcon.jsx │ ├── index.js │ ├── studioTheme.js │ └── studioTheme.js.d.ts └── utils │ ├── capitalizeEnum.ts │ ├── createCourseTitleUri.tsx │ ├── createGithubIssueLink.ts │ ├── index.ts │ └── track.ts └── tsconfig.json /.eslintignore: -------------------------------------------------------------------------------- 1 | src/models -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals", 3 | "rules": { 4 | "react/no-children-prop": "off" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @aws-amplify/amplify-support-eng @aws-amplify/amplify-ui 2 | /public/images/ @aws-amplify/developer-advocates @aws-amplify/amplify-support-eng 3 | -------------------------------------------------------------------------------- /.github/actions/fetch_amplify_backend/action.yml: -------------------------------------------------------------------------------- 1 | name: Fetch Amplify Backend 2 | description: Downloads Amplify configurations after getting temporary AWS credentials 3 | inputs: 4 | aws-region: 5 | description: "AWS region" 6 | required: true 7 | role-to-assume: 8 | description: "Role to assume" 9 | required: true 10 | app-id: 11 | description: "App id" 12 | required: true 13 | env-name: 14 | description: "Env name" 15 | required: true 16 | 17 | runs: 18 | using: "composite" 19 | steps: 20 | - name: Add Amplify CLI 21 | run: npm install -g @aws-amplify/cli 22 | shell: bash 23 | 24 | - name: Configure AWS Credentials 25 | uses: aws-actions/configure-aws-credentials@v1 26 | with: 27 | role-to-assume: ${{ inputs.role-to-assume }} 28 | aws-region: ${{ inputs.aws-region }} 29 | role-duration-seconds: 900 30 | 31 | - name: Create AWS profile 32 | run: chmod +x ./build_support/create-temp-profile.sh && ./build_support/create-temp-profile.sh 33 | shell: bash 34 | 35 | - name: Pull down AWS environments 36 | run: chmod +x ./build_support/pull-environment.sh && ./build_support/pull-environment.sh 37 | shell: bash 38 | env: 39 | APP_ID: ${{ inputs.app-id }} 40 | ENV_NAME: ${{ inputs.env-name }} 41 | AWS_REGION: ${{ inputs.aws-region }} 42 | 43 | - name: Delete AWS profile 44 | run: rm -rf ~/.aws 45 | shell: bash 46 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | *Issue #, if available:* 2 | 3 | *Description of changes:* 4 | 5 | 6 | By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. 7 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | # Description: This workflow runs unit tests and builds PRs targeting `main` 2 | # 3 | # Triggered by: 4 | # (1) Internal PRs: contirubutor pushes a commit to PRs targeting protected branches. 5 | # (2) Fork PRs: maintainer adds "run-test" label to PRs targeting protected branches. 6 | 7 | name: Build PRs 8 | on: 9 | pull_request_target: 10 | branches: [main] 11 | types: [opened, synchronize, labeled] 12 | permissions: 13 | pull-requests: write # used to remove label 14 | id-token: write 15 | contents: read 16 | jobs: 17 | setup: 18 | runs-on: ubuntu-latest 19 | # We run tests only if it's: 20 | # 1) pull request not from a fork (ie. internal PR), or 21 | # 2) pull request from a fork (ie. external PR) that was added "run-tests" label 22 | if: | 23 | (github.event.pull_request.head.repo.full_name == github.repository) || 24 | (github.event.action == 'labeled' && github.event.label.name == 'run-tests') 25 | steps: 26 | - name: Remove run-tests label, if applicable 27 | if: always() && github.event.label.name == 'run-tests' 28 | uses: actions/github-script@0.3.0 29 | with: 30 | github-token: ${{ secrets.GITHUB_TOKEN }} 31 | script: | 32 | const { issue: { number: issue_number }, repo: { owner, repo } } = context; 33 | const label = 'run-tests'; 34 | github.issues.removeLabel({ owner, repo, issue_number, name: label }); 35 | build: 36 | name: Build 37 | needs: setup 38 | runs-on: ubuntu-latest 39 | steps: 40 | - name: Checkout Repo 41 | uses: actions/checkout@main 42 | with: 43 | ref: ${{ github.event.pull_request.head.sha }} 44 | repository: ${{ github.event.pull_request.head.repo.full_name }} 45 | persist-credentials: false 46 | - name: Setup Node.js 20.x 47 | uses: actions/setup-node@main 48 | with: 49 | node-version: 20.x 50 | - name: Install Dependencies 51 | run: npm install 52 | - name: Fetch Amplify backend configuration 53 | uses: ./.github/actions/fetch_amplify_backend 54 | with: 55 | role-to-assume: ${{ secrets.AWS_ARN_ROLE }} 56 | aws-region: ${{ secrets.AWS_REGION }} 57 | app-id: ${{ secrets.APP_ID }} 58 | env-name: ${{ secrets.ENV_NAME }} 59 | - name: Run build 60 | run: npm run build 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env 30 | env.local 31 | 32 | # vercel 33 | .vercel 34 | 35 | # typescript 36 | *.tsbuildinfo 37 | 38 | amplify/team-provider-info.json 39 | 40 | #amplify-do-not-edit-begin 41 | amplify/\#current-cloud-backend 42 | amplify/.config/local-* 43 | amplify/logs 44 | amplify/mock-data 45 | amplify/backend/amplify-meta.json 46 | amplify/backend/.temp 47 | build/ 48 | dist/ 49 | node_modules/ 50 | aws-exports.js 51 | awsconfiguration.json 52 | amplifyconfiguration.json 53 | amplifyconfiguration.dart 54 | amplify-build-config.json 55 | amplify-gradle-config.json 56 | amplifytools.xcconfig 57 | .secret-* 58 | **.sample 59 | #amplify-do-not-edit-end 60 | credentials.csv 61 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run pre-commit 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "amplify/.config": true, 4 | "amplify/**/*-parameters.json": true, 5 | "amplify/**/amplify.state": true, 6 | "amplify/**/transform.conf.json": true, 7 | "amplify/#current-cloud-backend": true, 8 | "amplify/backend/amplify-meta.json": true, 9 | "amplify/backend/awscloudformation": true 10 | } 11 | } -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Amplify Learn 2 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -------------------------------------------------------------------------------- /amplify.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | frontend: 3 | phases: 4 | preBuild: 5 | commands: 6 | - npm install 7 | build: 8 | commands: 9 | - NODE_ENV=production npm run build 10 | artifacts: 11 | # IMPORTANT - Please verify your build output directory 12 | baseDirectory: out 13 | files: 14 | - "**/*" 15 | cache: 16 | paths: 17 | - node_modules/**/* 18 | -------------------------------------------------------------------------------- /amplify/.config/project-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "providers": [ 3 | "awscloudformation" 4 | ], 5 | "projectName": "LearnProduction", 6 | "version": "3.1", 7 | "frontend": "javascript", 8 | "javascript": { 9 | "framework": "react", 10 | "config": { 11 | "SourceDir": "src", 12 | "DistributionDir": ".next", 13 | "BuildCommand": "npm run build", 14 | "StartCommand": "npm run start" 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /amplify/backend/api/community/.migration-backup/schema.graphql: -------------------------------------------------------------------------------- 1 | type SocialMediaLink { 2 | type: SocialMediaType 3 | url: AWSURL 4 | } 5 | 6 | enum SocialMediaType { 7 | INSTAGRAM 8 | LINKEDIN 9 | FACEBOOK 10 | GITHUB 11 | TWITTER 12 | TWITCH 13 | YOUTUBE 14 | DISCORDD 15 | } 16 | 17 | enum SkillLevel { 18 | BEGINNER 19 | INTERMEDIATE 20 | ADVANCED 21 | } 22 | 23 | type CoursesPage @model @auth(rules: [{allow: public}]) { 24 | id: ID! 25 | } 26 | 27 | type AboutPage @model @auth(rules: [{allow: public}]) { 28 | id: ID! 29 | } 30 | 31 | type Contributor @model @auth(rules: [{allow: public}]) { 32 | id: ID! 33 | name: String 34 | title: String 35 | socialMediaLinks: [SocialMediaLink] 36 | Courses: [ContributorCourse] @connection(keyName: "byContributor", fields: ["id"]) 37 | } 38 | 39 | type Chapter @model @auth(rules: [{allow: public}]) { 40 | id: ID! 41 | Title: String 42 | VideoLink: AWSURL 43 | } 44 | 45 | type Lesson @model @auth(rules: [{allow: public}]) { 46 | id: ID! 47 | Title: String 48 | Description: String 49 | Content: [String] 50 | VideoLink: AWSURL 51 | } 52 | 53 | type Course @model @auth(rules: [{allow: public}]) { 54 | id: ID! 55 | Title: String 56 | Subtitle: String 57 | SkillLevel: SkillLevel 58 | TimeHours: Int 59 | TimeMinutes: Int 60 | Bio: String 61 | Description: String 62 | Requirements: [String] 63 | Image: String 64 | contributors: [ContributorCourse] @connection(keyName: "byCourse", fields: ["id"]) 65 | } 66 | 67 | type Footer @model @auth(rules: [{allow: public}]) { 68 | id: ID! 69 | } 70 | 71 | type Nav @model @auth(rules: [{allow: public}]) { 72 | id: ID! 73 | } 74 | 75 | type HomePage @model @auth(rules: [{allow: public}]) { 76 | id: ID! 77 | } 78 | 79 | type ContributorCourse @model(queries: null) @key(name: "byContributor", fields: ["contributorID", "courseID"]) @key(name: "byCourse", fields: ["courseID", "contributorID"]) @auth(rules: [{allow: public}, {allow: public}]) { 80 | id: ID! 81 | contributorID: ID! 82 | courseID: ID! 83 | contributor: Contributor! @connection(fields: ["contributorID"]) 84 | course: Course! @connection(fields: ["courseID"]) 85 | } 86 | -------------------------------------------------------------------------------- /amplify/backend/api/community/.migration-config-backup/cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "features": { 3 | "graphqltransformer": { 4 | "addmissingownerfields": false, 5 | "improvepluralization": false, 6 | "validatetypenamereservedwords": true, 7 | "useexperimentalpipelinedtransformer": false, 8 | "enableiterativegsiupdates": true, 9 | "secondarykeyasgsi": false, 10 | "skipoverridemutationinputtypes": false, 11 | "transformerversion": 1, 12 | "suppressschemamigrationprompt": true, 13 | "securityenhancementnotification": true, 14 | "showfieldauthnotification": false, 15 | "securityEnhancementNotification": false 16 | }, 17 | "frontend-ios": { 18 | "enablexcodeintegration": false 19 | }, 20 | "auth": { 21 | "enablecaseinsensitivity": false, 22 | "useinclusiveterminology": false, 23 | "breakcirculardependency": false, 24 | "forcealiasattributes": false, 25 | "useenabledmfas": false 26 | }, 27 | "codegen": { 28 | "useappsyncmodelgenplugin": false, 29 | "usedocsgeneratorplugin": false, 30 | "usetypesgeneratorplugin": false, 31 | "cleangeneratedmodelsdirectory": false, 32 | "retaincasestyle": false, 33 | "addtimestampfields": false, 34 | "handlelistnullabilitytransparently": false, 35 | "emitauthprovider": false, 36 | "generateindexrules": false, 37 | "enabledartnullsafety": false 38 | }, 39 | "appsync": { 40 | "generategraphqlpermissions": false 41 | }, 42 | "latestregionsupport": { 43 | "pinpoint": 0, 44 | "translate": 0, 45 | "transcribe": 0, 46 | "rekognition": 0, 47 | "textract": 0, 48 | "comprehend": 0 49 | }, 50 | "project": { 51 | "overrides": true 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /amplify/backend/api/community/cli-inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "serviceConfiguration": { 4 | "apiName": "community", 5 | "serviceName": "AppSync", 6 | "defaultAuthType": { 7 | "mode": "API_KEY", 8 | "keyDescription": "api key description", 9 | "expirationTime": 30 10 | }, 11 | "additionalAuthTypes": [ 12 | { 13 | "mode": "AWS_IAM" 14 | } 15 | ], 16 | "conflictResolution": { 17 | "defaultResolutionStrategy": { 18 | "type": "AUTOMERGE" 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /amplify/backend/api/community/parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "AppSyncApiName": "community", 3 | "DynamoDBBillingMode": "PAY_PER_REQUEST", 4 | "DynamoDBEnableServerSideEncryption": false 5 | } -------------------------------------------------------------------------------- /amplify/backend/api/community/resolvers/README.md: -------------------------------------------------------------------------------- 1 | Any resolvers that you add in this directory will override the ones automatically generated by Amplify CLI and will be directly copied to the cloud. 2 | For more information, visit [https://docs.amplify.aws/cli/graphql-transformer/resolvers](https://docs.amplify.aws/cli/graphql-transformer/resolvers) -------------------------------------------------------------------------------- /amplify/backend/api/community/stacks/CustomResources.json: -------------------------------------------------------------------------------- 1 | { 2 | "AWSTemplateFormatVersion": "2010-09-09", 3 | "Description": "An auto-generated nested stack.", 4 | "Metadata": {}, 5 | "Parameters": { 6 | "AppSyncApiId": { 7 | "Type": "String", 8 | "Description": "The id of the AppSync API associated with this project." 9 | }, 10 | "AppSyncApiName": { 11 | "Type": "String", 12 | "Description": "The name of the AppSync API", 13 | "Default": "AppSyncSimpleTransform" 14 | }, 15 | "env": { 16 | "Type": "String", 17 | "Description": "The environment name. e.g. Dev, Test, or Production", 18 | "Default": "NONE" 19 | }, 20 | "S3DeploymentBucket": { 21 | "Type": "String", 22 | "Description": "The S3 bucket containing all deployment assets for the project." 23 | }, 24 | "S3DeploymentRootKey": { 25 | "Type": "String", 26 | "Description": "An S3 key relative to the S3DeploymentBucket that points to the root\nof the deployment directory." 27 | } 28 | }, 29 | "Resources": { 30 | "EmptyResource": { 31 | "Type": "Custom::EmptyResource", 32 | "Condition": "AlwaysFalse" 33 | } 34 | }, 35 | "Conditions": { 36 | "HasEnvironmentParameter": { 37 | "Fn::Not": [ 38 | { 39 | "Fn::Equals": [ 40 | { 41 | "Ref": "env" 42 | }, 43 | "NONE" 44 | ] 45 | } 46 | ] 47 | }, 48 | "AlwaysFalse": { 49 | "Fn::Equals": ["true", "false"] 50 | } 51 | }, 52 | "Outputs": { 53 | "EmptyOutput": { 54 | "Description": "An empty output. You may delete this if you have at least one resource above.", 55 | "Value": "" 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /amplify/backend/api/community/transform.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": 5, 3 | "ElasticsearchWarning": true, 4 | "ResolverConfig": { 5 | "project": { 6 | "ConflictHandler": "AUTOMERGE", 7 | "ConflictDetection": "VERSION" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /amplify/backend/backend-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "community": { 4 | "service": "AppSync", 5 | "providerPlugin": "awscloudformation", 6 | "dependsOn": [], 7 | "output": { 8 | "authConfig": { 9 | "defaultAuthentication": { 10 | "authenticationType": "API_KEY", 11 | "apiKeyConfig": { 12 | "apiKeyExpirationDays": 30, 13 | "description": "api key description" 14 | } 15 | }, 16 | "additionalAuthenticationProviders": [ 17 | { 18 | "authenticationType": "AWS_IAM" 19 | } 20 | ] 21 | } 22 | } 23 | } 24 | }, 25 | "auth": {}, 26 | "storage": {} 27 | } -------------------------------------------------------------------------------- /amplify/backend/types/amplify-dependent-resources-ref.d.ts: -------------------------------------------------------------------------------- 1 | export type AmplifyDependentResourcesAttributes = { 2 | "api": { 3 | "community": { 4 | "GraphQLAPIKeyOutput": "string", 5 | "GraphQLAPIIdOutput": "string", 6 | "GraphQLAPIEndpointOutput": "string" 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /amplify/cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "features": { 3 | "graphqltransformer": { 4 | "addmissingownerfields": false, 5 | "improvepluralization": false, 6 | "validatetypenamereservedwords": true, 7 | "useexperimentalpipelinedtransformer": true, 8 | "enableiterativegsiupdates": true, 9 | "secondarykeyasgsi": false, 10 | "skipoverridemutationinputtypes": false, 11 | "transformerversion": 2, 12 | "suppressschemamigrationprompt": true, 13 | "securityenhancementnotification": true, 14 | "showfieldauthnotification": false, 15 | "securityEnhancementNotification": false 16 | }, 17 | "frontend-ios": { 18 | "enablexcodeintegration": false 19 | }, 20 | "auth": { 21 | "enablecaseinsensitivity": false, 22 | "useinclusiveterminology": false, 23 | "breakcirculardependency": false, 24 | "forcealiasattributes": false, 25 | "useenabledmfas": false 26 | }, 27 | "codegen": { 28 | "useappsyncmodelgenplugin": true, 29 | "usedocsgeneratorplugin": false, 30 | "usetypesgeneratorplugin": false, 31 | "cleangeneratedmodelsdirectory": false, 32 | "retaincasestyle": false, 33 | "addtimestampfields": false, 34 | "handlelistnullabilitytransparently": false, 35 | "emitauthprovider": false, 36 | "generateindexrules": false, 37 | "enabledartnullsafety": false 38 | }, 39 | "appsync": { 40 | "generategraphqlpermissions": false 41 | }, 42 | "latestregionsupport": { 43 | "pinpoint": 0, 44 | "translate": 0, 45 | "transcribe": 0, 46 | "rekognition": 0, 47 | "textract": 0, 48 | "comprehend": 0 49 | }, 50 | "project": { 51 | "overrides": true 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /amplify/hooks/README.md: -------------------------------------------------------------------------------- 1 | # Command Hooks 2 | 3 | Command hooks can be used to run custom scripts upon Amplify CLI lifecycle events like pre-push, post-add-function, etc. 4 | 5 | To get started, add your script files based on the expected naming convention in this directory. 6 | 7 | Learn more about the script file naming convention, hook parameters, third party dependencies, and advanced configurations at https://docs.amplify.aws/cli/usage/command-hooks 8 | -------------------------------------------------------------------------------- /build_support/create-temp-profile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID 6 | aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY 7 | aws configure set aws_session_token $AWS_SESSION_TOKEN 8 | aws configure set default.region $AWS_DEFAULT_REGION -------------------------------------------------------------------------------- /build_support/pull-environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | IFS='|' 4 | 5 | FRONTENDCONFIG="{\ 6 | \"SourceDir\":\"src\",\ 7 | \"DistributionDir\":\"client/www\",\ 8 | \"BuildCommand\":\"yarn export\",\ 9 | \"StartCommand\":\"yarn start\"\ 10 | }" 11 | FRONTEND="{\ 12 | \"frontend\":\"javascript\",\ 13 | \"framework\":\"none\",\ 14 | \"config\":$FRONTENDCONFIG\ 15 | }" 16 | AMPLIFY="{\ 17 | \"appId\":\"$APP_ID\",\ 18 | \"envName\":\"$ENV_NAME\",\ 19 | \"defaultEditor\":\"code\",\ 20 | }" 21 | AWSCLOUDFORMATIONCONFIG="{\ 22 | \"configLevel\":\"project\",\ 23 | \"useProfile\":true,\ 24 | \"profileName\":\"default\",\ 25 | \"region\":\"$AWS_REGION\"\ 26 | }" 27 | PROVIDERS="{\ 28 | \"awscloudformation\":$AWSCLOUDFORMATIONCONFIG\ 29 | }" 30 | 31 | echo y | amplify pull --amplify $AMPLIFY --frontend $FRONTEND --providers $PROVIDERS -------------------------------------------------------------------------------- /customHttp.yml: -------------------------------------------------------------------------------- 1 | # Custom headers when serving docs through Amplify Hosting 2 | # 3 | # See: https://docs.aws.amazon.com/amplify/latest/userguide/custom-headers.html#setting-custom-headers 4 | customHeaders: 5 | - pattern: "**/*" 6 | headers: 7 | - key: "Strict-Transport-Security" 8 | value: "max-age=31536000; includeSubDomains" 9 | - key: "X-Frame-Options" 10 | value: "SAMEORIGIN" 11 | - key: "X-Content-Type-Options" 12 | value: "nosniff" 13 | # CSP set in _document.tsx meta tag 14 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | basePath: process.env.BASEPATH, 5 | typescript: { 6 | ignoreBuildErrors: true, 7 | }, 8 | sassOptions: { 9 | prependData: process.env.BASEPATH 10 | ? `$basepath: '${process.env.BASEPATH}';` 11 | : `$basepath: '';`, 12 | }, 13 | env: { 14 | SITE_URL: process.env.SITE_URL, 15 | BASEPATH: process.env.BASEPATH, 16 | }, 17 | }; 18 | 19 | module.exports = nextConfig; 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "learn", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build && next export", 8 | "start": "next start", 9 | "lint": "next lint", 10 | "prepare": "husky install", 11 | "pre-commit": "next lint" 12 | }, 13 | "dependencies": { 14 | "@aws-amplify/ui-react": "3.5", 15 | "aws-amplify": "^4.3.34", 16 | "mapbox-gl": "1.13.1", 17 | "next": "^13.5.6", 18 | "react": "^18.2.0", 19 | "react-copy-to-clipboard": "^5.1.0", 20 | "react-dom": "^18.2.0", 21 | "react-markdown": "^8.0.3", 22 | "react-modal": "^3.15.1", 23 | "react-syntax-highlighter": "^15.5.0", 24 | "rehype-external-links": "^1.0.1" 25 | }, 26 | "devDependencies": { 27 | "@types/node": "17.0.41", 28 | "@types/react": "^17.0.2", 29 | "@types/react-copy-to-clipboard": "^5.0.3", 30 | "@types/react-dom": "18.0.5", 31 | "@types/react-modal": "^3.13.1", 32 | "@types/react-syntax-highlighter": "^15.5.3", 33 | "eslint": "^7.32.0", 34 | "eslint-config-next": "^14.0.1", 35 | "husky": "^8.0.1", 36 | "sass": "^1.52.3", 37 | "typescript": "4.7.3" 38 | }, 39 | "overrides": { 40 | "shell-quote": "1.7.3", 41 | "loader-utils": "2.0.4", 42 | "fast-xml-parser": "4.4.1", 43 | "semver": "7.5.2", 44 | "postcss": "8.4.31", 45 | "browserify-sign": "4.2.2", 46 | "axios": "^1.7.4", 47 | "ws": "7.5.10" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/AmazonEmberDisplay_W_Bd.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmberDisplay_W_Bd.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmberDisplay_W_He.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmberDisplay_W_He.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmberDisplay_W_Lt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmberDisplay_W_Lt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmberDisplay_W_Md.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmberDisplay_W_Md.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmberDisplay_W_Rg.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmberDisplay_W_Rg.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_Bd.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_Bd.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_BdIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_BdIt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_He.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_He.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_HeIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_HeIt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_Lt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_Lt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_LtIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_LtIt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_Rg.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_Rg.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_RgIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_RgIt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_SBd.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_SBd.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_SBdIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_SBdIt.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_Th.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_Th.woff2 -------------------------------------------------------------------------------- /public/fonts/AmazonEmber_W_ThIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/fonts/AmazonEmber_W_ThIt.woff2 -------------------------------------------------------------------------------- /public/images/cover_images/fullstack-for-frontend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/cover_images/fullstack-for-frontend.png -------------------------------------------------------------------------------- /public/images/cover_images/membership-site.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/cover_images/membership-site.png -------------------------------------------------------------------------------- /public/images/cover_images/swift-course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/cover_images/swift-course.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/actions.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/amplify-pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/amplify-pull.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/authentication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/authentication.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/authenticator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/authenticator.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/authorization-rules.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/authorization-rules.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/content.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/delete.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/deployed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/deployed.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/final-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/final-app.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/generate-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/generate-data.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/get-started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/get-started.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/host-a-web-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/host-a-web-app.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/note-collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/note-collection.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/note-data-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/note-data-model.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/note-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/note-title.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/run-plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/run-plugin.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/setup-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/setup-data.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/studio-input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/studio-input.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/text-fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/text-fields.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/theme.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/ui-library copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/ui-library copy.png -------------------------------------------------------------------------------- /public/images/fullstack_for_frontend/ui-library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/fullstack_for_frontend/ui-library.png -------------------------------------------------------------------------------- /public/images/membership_website/1-dup-ui-kit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/1-dup-ui-kit.png -------------------------------------------------------------------------------- /public/images/membership_website/1-theme-plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/1-theme-plugin.png -------------------------------------------------------------------------------- /public/images/membership_website/1-ui-kit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/1-ui-kit.png -------------------------------------------------------------------------------- /public/images/membership_website/1-use-theme-plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/1-use-theme-plugin.png -------------------------------------------------------------------------------- /public/images/membership_website/2-accept-theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-accept-theme.png -------------------------------------------------------------------------------- /public/images/membership_website/2-add-auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-add-auth.png -------------------------------------------------------------------------------- /public/images/membership_website/2-content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-content.png -------------------------------------------------------------------------------- /public/images/membership_website/2-deploy-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-deploy-app.png -------------------------------------------------------------------------------- /public/images/membership_website/2-generate-content-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-generate-content-2.png -------------------------------------------------------------------------------- /public/images/membership_website/2-generate-content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-generate-content.png -------------------------------------------------------------------------------- /public/images/membership_website/2-import-figma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-import-figma.png -------------------------------------------------------------------------------- /public/images/membership_website/2-model-data-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-model-data-2.png -------------------------------------------------------------------------------- /public/images/membership_website/2-model-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-model-data.png -------------------------------------------------------------------------------- /public/images/membership_website/2-new-app-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-new-app-2.png -------------------------------------------------------------------------------- /public/images/membership_website/2-new-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-new-app.png -------------------------------------------------------------------------------- /public/images/membership_website/2-save-components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-save-components.png -------------------------------------------------------------------------------- /public/images/membership_website/2-search-amplify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-search-amplify.png -------------------------------------------------------------------------------- /public/images/membership_website/2-sync-figma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/2-sync-figma.png -------------------------------------------------------------------------------- /public/images/membership_website/4-pull-comp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/4-pull-comp.png -------------------------------------------------------------------------------- /public/images/membership_website/4-run-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/4-run-app.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-card.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-hero.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-nav-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-nav-2.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-nav-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-nav-3.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-nav-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-nav-4.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-nav.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-persuade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-persuade.png -------------------------------------------------------------------------------- /public/images/membership_website/5-bind-story.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-bind-story.png -------------------------------------------------------------------------------- /public/images/membership_website/5-create-collection-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-create-collection-2.png -------------------------------------------------------------------------------- /public/images/membership_website/5-create-collection-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-create-collection-3.png -------------------------------------------------------------------------------- /public/images/membership_website/5-create-collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/5-create-collection.png -------------------------------------------------------------------------------- /public/images/membership_website/7-client-integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/7-client-integration.png -------------------------------------------------------------------------------- /public/images/membership_website/7-create-product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/7-create-product.png -------------------------------------------------------------------------------- /public/images/membership_website/7-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/7-key.png -------------------------------------------------------------------------------- /public/images/membership_website/7-product-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/7-product-id.png -------------------------------------------------------------------------------- /public/images/membership_website/7-setup-stripe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/7-setup-stripe.png -------------------------------------------------------------------------------- /public/images/membership_website/8-add-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/8-add-api.png -------------------------------------------------------------------------------- /public/images/membership_website/8-test-hook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/membership_website/8-test-hook.png -------------------------------------------------------------------------------- /public/images/mock_course_images/amplify-pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/amplify-pull.png -------------------------------------------------------------------------------- /public/images/mock_course_images/content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/content.png -------------------------------------------------------------------------------- /public/images/mock_course_images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/delete.png -------------------------------------------------------------------------------- /public/images/mock_course_images/final-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/final-app.png -------------------------------------------------------------------------------- /public/images/mock_course_images/generate-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/generate-data.png -------------------------------------------------------------------------------- /public/images/mock_course_images/get-started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/get-started.png -------------------------------------------------------------------------------- /public/images/mock_course_images/note-collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/note-collection.png -------------------------------------------------------------------------------- /public/images/mock_course_images/note-data-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/note-data-model.png -------------------------------------------------------------------------------- /public/images/mock_course_images/note-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/note-title.png -------------------------------------------------------------------------------- /public/images/mock_course_images/setup-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/setup-data.png -------------------------------------------------------------------------------- /public/images/mock_course_images/studio-input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/studio-input.png -------------------------------------------------------------------------------- /public/images/mock_course_images/text-fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/text-fields.png -------------------------------------------------------------------------------- /public/images/mock_course_images/ui-library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/mock_course_images/ui-library.png -------------------------------------------------------------------------------- /public/images/profile_images/aspittel.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/profile_images/aspittel.jpeg -------------------------------------------------------------------------------- /public/images/profile_images/chnwamba.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/profile_images/chnwamba.jpeg -------------------------------------------------------------------------------- /public/images/profile_images/kyle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/profile_images/kyle.jpg -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-auth-configure-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-auth-configure-login.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-auth-configure-sign-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-auth-configure-sign-up.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-auth-multi-factor-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-auth-multi-factor-off.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-auth-start-from-scratch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-auth-start-from-scratch.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-auth-successfully-deployed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-auth-successfully-deployed.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-authentication-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-authentication-tab.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-chatroom-lastmessage-models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-chatroom-lastmessage-models.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-data-deployed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-data-deployed.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-data-tab-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-data-tab-2.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-data-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-data-tab.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-message-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-message-model.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-product-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-product-model.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-project-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-project-name.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-storage-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-storage-configuration.png -------------------------------------------------------------------------------- /public/images/swift_course/amplify-studio-user-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/amplify-studio-user-model.png -------------------------------------------------------------------------------- /public/images/swift_course/course-thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/course-thumbnail.png -------------------------------------------------------------------------------- /public/images/swift_course/iam-add-user-add-tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/iam-add-user-add-tags.png -------------------------------------------------------------------------------- /public/images/swift_course/iam-add-user-credentials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/iam-add-user-credentials.png -------------------------------------------------------------------------------- /public/images/swift_course/iam-add-user-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/iam-add-user-name.png -------------------------------------------------------------------------------- /public/images/swift_course/iam-add-user-set-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/iam-add-user-set-permissions.png -------------------------------------------------------------------------------- /public/images/swift_course/launch-studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/launch-studio.png -------------------------------------------------------------------------------- /public/images/swift_course/local-setup-instructions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/local-setup-instructions.png -------------------------------------------------------------------------------- /public/images/swift_course/my-account-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/my-account-tab.png -------------------------------------------------------------------------------- /public/images/swift_course/navigate-to-amplify-from-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/navigate-to-amplify-from-console.png -------------------------------------------------------------------------------- /public/images/swift_course/new-amplify-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/new-amplify-app.png -------------------------------------------------------------------------------- /public/images/swift_course/project_setup_xcode_ios_new_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/project_setup_xcode_ios_new_app.png -------------------------------------------------------------------------------- /public/images/swift_course/project_setup_xcode_project_configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/project_setup_xcode_project_configuration.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-add-chat-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-add-chat-files.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-add-configuration-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-add-configuration-files.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-add-packages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-add-packages.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-add-product-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-add-product-files.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-amplify-image-product-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-amplify-image-product-selected.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-amplify-image-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-amplify-image-repo.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-datastore-plugin-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-datastore-plugin-selected.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-models-folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-models-folder.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-package-api-plugin-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-package-api-plugin-selected.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-package-auth-plugin-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-package-auth-plugin-selected.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-package-product-select-amplify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-package-product-select-amplify.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-photo-library-privacy-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-photo-library-privacy-policy.png -------------------------------------------------------------------------------- /public/images/swift_course/xcode-storage-plugin-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/images/swift_course/xcode-storage-plugin-selected.png -------------------------------------------------------------------------------- /public/learn-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-amplify/learn/bdbbf4df5415ff6f04d42889d27effb8ca2efab5/public/learn-preview.jpg -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/ActionLayout/ActionLayout.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from "@aws-amplify/ui-react"; 2 | 3 | export function ActionLayout({ children }: { children: any }) { 4 | return ( 5 | 28 | {children} 29 | 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /src/components/ActionLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { ActionLayout } from "./ActionLayout"; 2 | -------------------------------------------------------------------------------- /src/components/Banner/Banner.module.scss: -------------------------------------------------------------------------------- 1 | .message-banner { 2 | display: flex; 3 | flex-direction: row; 4 | align-items: start; 5 | border: 1px solid var(--amplify-colors-border-primary); 6 | padding: var(--amplify-space-medium); 7 | margin-bottom: var(--amplify-space-large); 8 | } 9 | 10 | .message-banner__inner { 11 | flex-direction: row; 12 | } 13 | -------------------------------------------------------------------------------- /src/components/Banner/Banner.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, View, Text, Button } from "@aws-amplify/ui-react"; 2 | import { IconInfo } from "./IconInfo"; 3 | import styles from "./Banner.module.scss"; 4 | 5 | interface BannerProps { 6 | columnStart?: any; 7 | } 8 | 9 | export const Banner: React.FC = ({ 10 | columnStart = { 11 | base: 1, 12 | small: 1, 13 | medium: 1, 14 | large: 2, 15 | }, 16 | }) => { 17 | return ( 18 | 19 | 20 | 21 | 22 | 23 | The courses on this site teach Amplify Gen 1. If you're 24 | creating a new app, we recommend using Gen 2 which has enhanced 25 | capabilities. 26 | 27 | 28 | 29 | 41 | 42 | 43 | 44 | ); 45 | }; 46 | -------------------------------------------------------------------------------- /src/components/Banner/IconInfo.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { Icon } from "@aws-amplify/ui-react"; 3 | 4 | export const IconInfo = () => { 5 | return ( 6 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /src/components/Banner/index.ts: -------------------------------------------------------------------------------- 1 | export { Banner } from "./Banner"; 2 | -------------------------------------------------------------------------------- /src/components/BreadcrumbLayout/Breadcrumb.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, Icon } from "@aws-amplify/ui-react"; 2 | import Link from "next/link"; 3 | import { Children, Fragment, ReactNode } from "react"; 4 | import styles from "./BreadcrumbLayout.module.scss"; 5 | 6 | export function BreadcrumbItem({ 7 | children, 8 | href, 9 | isCurrent, 10 | }: { 11 | children: ReactNode; 12 | href: string; 13 | isCurrent?: boolean; 14 | }) { 15 | return ( 16 | 23 | {children} 24 | 25 | ); 26 | } 27 | 28 | export function Breadcrumb({ children }: { children: ReactNode }) { 29 | const childrenArray = Children.toArray(children); 30 | 31 | const childrenWithSeparator = childrenArray.map((child, index) => { 32 | if (index !== childrenArray.length - 1) { 33 | return ( 34 | 35 | {child} 36 | 41 | 48 | 49 | 50 | ); 51 | } 52 | 53 | return child; 54 | }); 55 | 56 | return ( 57 | 62 | ); 63 | } 64 | -------------------------------------------------------------------------------- /src/components/BreadcrumbLayout/BreadcrumbLayout.module.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | text-decoration: none; 3 | color: #0074bd; 4 | 5 | &:hover { 6 | color: #065198; 7 | } 8 | } 9 | 10 | .breadcrumb-container { 11 | margin-top: var(--dev-center-nav-height); 12 | 13 | @media (min-width: 975px) { 14 | margin-top: 0px; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/BreadcrumbLayout/BreadcrumbLayout.tsx: -------------------------------------------------------------------------------- 1 | import { View, Text } from "@aws-amplify/ui-react"; 2 | import { Breadcrumb, BreadcrumbItem } from "./Breadcrumb"; 3 | import { useRouter } from "next/router"; 4 | import { useEffect, useState } from "react"; 5 | import styles from "./BreadcrumbLayout.module.scss"; 6 | 7 | export function BreadcrumbLayout({ 8 | breadcrumbCallback, 9 | }: { 10 | breadcrumbCallback: (pathnameArray: string[], asPathArray: string[]) => any; 11 | }) { 12 | const router = useRouter(); 13 | const [breadcrumbs, setBreadcrumbs] = useState([]); 14 | 15 | useEffect(() => { 16 | const pathnameArray = router.pathname.split("/"); 17 | pathnameArray.shift(); 18 | 19 | const asPathArray = router.asPath.split("/"); 20 | asPathArray.shift(); 21 | 22 | const result = breadcrumbCallback(pathnameArray, asPathArray); 23 | 24 | setBreadcrumbs(result); 25 | }, [router.pathname, router.asPath, breadcrumbCallback]); 26 | 27 | if (breadcrumbs?.length > 0) { 28 | return ( 29 | 34 | 35 | {breadcrumbs.map((e) => { 36 | if (e.label && e.href) { 37 | if (e.isCurrent) { 38 | return ( 39 | 44 | 45 | {e.label} 46 | 47 | 48 | ); 49 | } else { 50 | return ( 51 | 56 | {e.label} 57 | 58 | ); 59 | } 60 | } 61 | })} 62 | 63 | 64 | ); 65 | } else { 66 | return <>; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/components/BreadcrumbLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { BreadcrumbLayout } from './BreadcrumbLayout'; -------------------------------------------------------------------------------- /src/components/CardLayout/CardLayout.module.scss: -------------------------------------------------------------------------------- 1 | .home-page-card { 2 | &:hover, 3 | &:focus, 4 | &:focus-within { 5 | border-color: transparent; 6 | box-shadow: 0 0 0 1px #232f3e; 7 | cursor: pointer; 8 | } 9 | } 10 | 11 | .course-card { 12 | &:hover, 13 | &:focus { 14 | cursor: pointer; 15 | 16 | .course-title { 17 | color: #e95e07 !important; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/components/CardLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { CardLayout } from './CardLayout' -------------------------------------------------------------------------------- /src/components/CardLayoutCollection/CardLayoutCollection.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Collection, 3 | CollectionProps, 4 | useBreakpointValue, 5 | } from "@aws-amplify/ui-react"; 6 | import { CardLayoutData } from "../../types/models"; 7 | import { CardLayout } from "../CardLayout"; 8 | 9 | declare type CardLayoutCollectionProps = React.PropsWithChildren< 10 | Partial> & { 11 | cardLayouts: CardLayoutData[]; 12 | } & { 13 | isOnHomePage?: boolean; 14 | } & { 15 | filter?: (e: CardLayoutData) => boolean; 16 | } & { 17 | limit?: number; 18 | } 19 | >; 20 | 21 | export function CardLayoutCollection({ 22 | cardLayouts, 23 | isOnHomePage, 24 | filter, 25 | limit, 26 | ...rest 27 | }: CardLayoutCollectionProps) { 28 | const collectionType = useBreakpointValue({ 29 | base: "list", 30 | small: "list", 31 | medium: "list", 32 | large: "grid", 33 | }) as "grid" | "list"; 34 | 35 | let items = [...cardLayouts]; 36 | 37 | if (filter) { 38 | items = items.filter(filter); 39 | } 40 | 41 | if (limit && cardLayouts.length > limit) { 42 | items.splice(limit, items.length - limit); 43 | } 44 | 45 | return ( 46 | 47 | {(item: CardLayoutData) => ( 48 | 56 | )} 57 | 58 | ); 59 | } 60 | -------------------------------------------------------------------------------- /src/components/CardLayoutCollection/index.ts: -------------------------------------------------------------------------------- 1 | export { CardLayoutCollection } from "./CardLayoutCollection"; 2 | -------------------------------------------------------------------------------- /src/components/ContributorCollection/ContributorCollection.module.scss: -------------------------------------------------------------------------------- 1 | .contributor-card { 2 | &:hover { 3 | border: 1px #232F3E solid; 4 | box-shadow: none; 5 | cursor: pointer; 6 | 7 | .profile-pic-container { 8 | border-color: #E95E07 !important; 9 | } 10 | 11 | .contributor-name { 12 | color: #E95E07 !important; 13 | } 14 | } 15 | } 16 | 17 | .contributor-card-hyperlink { 18 | text-decoration: none; 19 | } -------------------------------------------------------------------------------- /src/components/ContributorCollection/ContributorCollection.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Contributor } from "../../models"; 3 | import ContributorLargeCustom from "./ContributorComponents/ContributorLargeCustom"; 4 | import ContributorVerticalCustom from "./ContributorComponents/ContributorVerticalCustom"; 5 | import { Collection, Card, CollectionProps } from "@aws-amplify/ui-react"; 6 | import styles from "./ContributorCollection.module.scss"; 7 | import Link from "next/link"; 8 | 9 | export declare type ContributorCollectionProps = React.PropsWithChildren< 10 | Partial> & { 11 | contributors: Contributor[]; 12 | } & { 13 | useLargeVariant?: boolean; 14 | } & { 15 | filter?: (e: Contributor) => boolean; 16 | } & { 17 | limit?: number; 18 | } 19 | >; 20 | 21 | export function ContributorCollection({ 22 | contributors, 23 | useLargeVariant, 24 | filter, 25 | limit, 26 | ...rest 27 | }: ContributorCollectionProps) { 28 | let items = [...contributors]; 29 | 30 | if (filter) { 31 | items = items.filter(filter); 32 | } 33 | 34 | if (limit && contributors.length > limit) { 35 | items.splice(limit, items.length - limit); 36 | } 37 | 38 | return ( 39 | 40 | {(item, index) => ( 41 | 51 | 70 | {useLargeVariant ? ( 71 | 74 | ) : ( 75 | 78 | )} 79 | 80 | 81 | )} 82 | 83 | ); 84 | } 85 | -------------------------------------------------------------------------------- /src/components/ContributorCollection/ContributorComponents/ContributorLargeCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Contributor } from "../../../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorLargeCustomProps = React.PropsWithChildren< 12 | Partial & { 13 | contributor?: Contributor; 14 | } & { 15 | property1?: "Vertical"; 16 | property2?: "Large"; 17 | property3?: "false" | "true"; 18 | property4?: "false" | "true"; 19 | } & { 20 | overrides?: EscapeHatchProps | undefined | null; 21 | } 22 | >; 23 | export default function ContributorLargeCustom( 24 | props: ContributorLargeCustomProps 25 | ): React.ReactElement; 26 | -------------------------------------------------------------------------------- /src/components/ContributorCollection/ContributorComponents/ContributorVerticalCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Contributor } from "../../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorVerticalCustomProps = React.PropsWithChildren & { 12 | contributor?: Contributor; 13 | } & { 14 | property1?: "Vertical"; 15 | property2?: "Regular"; 16 | property3?: "false" | "true"; 17 | property4?: "false" | "true"; 18 | } & { 19 | overrides?: EscapeHatchProps | undefined | null; 20 | }>; 21 | export default function ContributorVerticalCustom(props: ContributorVerticalCustomProps): React.ReactElement; 22 | -------------------------------------------------------------------------------- /src/components/ContributorCollection/index.ts: -------------------------------------------------------------------------------- 1 | export { ContributorCollection } from "./ContributorCollection"; 2 | -------------------------------------------------------------------------------- /src/components/CourseContributors/ContributorHorizontalCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Contributor } from "../../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorHorizontalCustomProps = React.PropsWithChildren & { 12 | contributor?: Contributor; 13 | } & { 14 | property1?: "Horizontal"; 15 | property2?: "Regular"; 16 | property3?: "false" | "true"; 17 | property4?: "false" | "true"; 18 | } & { 19 | overrides?: EscapeHatchProps | undefined | null; 20 | }>; 21 | export default function ContributorHorizontalCustom(props: ContributorHorizontalProps): React.ReactElement; 22 | -------------------------------------------------------------------------------- /src/components/CourseContributors/CourseContributors.module.scss: -------------------------------------------------------------------------------- 1 | .course-contributor { 2 | &:hover { 3 | cursor: pointer; 4 | 5 | .profile-pic-container { 6 | border-color: #E95E07 !important; 7 | } 8 | 9 | .contributor-name { 10 | color: #E95E07 !important; 11 | } 12 | } 13 | } 14 | 15 | .course-contributor-hyperlink { 16 | text-decoration: none; 17 | } -------------------------------------------------------------------------------- /src/components/CourseContributors/CourseContributors.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import { Flex, Text } from "@aws-amplify/ui-react"; 3 | import { Contributor } from "../../models"; 4 | import { default as ContributorHorizontal } from "./ContributorHorizontalCustom"; 5 | import styles from "./CourseContributors.module.scss"; 6 | 7 | export function CourseContributors({ 8 | contributors, 9 | }: { 10 | contributors: Contributor[]; 11 | }) { 12 | return ( 13 | 14 | 20 | CONTRIBUTORS 21 | 22 | {contributors.map((contributor, index) => { 23 | return ( 24 | 34 | 38 | 39 | ); 40 | })} 41 | 42 | ); 43 | } 44 | -------------------------------------------------------------------------------- /src/components/CourseContributors/index.ts: -------------------------------------------------------------------------------- 1 | export { CourseContributors } from './CourseContributors'; -------------------------------------------------------------------------------- /src/components/CoursesRouteLayout/CoursesRouteLayout.tsx: -------------------------------------------------------------------------------- 1 | import { ReactNode, useCallback } from "react"; 2 | import { MetaInfo } from "../../types/models"; 3 | import { MetaLayout } from "../MetaLayout"; 4 | 5 | export function CoursesRouteLayout({ 6 | children, 7 | metaInfo, 8 | }: { 9 | children: ReactNode; 10 | metaInfo: MetaInfo; 11 | }) { 12 | function coursesBreadcrumbCallback( 13 | pathnameArray: string[], 14 | asPathArray: string[] 15 | ) { 16 | if (pathnameArray.length === asPathArray.length) { 17 | const breadcrumbs = pathnameArray.map((path, index) => { 18 | const result = { 19 | href: "", 20 | label: "", 21 | isCurrent: index === pathnameArray.length - 1, 22 | }; 23 | 24 | result["href"] = "/" + asPathArray.slice(0, index + 1).join("/"); 25 | 26 | if (path === "courses") { 27 | result["label"] = "All courses"; 28 | } else if (path === "[courseurltitle]") { 29 | result["label"] = "Overview"; 30 | } else if (path === "[lesson]") { 31 | result["label"] = "Lesson"; 32 | } 33 | 34 | return result; 35 | }); 36 | 37 | return breadcrumbs; 38 | } 39 | } 40 | 41 | const callback = useCallback(coursesBreadcrumbCallback, []); 42 | 43 | return ( 44 | 49 | {children} 50 | 51 | ); 52 | } 53 | -------------------------------------------------------------------------------- /src/components/CoursesRouteLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { CoursesRouteLayout } from './CoursesRouteLayout'; -------------------------------------------------------------------------------- /src/components/Fallback/Fallback.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, Loader } from "@aws-amplify/ui-react"; 2 | import { MetaInfo } from "../../types/models"; 3 | import { MetaLayout } from "../MetaLayout"; 4 | 5 | export function Fallback() { 6 | const metaInfo: MetaInfo = { 7 | title: "Loading", 8 | description: "Loading site", 9 | }; 10 | 11 | return ( 12 | 13 | 24 | 32 | 33 | 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /src/components/Fallback/index.ts: -------------------------------------------------------------------------------- 1 | export { Fallback } from "./Fallback"; 2 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/AmplifyNavLink.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, Text, Button, VisuallyHidden } from "@aws-amplify/ui-react"; 2 | import styles from "../GlobalNav.module.scss"; 3 | import { AmplifyLogo, ChevronIcon } from "./icons"; 4 | 5 | export function AmplifyNavLink({ currentSite, isCollapsed, setIsCollapsed }) { 6 | const chevronRotation = isCollapsed ? "0" : "180"; 7 | return ( 8 | 9 | 15 | 16 | 17 | Amplify{" "} 18 | Dev Center 19 | 20 | {" "} 21 | {currentSite} 22 | 23 | 24 | 25 | 26 | 35 | 36 | 37 | Amplify{" "} 38 | Dev Center 39 | 40 | {" "} 41 | {currentSite} 42 | 43 | 44 | 45 | 46 | 61 | 62 | ); 63 | } 64 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/LeftNavLinks.tsx: -------------------------------------------------------------------------------- 1 | import { View, Flex, Button } from "@aws-amplify/ui-react"; 2 | import { NavMenuLink } from "./NavMenuLink"; 3 | import styles from "../GlobalNav.module.scss"; 4 | import { NavMenuItem } from "../GlobalNav"; 5 | import { ChevronIcon } from "./icons"; 6 | 7 | interface LeftNavLinksProps { 8 | leftLinks: NavMenuItem[]; 9 | isCollapsed: boolean; 10 | currentSite: string; 11 | showSecondaryNav: boolean; 12 | setShowSecondaryNav: any; 13 | } 14 | 15 | export function LeftNavLinks({ 16 | isCollapsed, 17 | leftLinks, 18 | currentSite, 19 | showSecondaryNav, 20 | setShowSecondaryNav, 21 | }: LeftNavLinksProps) { 22 | return ( 23 | 28 | {leftLinks.map((link) => ( 29 | 30 | {link.label === currentSite ? ( 31 | <> 32 | 42 | 43 | 44 | 45 | 46 | ) : ( 47 | 48 | )} 49 | 50 | ))} 51 | 52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/NavMenuLink.tsx: -------------------------------------------------------------------------------- 1 | import { Text, Link } from "@aws-amplify/ui-react"; 2 | import { Dispatch, SetStateAction } from "react"; 3 | import styles from "../GlobalNav.module.scss"; 4 | import { IconLink, ExternalLink } from "./icons"; 5 | import { NavMenuItem } from "../GlobalNav"; 6 | 7 | export function NavMenuLink({ 8 | navMenuItem, 9 | currentMenuItem = "", 10 | }: { 11 | navMenuItem: NavMenuItem; 12 | currentMenuItem: string; 13 | hasSecondaryNav?: boolean; 14 | isMobile?: boolean; 15 | setShowGlobalNav?: Dispatch>; 16 | }) { 17 | const label: string = navMenuItem.label; 18 | const linkContent: JSX.Element = 19 | navMenuItem.type === "EXTERNAL" ? ( 20 | 21 | {label} 22 | 23 | ) : ( 24 | 25 | 26 | 27 | ); 28 | 29 | if (navMenuItem.type === "DEFAULT") { 30 | return ( 31 | 32 | 41 | {label} 42 | 43 | 44 | ); 45 | } else { 46 | return ( 47 | 52 | {linkContent} 53 | 54 | ); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/RightNavLinks.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, View } from '@aws-amplify/ui-react'; 2 | import styles from '../GlobalNav.module.scss'; 3 | import { NavMenuLink } from './NavMenuLink'; 4 | import { SocialNavLinks } from './SocialNavLinks'; 5 | import { NavMenuItem } from '../GlobalNav'; 6 | 7 | interface RightNavLinksProps { 8 | rightLinks: NavMenuItem[]; 9 | socialLinks: NavMenuItem[]; 10 | isCollapsed: boolean; 11 | currentSite: string; 12 | } 13 | 14 | export function RightNavLinks({ 15 | rightLinks, 16 | isCollapsed, 17 | currentSite, 18 | socialLinks, 19 | }: RightNavLinksProps) { 20 | return ( 21 | 27 | {rightLinks.map((link) => ( 28 | 29 | 30 | 31 | ))} 32 | 33 | 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/SecondaryNav.tsx: -------------------------------------------------------------------------------- 1 | import { Button, Flex } from "@aws-amplify/ui-react"; 2 | import { AmplifyNavLink } from "./AmplifyNavLink"; 3 | import { ChevronIcon } from "./icons"; 4 | import styles from "../GlobalNav.module.scss"; 5 | import { Dispatch, SetStateAction } from "react"; 6 | 7 | interface SecondaryNavProps { 8 | currentSite: string; 9 | isCollapsed: boolean; 10 | setIsCollapsed: Dispatch>; 11 | showSecondaryNav: boolean; 12 | setShowSecondaryNav: Dispatch>; 13 | secondaryNavMobile: JSX.Element; 14 | } 15 | 16 | // TODO: Refactor this so there isn't so much duplicate code here and inside GlobalNav.tsx 17 | export function SecondaryNav({ 18 | currentSite, 19 | isCollapsed, 20 | setIsCollapsed, 21 | showSecondaryNav, 22 | setShowSecondaryNav, 23 | secondaryNavMobile, 24 | }: SecondaryNavProps) { 25 | return ( 26 | 30 | 31 | 36 | 43 | 53 | {secondaryNavMobile} 54 | 55 | 56 | 57 | ); 58 | } 59 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/SocialNavLinks.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, View } from '@aws-amplify/ui-react'; 2 | import styles from '../GlobalNav.module.scss'; 3 | import { NavMenuLink } from './NavMenuLink'; 4 | import { NavMenuItem } from '../GlobalNav'; 5 | 6 | interface SocialNavLinksProps { 7 | socialLinks: NavMenuItem[]; 8 | currentSite: string; 9 | } 10 | 11 | export function SocialNavLinks({ 12 | socialLinks, 13 | currentSite, 14 | }: SocialNavLinksProps) { 15 | return ( 16 | 17 | {socialLinks.map((link) => ( 18 | 19 | 20 | 21 | ))} 22 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/icons/AmplifyLogo.tsx: -------------------------------------------------------------------------------- 1 | import { Icon } from '@aws-amplify/ui-react'; 2 | 3 | export function AmplifyLogo() { 4 | return ( 5 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/icons/ChevronIcon.tsx: -------------------------------------------------------------------------------- 1 | import { Icon } from '@aws-amplify/ui-react'; 2 | import styles from '../../GlobalNav.module.scss'; 3 | 4 | export function ChevronIcon({ rotateDeg }: { rotateDeg?: string }) { 5 | return ( 6 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/icons/ExternalLink.tsx: -------------------------------------------------------------------------------- 1 | import { Icon, Flex } from "@aws-amplify/ui-react"; 2 | import styles from "../../GlobalNav.module.scss"; 3 | 4 | export function ExternalLink({ children }: { children: any }) { 5 | return ( 6 | 7 | {children} 8 | 17 | 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /src/components/GlobalNav/components/icons/index.ts: -------------------------------------------------------------------------------- 1 | export { ChevronIcon } from './ChevronIcon'; 2 | export { AmplifyLogo } from './AmplifyLogo'; 3 | export { IconLink } from './IconLink'; 4 | export { ExternalLink } from './ExternalLink'; 5 | -------------------------------------------------------------------------------- /src/components/GlobalNav/index.ts: -------------------------------------------------------------------------------- 1 | export { GlobalNav } from './GlobalNav'; 2 | export type { NavMenuItem } from './GlobalNav'; 3 | -------------------------------------------------------------------------------- /src/components/HeroCourse/index.ts: -------------------------------------------------------------------------------- 1 | export { HeroCourse } from './HeroCourse' -------------------------------------------------------------------------------- /src/components/Layout/Layout.module.scss: -------------------------------------------------------------------------------- 1 | .layout-container { 2 | --dev-center-nav-height: 3rem; 3 | } 4 | 5 | .main-content { 6 | margin-top: calc(24px + var(--dev-center-nav-height)); 7 | 8 | @media (min-width: 975px) { 9 | margin-top: 64px; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/components/Layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Layout } from './Layout'; -------------------------------------------------------------------------------- /src/components/LearnFooter/LearnFooter.module.scss: -------------------------------------------------------------------------------- 1 | .submit-github-issue-link { 2 | text-decoration: none; 3 | } 4 | 5 | .submit-github-issue-button { 6 | font-weight: 700; 7 | border: 1px solid var(--amplify-components-button-border-color); 8 | background-color: var(--amplify-components-button-background-color); 9 | color: var(--amplify-components-button-color); 10 | 11 | &:hover { 12 | background-color: var(--amplify-components-button-hover-background-color); 13 | border-color: var(--amplify-components-button-hover-border-color); 14 | color: var(--amplify-components-button-hover-color); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/LearnFooter/index.ts: -------------------------------------------------------------------------------- 1 | export { LearnFooter } from './LearnFooter'; -------------------------------------------------------------------------------- /src/components/LearnMarkdown/LearnMarkdown.module.scss: -------------------------------------------------------------------------------- 1 | .markdown-wrapper { 2 | img { 3 | margin-left: auto; 4 | margin-right: auto; 5 | } 6 | 7 | p { 8 | margin-bottom: 1.7em; 9 | } 10 | 11 | h1, 12 | h2, 13 | h3, 14 | h4, 15 | h5, 16 | h6 { 17 | margin-top: 2rem; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/LearnMarkdown/index.ts: -------------------------------------------------------------------------------- 1 | export { LearnMarkdown } from './LearnMarkdown'; -------------------------------------------------------------------------------- /src/components/LearnNavBar/LearnNavBar.module.scss: -------------------------------------------------------------------------------- 1 | .learn-navbar { 2 | display: flex; 3 | flex-direction: column; 4 | } 5 | 6 | .learn-logo { 7 | &:hover { 8 | cursor: pointer; 9 | } 10 | } 11 | 12 | .navbar-menu-item { 13 | display: flex; 14 | align-items: center; 15 | height: 100%; 16 | color: rgba(84, 91, 100, 1); 17 | text-decoration: none; 18 | background-color: transparent; 19 | 20 | &:hover, 21 | &:focus, 22 | &:active { 23 | color: rgba(35, 47, 62, 1); 24 | } 25 | 26 | cursor: pointer; 27 | color: rgba(84, 91, 100, 1); 28 | &:hover, 29 | &:focus, 30 | &:active { 31 | background-color: transparent; 32 | color: rgba(35, 47, 62, 1); 33 | } 34 | } 35 | 36 | .current-nav-menu-item { 37 | border-top: 2px solid transparent; 38 | border-bottom: 2px solid #ff9900; 39 | } 40 | 41 | @media (min-width: 975px) { 42 | .learn-navbar { 43 | display: flex; 44 | flex-direction: row; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/components/LearnNavBar/LearnNavBarDesktop/LearnNavBarDesktop.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from "@aws-amplify/ui-react"; 2 | import styles from "../LearnNavBar.module.scss"; 3 | import Link from "next/link"; 4 | import { useRouter } from "next/router"; 5 | 6 | export function LearnNavBarDesktop() { 7 | const router = useRouter(); 8 | 9 | return ( 10 | 22 | 32 | 37 | Learn 38 | 39 | 47 | Courses 48 | 49 | 57 | About 58 | 59 | 60 | 61 | ); 62 | } 63 | -------------------------------------------------------------------------------- /src/components/LearnNavBar/LearnNavBarDesktop/index.ts: -------------------------------------------------------------------------------- 1 | export { LearnNavBarDesktop } from "./LearnNavBarDesktop"; 2 | -------------------------------------------------------------------------------- /src/components/LearnNavBar/LearnNavBarMobile/LearnNavBarMobile.tsx: -------------------------------------------------------------------------------- 1 | import { View } from "@aws-amplify/ui-react"; 2 | import Link from "next/link"; 3 | import styles from "../LearnNavBar.module.scss"; 4 | 5 | export function LearnNavBarMobile() { 6 | return ( 7 | <> 8 | 9 | 10 | Home 11 | 12 | 13 | 14 | 15 | Courses 16 | 17 | 18 | 19 | 20 | About 21 | 22 | 23 | 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /src/components/LearnNavBar/LearnNavBarMobile/index.ts: -------------------------------------------------------------------------------- 1 | export { LearnNavBarMobile } from "./LearnNavBarMobile"; 2 | -------------------------------------------------------------------------------- /src/components/LearnNavBar/NavBarMenuItem.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from "@aws-amplify/ui-react"; 2 | import { useState } from "react"; 3 | import ExternalIconCustom from "../../ui-components/ExternalIconCustom"; 4 | import { trackExternalLink } from "../../utils/track"; 5 | import styles from "./LearnNavBar.module.scss"; 6 | 7 | export function NavBarMenuItem({ 8 | children, 9 | href, 10 | onMobile = false, 11 | }: { 12 | children: any; 13 | href: string; 14 | onMobile?: boolean; 15 | }) { 16 | // Colors for changing "ExternalIcon" 17 | const hoverColor = "rgba(35,47,62,1)"; 18 | const defaultColor = "rgba(84,91,100,1)"; 19 | const [isHoverColor, setIsHoverColor] = useState(defaultColor); 20 | 21 | return ( 22 | { 28 | trackExternalLink(href); 29 | }} 30 | > 31 | { 34 | setIsHoverColor(hoverColor); 35 | }} 36 | onMouseLeave={() => { 37 | setIsHoverColor(defaultColor); 38 | }} 39 | justifyContent={onMobile ? "space-between" : ""} 40 | > 41 | {children} 42 | 48 | 49 | 50 | ); 51 | } 52 | -------------------------------------------------------------------------------- /src/components/LessonLayout/LessonLayout.module.scss: -------------------------------------------------------------------------------- 1 | .stretch-button { 2 | justify-self: stretch; 3 | } 4 | 5 | .flex-end-button { 6 | justify-self: flex-end; 7 | } -------------------------------------------------------------------------------- /src/components/LessonLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { LessonLayout } from './LessonLayout'; -------------------------------------------------------------------------------- /src/components/LessonTableOfContents/LessonTableOfContents.module.scss: -------------------------------------------------------------------------------- 1 | .lesson-toc { 2 | border: 1px solid #a9b6b7; 3 | border-radius: 8px; 4 | padding-bottom: 16px; 5 | } 6 | 7 | .first-chapter-heading { 8 | border-bottom: 1px solid #a9b6b7; 9 | } 10 | 11 | .chapter-heading { 12 | border-top: 1px solid #a9b6b7; 13 | border-bottom: 1px solid #a9b6b7; 14 | } 15 | 16 | .lesson-link { 17 | justify-content: flex-start; 18 | border-radius: 0px; 19 | 20 | &:hover { 21 | background-color: var( 22 | --amplify-components-button-link-hover-background-color 23 | ); 24 | } 25 | } 26 | 27 | .current-lesson { 28 | background-color: #e65d11 !important; 29 | p { 30 | color: white; 31 | } 32 | 33 | &:hover, 34 | &:active, 35 | &:focus { 36 | background-color: #e65d11 !important; 37 | border: none !important; 38 | box-shadow: none; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/components/LessonTableOfContents/index.ts: -------------------------------------------------------------------------------- 1 | export { LessonTableOfContents } from "./LessonTableOfContents"; -------------------------------------------------------------------------------- /src/components/MetaLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { MetaLayout } from "./MetaLayout"; 2 | -------------------------------------------------------------------------------- /src/components/ShareThis/ShareThis.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, Text } from "@aws-amplify/ui-react"; 2 | import { useEffect, useState } from "react"; 3 | import { SocialMediaPlatform } from "../../models"; 4 | import { SocialMediaButton } from "../SocialMediaButton"; 5 | 6 | export function ShareThis() { 7 | const [href, setHref] = useState(""); 8 | 9 | useEffect(() => { 10 | setHref(encodeURIComponent(window.location.href)); 11 | }, []); 12 | 13 | const linkedInShareUrl = `https://www.linkedin.com/sharing/share-offsite/?url=${href}`; 14 | const twitterShareUrl = `https://twitter.com/intent/tweet?url=${href}`; 15 | const facebookShareUrl = `https://www.facebook.com/sharer.php?u=${href}`; 16 | 17 | return ( 18 | 19 | 25 | SHARE THIS 26 | 27 | 28 | 35 | 42 | 49 | 50 | 51 | ); 52 | } 53 | -------------------------------------------------------------------------------- /src/components/ShareThis/index.ts: -------------------------------------------------------------------------------- 1 | export {ShareThis} from './ShareThis'; -------------------------------------------------------------------------------- /src/components/SocialMediaButton/SocialMediaButton.module.scss: -------------------------------------------------------------------------------- 1 | .social-media-button { 2 | svg { 3 | top: 15%; 4 | left: 20%; 5 | } 6 | 7 | &:hover { 8 | border-color: #232F3E !important; 9 | } 10 | } -------------------------------------------------------------------------------- /src/components/SocialMediaButton/index.ts: -------------------------------------------------------------------------------- 1 | export { SocialMediaButton } from "./SocialMediaButton"; -------------------------------------------------------------------------------- /src/components/TagButton/TagButton.tsx: -------------------------------------------------------------------------------- 1 | import { useBreakpointValue } from "@aws-amplify/ui-react"; 2 | import Link from "next/link"; 3 | import { Tag } from "../../models"; 4 | 5 | export function TagButton({ 6 | tag, 7 | inCourseLayout, 8 | }: { 9 | tag: Tag; 10 | inCourseLayout: boolean; 11 | }) { 12 | const tagButtonPadding = useBreakpointValue({ 13 | base: "24px 32px", 14 | small: "24px 32px", 15 | medium: "32px 48px", 16 | }) as string; 17 | 18 | // Trying to make an tag look like a button 19 | const inCourseClasses = 20 | "amplify-button amplify-field-group__control amplify-button--link amplify-button--small tag-button"; 21 | 22 | return ( 23 | 41 | {`#${tag.name}`} 42 | 43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /src/components/TagButton/index.ts: -------------------------------------------------------------------------------- 1 | export { TagButton } from './TagButton'; -------------------------------------------------------------------------------- /src/components/YoutubeEmbed/YoutubeEmbed.module.scss: -------------------------------------------------------------------------------- 1 | .youtube-iframe { 2 | aspect-ratio: 16 / 9; 3 | width: 100%; 4 | } -------------------------------------------------------------------------------- /src/components/YoutubeEmbed/YoutubeEmbed.tsx: -------------------------------------------------------------------------------- 1 | import styles from "./YoutubeEmbed.module.scss"; 2 | 3 | export function YoutubeEmbed({ embedId }: { embedId: string }) { 4 | return ( 5 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /src/components/YoutubeEmbed/index.ts: -------------------------------------------------------------------------------- 1 | export { YoutubeEmbed } from './YoutubeEmbed'; -------------------------------------------------------------------------------- /src/components/YoutubeModal/YoutubeModal.module.scss: -------------------------------------------------------------------------------- 1 | .close-modal { 2 | &:hover { 3 | background-color: unset; 4 | } 5 | 6 | &:focus { 7 | background-color: unset; 8 | box-shadow: 0px 0px 0px 1px white; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/YoutubeModal/index.ts: -------------------------------------------------------------------------------- 1 | export { YoutubeModal } from "./YoutubeModal"; 2 | -------------------------------------------------------------------------------- /src/data/globalnav.ts: -------------------------------------------------------------------------------- 1 | export const RIGHT_NAV_LINKS = [ 2 | { 3 | type: "EXTERNAL", 4 | label: "Pricing", 5 | url: "https://aws.amazon.com/amplify/pricing", 6 | order: 6, 7 | }, 8 | { 9 | type: "EXTERNAL", 10 | label: "About AWS Amplify", 11 | url: "https://aws.amazon.com/amplify/", 12 | order: 7, 13 | }, 14 | ]; 15 | 16 | export const LEFT_NAV_LINKS = [ 17 | { 18 | type: "DEFAULT", 19 | label: "Docs", 20 | url: "https://docs.amplify.aws/", 21 | order: 1, 22 | }, 23 | { 24 | type: "DEFAULT", 25 | label: "Learn", 26 | url: "https://amplify.aws/learn", 27 | order: 2, 28 | }, 29 | { 30 | type: "DEFAULT", 31 | label: "UI Library", 32 | url: "https://ui.docs.amplify.aws/", 33 | order: 3, 34 | }, 35 | { 36 | type: "DEFAULT", 37 | label: "Contribute", 38 | url: "https://docs.amplify.aws/contribute", 39 | order: 4, 40 | } 41 | ]; 42 | 43 | export const SOCIAL_LINKS = [ 44 | { 45 | type: "ICON", 46 | label: "Discord", 47 | url: "https://discord.com/invite/amplify", 48 | order: 8, 49 | icon: "DISCORD", 50 | }, 51 | { 52 | type: "ICON", 53 | label: "Twitter", 54 | url: "https://twitter.com/AWSAmplify", 55 | order: 9, 56 | icon: "TWITTER", 57 | }, 58 | ]; 59 | -------------------------------------------------------------------------------- /src/models/index.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { initSchema } from '@aws-amplify/datastore'; 3 | import { schema } from './schema'; 4 | 5 | const SocialMediaPlatform = { 6 | "INSTAGRAM": "INSTAGRAM", 7 | "LINKEDIN": "LINKEDIN", 8 | "FACEBOOK": "FACEBOOK", 9 | "GITHUB": "GITHUB", 10 | "TWITTER": "TWITTER", 11 | "TWITCH": "TWITCH", 12 | "YOUTUBE": "YOUTUBE", 13 | "DISCORD": "DISCORD" 14 | }; 15 | 16 | const SkillLevel = { 17 | "BEGINNER": "BEGINNER", 18 | "INTERMEDIATE": "INTERMEDIATE", 19 | "ADVANCED": "ADVANCED" 20 | }; 21 | 22 | const { Tag, Course, Contributor, Lesson, CourseTag, ContributorCourse, SocialMediaLink } = initSchema(schema); 23 | 24 | export { 25 | Tag, 26 | Course, 27 | Contributor, 28 | Lesson, 29 | CourseTag, 30 | ContributorCourse, 31 | SocialMediaPlatform, 32 | SkillLevel, 33 | SocialMediaLink 34 | }; -------------------------------------------------------------------------------- /src/models/schema.d.ts: -------------------------------------------------------------------------------- 1 | import { Schema } from '@aws-amplify/datastore'; 2 | 3 | export declare const schema: Schema; -------------------------------------------------------------------------------- /src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, Heading, Text } from "@aws-amplify/ui-react"; 2 | import Link from "next/link"; 3 | import { MetaLayout } from "../components/MetaLayout"; 4 | import { MetaInfo } from "../types/models"; 5 | 6 | export default function Custom404() { 7 | // 404 page meta data 8 | const metaInfo: MetaInfo = { 9 | title: "Not Found - Learn Amplify", 10 | description: "We could not find what you were looking for on Learn Amplify", 11 | }; 12 | 13 | return ( 14 | 15 | 22 | 23 | Page Not Found 24 | 25 | 26 | The link you clicked may be broken or the page may have been removed 27 | 28 | 29 | Go to the homepage 30 | 31 | 32 | 33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "@aws-amplify/ui-react/styles.css"; 2 | import "../styles/index.scss"; 3 | import type { AppProps } from "next/app"; 4 | import { useEffect } from "react"; 5 | import { configureAdobeAnalytics, trackPageView } from "../utils/track"; 6 | import { useRouter } from "next/router"; 7 | 8 | function MyApp({ Component, pageProps }: AppProps) { 9 | const router = useRouter(); 10 | 11 | useEffect(() => { 12 | configureAdobeAnalytics(); 13 | }, []); 14 | 15 | useEffect(() => { 16 | const handleRouteChange = (url: any) => { 17 | const origin = window.location.origin; 18 | 19 | trackPageView(`Page view for ${url}`, `${origin}${url}`); 20 | }; 21 | 22 | const handleRouteChangeComplete = () => { 23 | // Work around for firefox not always scrolling to the top 24 | window.scroll({ 25 | top: 1, 26 | left: 0, 27 | behavior: "smooth", 28 | }); 29 | }; 30 | 31 | router.events.on("routeChangeStart", handleRouteChange); 32 | router.events.on("routeChangeComplete", handleRouteChangeComplete); 33 | 34 | // If the component is unmounted, unsubscribe 35 | // from the event with the `off` method: 36 | return () => { 37 | router.events.off("routeChangeStart", handleRouteChange); 38 | router.events.off("routeChangeComplete", handleRouteChangeComplete); 39 | }; 40 | }, [router]); 41 | 42 | return ; 43 | } 44 | 45 | export default MyApp; 46 | -------------------------------------------------------------------------------- /src/pages/courses/[courseurltitle]/lessons/lesson.module.scss: -------------------------------------------------------------------------------- 1 | .next-lesson-link { 2 | color: var(--amplify-components-text-color); 3 | text-decoration: none; 4 | 5 | &:hover { 6 | text-decoration: underline; 7 | } 8 | 9 | &:visited { 10 | text-decoration: none; 11 | color: var(--amplify-components-text-color); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/tags/index.tsx: -------------------------------------------------------------------------------- 1 | import { Grid, Heading, View } from "@aws-amplify/ui-react"; 2 | import { withSSRContext } from "aws-amplify"; 3 | import { Tag } from "../../models"; 4 | import { TagButton } from "../../components/TagButton"; 5 | import { serializeModel, deserializeModel } from "@aws-amplify/datastore/ssr"; 6 | import { GetStaticPropsContext, GetStaticPropsResult } from "next"; 7 | import { Context, MetaInfo } from "../../types/models"; 8 | import { configureAmplify } from "../../lib/getData"; 9 | import { MetaLayout } from "../../components/MetaLayout"; 10 | 11 | export default function TagsPage(data: { tags: Tag[] }) { 12 | const tags: Tag[] = deserializeModel(Tag, data.tags); 13 | 14 | // All tags page meta data 15 | const metaInfo: MetaInfo = { 16 | title: "All Tags", 17 | description: "Discover different tags for Amplify courses", 18 | }; 19 | 20 | return ( 21 | 22 | 30 | 45 | 46 | Tags 47 | 48 | 49 | 59 | {tags.map((tag) => ( 60 | 61 | ))} 62 | 63 | 64 | 65 | ); 66 | } 67 | 68 | interface TagsPageProps { 69 | tags: JSON; 70 | } 71 | 72 | export async function getStaticProps( 73 | context: GetStaticPropsContext & Context 74 | ): Promise> { 75 | configureAmplify(); 76 | 77 | const { DataStore } = withSSRContext(context); 78 | 79 | const tags: Tag[] = await DataStore.query(Tag); 80 | 81 | return { 82 | props: { 83 | tags: serializeModel(tags), 84 | }, 85 | }; 86 | } 87 | -------------------------------------------------------------------------------- /src/styles/globals.scss: -------------------------------------------------------------------------------- 1 | /* 2 | Josh's Custom CSS Reset 3 | https://www.joshwcomeau.com/css/custom-css-reset/ 4 | */ 5 | *, 6 | *::before, 7 | *::after { 8 | box-sizing: border-box; 9 | } 10 | 11 | * { 12 | margin: 0; 13 | } 14 | 15 | html, 16 | body { 17 | height: 100%; 18 | font-family: "Amazon Ember"; 19 | background-color: #fafafa; 20 | } 21 | 22 | body { 23 | line-height: 1.5; 24 | } 25 | 26 | img, 27 | picture, 28 | video, 29 | canvas, 30 | svg { 31 | display: block; 32 | max-width: 100%; 33 | } 34 | 35 | input, 36 | button, 37 | textarea, 38 | select { 39 | font: inherit; 40 | } 41 | p, 42 | h1, 43 | h2, 44 | h3, 45 | h4, 46 | h5, 47 | h6 { 48 | overflow-wrap: break-word; 49 | } 50 | 51 | #root, 52 | #__next { 53 | isolation: isolate; 54 | } 55 | 56 | code { 57 | font-size: 0.9rem; 58 | background-color: #f1f1eb; 59 | padding: 6px 10px; 60 | } 61 | 62 | pre { 63 | code { 64 | padding: initial; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/styles/index.scss: -------------------------------------------------------------------------------- 1 | @import "./fonts.scss"; 2 | @import "./globals.scss"; 3 | @import "./primitives/buttonStyles.scss"; 4 | @import "./pageStyles.scss"; 5 | -------------------------------------------------------------------------------- /src/styles/pageStyles.scss: -------------------------------------------------------------------------------- 1 | .page-heading { 2 | font-family: "Amazon Ember"; 3 | font-weight: 300; 4 | } 5 | 6 | .action-layout-heading { 7 | font-family: "Amazon Ember"; 8 | font-weight: 300; 9 | } 10 | -------------------------------------------------------------------------------- /src/styles/primitives/buttonStyles.scss: -------------------------------------------------------------------------------- 1 | /* CSS to match Amplify UI buttons to Figma */ 2 | 3 | .tag-button { 4 | border: 1px solid #a9b6b7 !important; 5 | color: #0074bd !important; 6 | white-space: nowrap; 7 | 8 | &:hover { 9 | border-color: #065198 !important; 10 | } 11 | } 12 | 13 | // Overwrite "Default" button 14 | button[data-variation="default"][type="button"] { 15 | &:hover { 16 | border-color: hsl(213, 28%, 19%) !important; 17 | } 18 | } 19 | 20 | // Overwrite "Primary button 21 | button[data-variation="primary"][type="button"] { 22 | &:hover { 23 | border-color: none !important; 24 | } 25 | } 26 | 27 | .link-button { 28 | text-decoration: none; 29 | } 30 | -------------------------------------------------------------------------------- /src/types/models.d.ts: -------------------------------------------------------------------------------- 1 | import { ParsedUrlQuery } from "querystring"; 2 | import { Course, Tag } from "../models"; 3 | 4 | export interface MetaInfo { 5 | title: string; 6 | description: string; 7 | image?: string; 8 | url?: string; 9 | author?: string; 10 | } 11 | 12 | /** 13 | * Type for CardLayout component to render 14 | * course info and tags 15 | */ 16 | export type CardLayoutData = { 17 | course: Course; 18 | tags: Tag[]; 19 | }; 20 | 21 | /** 22 | * Type of context used for withSSRContext 23 | */ 24 | export declare type Context = { 25 | req?: any; 26 | modules?: any[]; 27 | }; 28 | 29 | interface CoursePageParams extends ParsedUrlQuery { 30 | courseurltitle: string; 31 | } 32 | 33 | interface CoursePageProps { 34 | course: JSON; 35 | lessons: JSON; 36 | tags: JSON; 37 | contributors: JSON; 38 | cardLayoutData: string; 39 | } 40 | -------------------------------------------------------------------------------- /src/ui-components/AmplifyBorderLogo.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type AmplifyBorderLogoProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function AmplifyBorderLogo(props: AmplifyBorderLogoProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/AmplifyBorderLogo.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function AmplifyBorderLogo(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/ArrowRightIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type ArrowRightIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function ArrowRightIcon(props: ArrowRightIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/ArrowRightIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function ArrowRightIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /src/ui-components/ArrowRightIconCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type ArrowRightIconCustomProps = React.PropsWithChildren< 11 | Partial & { 12 | overrides?: EscapeHatchProps | undefined | null; 13 | } 14 | >; 15 | export default function ArrowRightIconCustom( 16 | props: ArrowRightIconCustomProps 17 | ): React.ReactElement; 18 | -------------------------------------------------------------------------------- /src/ui-components/ArrowRightIconCustom.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function ArrowRightIconCustom(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/CardLayout.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Course } from "../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type CardLayoutProps = React.PropsWithChildren & { 12 | course?: Course; 13 | } & { 14 | isActive?: "false" | "true"; 15 | isHover?: "false" | "true"; 16 | } & { 17 | overrides?: EscapeHatchProps | undefined | null; 18 | }>; 19 | export default function CardLayout(props: CardLayoutProps): React.ReactElement; 20 | -------------------------------------------------------------------------------- /src/ui-components/CardLayoutCollection.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { CardLayoutProps } from "./CardLayout"; 10 | import { CollectionProps } from "@aws-amplify/ui-react"; 11 | export declare type CardLayoutCollectionProps = React.PropsWithChildren> & { 12 | items?: any[]; 13 | overrideItems?: (collectionItem: { 14 | item: any; 15 | index: number; 16 | }) => CardLayoutProps; 17 | } & { 18 | overrides?: EscapeHatchProps | undefined | null; 19 | }>; 20 | export default function CardLayoutCollection(props: CardLayoutCollectionProps): React.ReactElement; 21 | -------------------------------------------------------------------------------- /src/ui-components/CardLayoutCollection.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { SortDirection } from "@aws-amplify/datastore"; 10 | import { Contributor, Course, Tag } from "../models"; 11 | import { 12 | getOverrideProps, 13 | useDataStoreBinding, 14 | } from "@aws-amplify/ui-react/internal"; 15 | import CardLayout from "./CardLayout"; 16 | import { Collection } from "@aws-amplify/ui-react"; 17 | export default function CardLayoutCollection(props) { 18 | const { items: itemsProp, overrideItems, overrides, ...rest } = props; 19 | const itemsPagination = { 20 | sort: (s) => s.dateCreated(SortDirection.DESCENDING), 21 | }; 22 | const contributorItems = useDataStoreBinding({ 23 | type: "collection", 24 | model: Contributor, 25 | }).items; 26 | const tagItems = useDataStoreBinding({ 27 | type: "collection", 28 | model: Tag, 29 | }).items; 30 | const itemsDataStore = useDataStoreBinding({ 31 | type: "collection", 32 | model: Course, 33 | pagination: itemsPagination, 34 | }).items.map((item) => ({ 35 | ...item, 36 | contributors: contributorItems.filter((model) => model.course === item.id), 37 | courseTags: tagItems.filter((model) => model.course === item.id), 38 | })); 39 | const items = itemsProp !== undefined ? itemsProp : itemsDataStore; 40 | return ( 41 | 54 | {(item, index) => ( 55 | 63 | )} 64 | 65 | ); 66 | } 67 | -------------------------------------------------------------------------------- /src/ui-components/CloseIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ViewProps } from "@aws-amplify/ui-react"; 10 | export declare type CloseIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function CloseIcon(props: CloseIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/ContributorHorizontal.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Contributor } from "../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorHorizontalProps = React.PropsWithChildren & { 12 | contributor?: Contributor; 13 | } & { 14 | property1?: "Horizontal"; 15 | property2?: "Regular"; 16 | property3?: "false" | "true"; 17 | property4?: "false" | "true"; 18 | } & { 19 | overrides?: EscapeHatchProps | undefined | null; 20 | }>; 21 | export default function ContributorHorizontal(props: ContributorHorizontalProps): React.ReactElement; 22 | -------------------------------------------------------------------------------- /src/ui-components/ContributorLarge.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Contributor } from "../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorLargeProps = React.PropsWithChildren & { 12 | contributor?: Contributor; 13 | } & { 14 | property1?: "Vertical"; 15 | property2?: "Large"; 16 | property3?: "false" | "true"; 17 | property4?: "false" | "true"; 18 | } & { 19 | overrides?: EscapeHatchProps | undefined | null; 20 | }>; 21 | export default function ContributorLarge(props: ContributorLargeProps): React.ReactElement; 22 | -------------------------------------------------------------------------------- /src/ui-components/ContributorLargeCollection.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ContributorLargeProps } from "./ContributorLarge"; 10 | import { CollectionProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorLargeCollectionProps = React.PropsWithChildren> & { 12 | items?: any[]; 13 | overrideItems?: (collectionItem: { 14 | item: any; 15 | index: number; 16 | }) => ContributorLargeProps; 17 | } & { 18 | overrides?: EscapeHatchProps | undefined | null; 19 | }>; 20 | export default function ContributorLargeCollection(props: ContributorLargeCollectionProps): React.ReactElement; 21 | -------------------------------------------------------------------------------- /src/ui-components/ContributorLargeCollection.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { Contributor, Course } from "../models"; 10 | import { 11 | getOverrideProps, 12 | useDataStoreBinding, 13 | } from "@aws-amplify/ui-react/internal"; 14 | import ContributorLarge from "./ContributorLarge"; 15 | import { Collection } from "@aws-amplify/ui-react"; 16 | export default function ContributorLargeCollection(props) { 17 | const { items: itemsProp, overrideItems, overrides, ...rest } = props; 18 | const courseItems = useDataStoreBinding({ 19 | type: "collection", 20 | model: Course, 21 | }).items; 22 | const itemsDataStore = useDataStoreBinding({ 23 | type: "collection", 24 | model: Contributor, 25 | }).items.map((item) => ({ 26 | ...item, 27 | courses: courseItems.filter((model) => model.contributor === item.id), 28 | })); 29 | const items = itemsProp !== undefined ? itemsProp : itemsDataStore; 30 | return ( 31 | 42 | {(item, index) => ( 43 | 48 | )} 49 | 50 | ); 51 | } 52 | -------------------------------------------------------------------------------- /src/ui-components/ContributorVertical.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Contributor } from "../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorVerticalProps = React.PropsWithChildren & { 12 | contributor?: Contributor; 13 | } & { 14 | property1?: "Vertical"; 15 | property2?: "Regular"; 16 | property3?: "false" | "true"; 17 | property4?: "false" | "true"; 18 | } & { 19 | overrides?: EscapeHatchProps | undefined | null; 20 | }>; 21 | export default function ContributorVertical(props: ContributorVerticalProps): React.ReactElement; 22 | -------------------------------------------------------------------------------- /src/ui-components/ContributorVerticalCollection.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ContributorVerticalProps } from "./ContributorVertical"; 10 | import { CollectionProps } from "@aws-amplify/ui-react"; 11 | export declare type ContributorVerticalCollectionProps = React.PropsWithChildren> & { 12 | items?: any[]; 13 | overrideItems?: (collectionItem: { 14 | item: any; 15 | index: number; 16 | }) => ContributorVerticalProps; 17 | } & { 18 | overrides?: EscapeHatchProps | undefined | null; 19 | }>; 20 | export default function ContributorVerticalCollection(props: ContributorVerticalCollectionProps): React.ReactElement; 21 | -------------------------------------------------------------------------------- /src/ui-components/ContributorVerticalCollection.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { Contributor, Course } from "../models"; 10 | import { 11 | getOverrideProps, 12 | useDataStoreBinding, 13 | } from "@aws-amplify/ui-react/internal"; 14 | import ContributorVertical from "./ContributorVertical"; 15 | import { Collection } from "@aws-amplify/ui-react"; 16 | export default function ContributorVerticalCollection(props) { 17 | const { items: itemsProp, overrideItems, overrides, ...rest } = props; 18 | const courseItems = useDataStoreBinding({ 19 | type: "collection", 20 | model: Course, 21 | }).items; 22 | const itemsDataStore = useDataStoreBinding({ 23 | type: "collection", 24 | model: Contributor, 25 | }).items.map((item) => ({ 26 | ...item, 27 | courses: courseItems.filter((model) => model.contributor === item.id), 28 | })); 29 | const items = itemsProp !== undefined ? itemsProp : itemsDataStore; 30 | return ( 31 | 42 | {(item, index) => ( 43 | 48 | )} 49 | 50 | ); 51 | } 52 | -------------------------------------------------------------------------------- /src/ui-components/DiscordIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type DiscordIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function DiscordIcon(props: DiscordIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/DiscordIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function DiscordIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/ExternalIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ViewProps } from "@aws-amplify/ui-react"; 10 | export declare type ExternalIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function ExternalIcon(props: ExternalIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/ExternalIconCustom.d.ts: -------------------------------------------------------------------------------- 1 | // Custom ExternalIcon 2 | 3 | import React from "react"; 4 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 5 | import { ViewProps } from "@aws-amplify/ui-react"; 6 | export declare type ExternalIconProps = React.PropsWithChildren & { 7 | overrides?: EscapeHatchProps | undefined | null; 8 | }>; 9 | export default function ExternalIcon(props: ExternalIconProps): React.ReactElement; 10 | -------------------------------------------------------------------------------- /src/ui-components/FacebookIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type FacebookIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function FacebookIcon(props: FacebookIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/FacebookIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function FacebookIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/GithubIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ViewProps } from "@aws-amplify/ui-react"; 10 | export declare type GithubIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function GithubIcon(props: GithubIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/GithubIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon, View } from "@aws-amplify/ui-react"; 11 | export default function GithubIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 22 | 31 | 49 | 50 | 51 | ); 52 | } 53 | -------------------------------------------------------------------------------- /src/ui-components/HeartIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type HeartIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function HeartIcon(props: HeartIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/HeroLayout.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Course } from "../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type HeroLayoutProps = React.PropsWithChildren & { 12 | course?: Course; 13 | } & { 14 | variation?: "default" | "mobile"; 15 | } & { 16 | overrides?: EscapeHatchProps | undefined | null; 17 | }>; 18 | export default function HeroLayout(props: HeroLayoutProps): React.ReactElement; 19 | -------------------------------------------------------------------------------- /src/ui-components/HeroLayoutCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { Course, Tag } from "../models"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type HeroLayoutProps = React.PropsWithChildren< 12 | Partial & { 13 | course: Course; 14 | } & { 15 | tags: Tag[]; 16 | } & { 17 | variation?: "default" | "mobile"; 18 | } & { 19 | overrides?: EscapeHatchProps | undefined | null; 20 | } 21 | >; 22 | export default function HeroLayout(props: HeroLayoutProps): React.ReactElement; 23 | -------------------------------------------------------------------------------- /src/ui-components/HeroLayoutMobile.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { Course } from "../models"; 9 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 10 | import { FlexProps } from "@aws-amplify/ui-react"; 11 | export declare type HeroLayoutMobileProps = React.PropsWithChildren & { 12 | course?: Course; 13 | level?: String; 14 | } & { 15 | overrides?: EscapeHatchProps | undefined | null; 16 | }>; 17 | export default function HeroLayoutMobile(props: HeroLayoutMobileProps): React.ReactElement; 18 | -------------------------------------------------------------------------------- /src/ui-components/InstagramIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type InstagramIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function InstagramIcon(props: InstagramIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/LearnCounter.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnCounterProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function LearnCounter(props: LearnCounterProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/LearnCounter.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Flex, Text } from "@aws-amplify/ui-react"; 11 | export default function LearnCounter(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 23 | 42 | 59 | 60 | ); 61 | } 62 | -------------------------------------------------------------------------------- /src/ui-components/LearnFooter.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnFooterProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function LearnFooter(props: LearnFooterProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/LearnFooterCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnFooterCustomProps = React.PropsWithChildren< 11 | Partial & { 12 | socialMediaButtons: JSX.Element[]; 13 | } & { 14 | submitGithubIssueButton: JSX.Element; 15 | } & { 16 | overrides?: EscapeHatchProps | undefined | null; 17 | } 18 | >; 19 | export default function LearnFooterCustom( 20 | props: LearnFooterCustomProps 21 | ): React.ReactElement; 22 | -------------------------------------------------------------------------------- /src/ui-components/LearnFooterMobile.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnFooterMobileProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function LearnFooterMobile(props: LearnFooterMobileProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/LearnFooterMobileCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | import { SocialMediaButton } from "../components/SocialMediaButton"; 11 | export declare type LearnFooterMobileCustomProps = React.PropsWithChildren< 12 | Partial & { 13 | socialMediaButtons: JSX.Element[]; 14 | } & { 15 | submitGithubIssueButton: JSX.Element; 16 | } & { 17 | overrides?: EscapeHatchProps | undefined | null; 18 | } 19 | >; 20 | export default function LearnFooterCustomMobile( 21 | props: LearnFooterMobileCustomProps 22 | ): React.ReactElement; 23 | -------------------------------------------------------------------------------- /src/ui-components/LearnLogo.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnLogoProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function LearnLogo(props: LearnLogoProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/LearnMenuItem.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnMenuItemProps = React.PropsWithChildren & { 11 | isDisabled?: "false" | "true"; 12 | isHover?: "false" | "true"; 13 | } & { 14 | overrides?: EscapeHatchProps | undefined | null; 15 | }>; 16 | export default function LearnMenuItem(props: LearnMenuItemProps): React.ReactElement; 17 | -------------------------------------------------------------------------------- /src/ui-components/LearnSocial.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ViewProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnSocialProps = React.PropsWithChildren & { 11 | isActive?: "false" | "true"; 12 | isHover?: "false" | "true"; 13 | } & { 14 | overrides?: EscapeHatchProps | undefined | null; 15 | }>; 16 | export default function LearnSocial(props: LearnSocialProps): React.ReactElement; 17 | -------------------------------------------------------------------------------- /src/ui-components/LearnSocial.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { 10 | getOverrideProps, 11 | getOverridesFromVariants, 12 | mergeVariantsAndOverrides, 13 | } from "@aws-amplify/ui-react/internal"; 14 | import GithubIcon from "./GithubIcon"; 15 | import { View } from "@aws-amplify/ui-react"; 16 | export default function LearnSocial(props) { 17 | const { overrides: overridesProp, ...rest } = props; 18 | const variants = [ 19 | { 20 | overrides: { GithubIcon: {}, LearnSocial: {} }, 21 | variantValues: { isHover: "false", isActive: "false" }, 22 | }, 23 | { 24 | overrides: { 25 | GithubIcon: {}, 26 | LearnSocial: { 27 | border: "1px SOLID rgba(35,47,62,1)", 28 | backgroundColor: "rgba(242,243,243,1)", 29 | }, 30 | }, 31 | variantValues: { isHover: "true", isActive: "false" }, 32 | }, 33 | { 34 | overrides: { 35 | GithubIcon: {}, 36 | LearnSocial: { 37 | border: "1px SOLID rgba(35,47,62,1)", 38 | backgroundColor: "rgba(233,236,236,1)", 39 | }, 40 | }, 41 | variantValues: { isHover: "false", isActive: "true" }, 42 | }, 43 | ]; 44 | const overrides = mergeVariantsAndOverrides( 45 | getOverridesFromVariants(variants, props), 46 | overridesProp || {} 47 | ); 48 | return ( 49 | 59 | 68 | 69 | ); 70 | } 71 | -------------------------------------------------------------------------------- /src/ui-components/LearnSocialBorderless.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ViewProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnSocialBorderlessProps = React.PropsWithChildren & { 11 | isActive?: "false" | "true"; 12 | isHover?: "false" | "true"; 13 | } & { 14 | overrides?: EscapeHatchProps | undefined | null; 15 | }>; 16 | export default function LearnSocialBorderless(props: LearnSocialBorderlessProps): React.ReactElement; 17 | -------------------------------------------------------------------------------- /src/ui-components/LearnSocialBorderless.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { 10 | getOverrideProps, 11 | getOverridesFromVariants, 12 | mergeVariantsAndOverrides, 13 | } from "@aws-amplify/ui-react/internal"; 14 | import GithubIcon from "./GithubIcon"; 15 | import { View } from "@aws-amplify/ui-react"; 16 | export default function LearnSocialBorderless(props) { 17 | const { overrides: overridesProp, ...rest } = props; 18 | const variants = [ 19 | { 20 | overrides: { GithubIcon: {}, LearnSocialBorderless: {} }, 21 | variantValues: { isHover: "false", isActive: "false" }, 22 | }, 23 | { 24 | overrides: { 25 | GithubIcon: {}, 26 | LearnSocialBorderless: { backgroundColor: "rgba(233,236,236,1)" }, 27 | }, 28 | variantValues: { isHover: "true", isActive: "false" }, 29 | }, 30 | { 31 | overrides: { 32 | GithubIcon: {}, 33 | LearnSocialBorderless: { backgroundColor: "rgba(214,220,220,1)" }, 34 | }, 35 | variantValues: { isHover: "false", isActive: "true" }, 36 | }, 37 | ]; 38 | const overrides = mergeVariantsAndOverrides( 39 | getOverridesFromVariants(variants, props), 40 | overridesProp || {} 41 | ); 42 | return ( 43 | 52 | 61 | 62 | ); 63 | } 64 | -------------------------------------------------------------------------------- /src/ui-components/LearnSocialCustom.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { ViewProps } from "@aws-amplify/ui-react"; 10 | export declare type LearnSocialCustomProps = React.PropsWithChildren & { 11 | isActive?: "false" | "true"; 12 | isHover?: "false" | "true"; 13 | } & { 14 | showBorder: boolean; 15 | } & { 16 | overrides?: EscapeHatchProps | undefined | null; 17 | }>; 18 | export default function LearnSocialCustom(props: LearnSocialCustomProps): React.ReactElement; 19 | -------------------------------------------------------------------------------- /src/ui-components/LearnSocialCustom.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { 10 | getOverrideProps, 11 | getOverridesFromVariants, 12 | mergeVariantsAndOverrides, 13 | } from "@aws-amplify/ui-react/internal"; 14 | import { View } from "@aws-amplify/ui-react"; 15 | export default function LearnSocialCustom(props) { 16 | const { children, showBorder, overrides: overridesProp, ...rest } = props; 17 | const variants = [ 18 | { 19 | overrides: { GithubIcon: {}, LearnSocial: {} }, 20 | variantValues: { isHover: "false", isActive: "false" }, 21 | }, 22 | { 23 | overrides: { 24 | GithubIcon: {}, 25 | LearnSocial: { 26 | border: "1px SOLID rgba(35,47,62,1)", 27 | backgroundColor: "rgba(242,243,243,1)", 28 | }, 29 | }, 30 | variantValues: { isHover: "true", isActive: "false" }, 31 | }, 32 | { 33 | overrides: { 34 | GithubIcon: {}, 35 | LearnSocial: { 36 | border: "1px SOLID rgba(35,47,62,1)", 37 | backgroundColor: "rgba(233,236,236,1)", 38 | }, 39 | }, 40 | variantValues: { isHover: "false", isActive: "true" }, 41 | }, 42 | ]; 43 | const overrides = mergeVariantsAndOverrides( 44 | getOverridesFromVariants(variants, props), 45 | overridesProp || {} 46 | ); 47 | return ( 48 | 57 | {children} 58 | 59 | ); 60 | } 61 | -------------------------------------------------------------------------------- /src/ui-components/LinkedinIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type LinkedinIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function LinkedinIcon(props: LinkedinIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/LinkedinIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function LinkedinIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/MadeLabel.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type MadeLabelProps = React.PropsWithChildren & { 11 | isActive?: "false" | "true"; 12 | isHover?: "false" | "true"; 13 | } & { 14 | overrides?: EscapeHatchProps | undefined | null; 15 | }>; 16 | export default function MadeLabel(props: MadeLabelProps): React.ReactElement; 17 | -------------------------------------------------------------------------------- /src/ui-components/MenuIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type MenuIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function MenuIcon(props: MenuIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/MenuIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function MenuIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /src/ui-components/NavBar.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type NavBarProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function NavBar(props: NavBarProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/NavBarMobileCollapsed.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type NavBarMobileCollapsedProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function NavBarMobileCollapsed(props: NavBarMobileCollapsedProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/NavBarMobileExpanded.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { FlexProps } from "@aws-amplify/ui-react"; 10 | export declare type NavBarMobileExpandedProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function NavBarMobileExpanded(props: NavBarMobileExpandedProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/PlayIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type PlayIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function PlayIcon(props: PlayIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/PlayIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function PlayIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /src/ui-components/TwitchIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type TwitchIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function TwitchIcon(props: TwitchIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/TwitchIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function TwitchIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/TwitterIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type TwitterIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function TwitterIcon(props: TwitterIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/TwitterIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function TwitterIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/YouTubeIcon.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | import React from "react"; 8 | import { EscapeHatchProps } from "@aws-amplify/ui-react/internal"; 9 | import { IconProps } from "@aws-amplify/ui-react"; 10 | export declare type YouTubeIconProps = React.PropsWithChildren & { 11 | overrides?: EscapeHatchProps | undefined | null; 12 | }>; 13 | export default function YouTubeIcon(props: YouTubeIconProps): React.ReactElement; 14 | -------------------------------------------------------------------------------- /src/ui-components/YouTubeIcon.jsx: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | /* eslint-disable */ 8 | import React from "react"; 9 | import { getOverrideProps } from "@aws-amplify/ui-react/internal"; 10 | import { Icon } from "@aws-amplify/ui-react"; 11 | export default function YouTubeIcon(props) { 12 | const { overrides, ...rest } = props; 13 | return ( 14 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui-components/studioTheme.js.d.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | * The contents of this file were generated with Amplify Studio. * 3 | * Please refrain from making any modifications to this file. * 4 | * Any changes to this file will be overwritten when running amplify pull. * 5 | **************************************************************************/ 6 | 7 | declare const _default: any; 8 | export default _default; 9 | -------------------------------------------------------------------------------- /src/utils/capitalizeEnum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Helper function to capitalize enums coming from Amplify. 3 | * @param {string | undefined | null} word Enum that needs to be capitalized 4 | * @returns The capitalized enum 5 | */ 6 | export function capitalizeEnum(word: string | undefined | null) { 7 | if (word) { 8 | return ( 9 | word.toLowerCase().charAt(0).toUpperCase() + word.slice(1).toLowerCase() 10 | ); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/utils/createCourseTitleUri.tsx: -------------------------------------------------------------------------------- 1 | const COURSE_ID_PREFIX_LENGTH = 5; 2 | 3 | /** 4 | * Helper function to create the [courseurltitle] path using the course.title and course.id. 5 | * @param courseTitle {string} The course title. 6 | * @param courseId {string} The Course ID. 7 | * @returns {string} The modified string representing the coursetitle. 8 | */ 9 | export function createCourseTitleUri( 10 | courseTitle: string, 11 | courseId: string 12 | ): string { 13 | const courseTitleWithDashes = courseTitle.replace(/ /g, "-"); 14 | const courseIdPrefix = courseId.substring(0, COURSE_ID_PREFIX_LENGTH); 15 | 16 | return encodeURIComponent(`${courseTitleWithDashes}-${courseIdPrefix}`); 17 | } 18 | -------------------------------------------------------------------------------- /src/utils/createGithubIssueLink.ts: -------------------------------------------------------------------------------- 1 | const NEW_GITHUB_ISSUE_LINK = 2 | "https://github.com/aws-amplify/community/issues/new"; 3 | 4 | export function createGithubIssueLink(): string { 5 | const params = [ 6 | "title=[Bug] TITLE_HERE", 7 | `body=${encodeURIComponent(`**Issue**:\n\n`)}`, 8 | ]; 9 | 10 | return `${NEW_GITHUB_ISSUE_LINK}?${params.join("&")}`; 11 | } 12 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { createCourseTitleUri } from "./createCourseTitleUri"; 2 | export { capitalizeEnum } from "./capitalizeEnum"; 3 | export { createGithubIssueLink } from "./createGithubIssueLink"; 4 | -------------------------------------------------------------------------------- /src/utils/track.ts: -------------------------------------------------------------------------------- 1 | let configured = false; 2 | 3 | interface PageViewOptions { 4 | event: Event; 5 | page: Page; 6 | data?: Record; 7 | } 8 | 9 | interface CustomEventOptions { 10 | event: Event; 11 | data?: Record; 12 | } 13 | 14 | interface Page { 15 | pageURL: string; 16 | pageType?: string; 17 | } 18 | 19 | interface Event { 20 | name: string; 21 | type: string; 22 | description?: string; 23 | } 24 | declare global { 25 | interface Window { 26 | s: any; 27 | AWSCShortbread: any; 28 | AWSMA: any; 29 | } 30 | } 31 | 32 | export function configureAdobeAnalytics(): void { 33 | if (!configured) { 34 | if ( 35 | typeof window !== "undefined" && 36 | typeof window.AWSCShortbread !== "undefined" 37 | ) { 38 | window 39 | .AWSCShortbread({ 40 | domain: ".amplify.aws", 41 | }) 42 | .checkForCookieConsent(); 43 | if (typeof window.s !== "undefined") { 44 | window.s.trackExternalLinks = false; 45 | } 46 | 47 | configured = true; 48 | } 49 | } 50 | } 51 | 52 | function trackCustomEvent(opt: CustomEventOptions): void { 53 | try { 54 | window.AWSMA.ready(() => { 55 | document.dispatchEvent( 56 | new CustomEvent(window.AWSMA.TRIGGER_EVENT, { detail: opt }) 57 | ); 58 | }); 59 | } catch (error) { 60 | // don't want to error for analytics events 61 | } 62 | } 63 | 64 | export function trackPageView(eventName: string, pageURL: string): void { 65 | const opt: PageViewOptions = { 66 | event: { 67 | type: "pageview", 68 | name: eventName, 69 | }, 70 | page: { 71 | pageURL: pageURL, 72 | }, 73 | }; 74 | 75 | trackCustomEvent(opt); 76 | } 77 | 78 | export function trackExternalLink(hrefTo: string): void { 79 | if (typeof window !== "undefined" && typeof window.s != "undefined") { 80 | const { s } = window; 81 | s.linkTrackVars = 82 | "prop39,prop41,prop50,prop61,prop62,eVar39,eVar41,eVar50,eVar61,eVar62,eVar69"; 83 | s.tl(true, "e", hrefTo); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | --------------------------------------------------------------------------------