├── .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 |
--------------------------------------------------------------------------------
/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 |
15 |
19 |
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 |
14 |
15 |
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 |
9 |
15 |
16 |
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 |
--------------------------------------------------------------------------------