├── .env.example ├── .eslintignore ├── .eslintrc.cjs ├── .github └── workflows │ └── test.yml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .yarn ├── plugins │ └── @yarnpkg │ │ └── plugin-interactive-tools.cjs └── releases │ └── yarn-3.3.1.cjs ├── .yarnrc.yml ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── Taskfile.yaml ├── WARP.md ├── biome.json ├── netlify.toml ├── package.json ├── playwright.config.ts ├── renovate.json ├── src ├── app.d.ts ├── app.html ├── components │ ├── Author.svelte │ ├── Error.svelte │ ├── Footer.svelte │ ├── FullPhoto.svelte │ ├── Link.svelte │ ├── Navigation.svelte │ ├── PhotoGrid.svelte │ ├── Thumbnail.svelte │ ├── Title.svelte │ └── Warning.svelte ├── lib │ ├── adapters │ │ ├── Errors.ts │ │ ├── Gateway.ts │ │ └── index.ts │ ├── domain │ │ ├── Dimensions.ts │ │ ├── Group.ts │ │ ├── Photo.ts │ │ └── Schema.ts │ └── services │ │ ├── PhotoBrowser.ts │ │ ├── PhotoCalculator.ts │ │ └── index.ts └── routes │ ├── +error.svelte │ ├── +layout.svelte │ ├── +page.svelte │ ├── +page.ts │ ├── album │ └── [id] │ │ ├── +page.svelte │ │ └── +page.ts │ └── photo │ └── [id] │ ├── +page.svelte │ └── +page.ts ├── static └── favicon.png ├── stryker.config.json ├── svelte.config.js ├── tests ├── components │ ├── __screenshots__ │ │ ├── listing.test.ts │ │ │ ├── Listing-Page-displays-a-warning-with-empty-album-set-1.png │ │ │ ├── Listing-Page-displays-the-plural-number-of-photos-per-album-1.png │ │ │ ├── Listing-Page-displays-the-singular-number-of-photos-per-album-1.png │ │ │ ├── Listing-Page-lists-all-the-photos-with-accessible-screen-reader-texts-1.png │ │ │ └── Listing-Page-photos-in-page-link-to-a-single-photo-page-1.png │ │ └── photo.test.ts │ │ │ ├── Single-photo-page-contains-a-link-back-to-the-album-page-1.png │ │ │ ├── Single-photo-page-contains-a-photo-caption-with-title-and-size-1.png │ │ │ ├── Single-photo-page-contains-a-photo-with-accessible-alternative-text-1.png │ │ │ └── Single-photo-page-wraps-photo-as-a-figure-1.png │ ├── albums.test.ts │ ├── helpers.ts │ ├── listing.test.ts │ └── photo.test.ts ├── e2e │ ├── albums.spec.ts │ ├── layout.spec.ts │ ├── listing.spec.ts │ └── photo.spec.ts ├── helpers.ts └── unit │ ├── Dimensions.test.ts │ ├── FakeGateway.ts │ ├── Gateway.test.ts │ ├── PhotoBrowser.test.ts │ └── PhotoCalculator.test.ts ├── tsconfig.json ├── vite.config.js ├── vitest.config.components.ts ├── vitest.config.ts ├── vitest.config.unit.ts └── yarn.lock /.env.example: -------------------------------------------------------------------------------- 1 | PUBLIC_PHOTO_API_URL = 'https://jsonplaceholder.typicode.com' 2 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.eslintignore -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.eslintrc.cjs -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.github/workflows/test.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.gitignore -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.prettierignore -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.prettierrc -------------------------------------------------------------------------------- /.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs -------------------------------------------------------------------------------- /.yarn/releases/yarn-3.3.1.cjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.yarn/releases/yarn-3.3.1.cjs -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/.yarnrc.yml -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/CHANGELOG.md -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/LICENSE.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/README.md -------------------------------------------------------------------------------- /Taskfile.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/Taskfile.yaml -------------------------------------------------------------------------------- /WARP.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/WARP.md -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/biome.json -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/netlify.toml -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/package.json -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/playwright.config.ts -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/renovate.json -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/app.d.ts -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/app.html -------------------------------------------------------------------------------- /src/components/Author.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Author.svelte -------------------------------------------------------------------------------- /src/components/Error.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Error.svelte -------------------------------------------------------------------------------- /src/components/Footer.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Footer.svelte -------------------------------------------------------------------------------- /src/components/FullPhoto.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/FullPhoto.svelte -------------------------------------------------------------------------------- /src/components/Link.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Link.svelte -------------------------------------------------------------------------------- /src/components/Navigation.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Navigation.svelte -------------------------------------------------------------------------------- /src/components/PhotoGrid.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/PhotoGrid.svelte -------------------------------------------------------------------------------- /src/components/Thumbnail.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Thumbnail.svelte -------------------------------------------------------------------------------- /src/components/Title.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Title.svelte -------------------------------------------------------------------------------- /src/components/Warning.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/components/Warning.svelte -------------------------------------------------------------------------------- /src/lib/adapters/Errors.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/adapters/Errors.ts -------------------------------------------------------------------------------- /src/lib/adapters/Gateway.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/adapters/Gateway.ts -------------------------------------------------------------------------------- /src/lib/adapters/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/adapters/index.ts -------------------------------------------------------------------------------- /src/lib/domain/Dimensions.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/domain/Dimensions.ts -------------------------------------------------------------------------------- /src/lib/domain/Group.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/domain/Group.ts -------------------------------------------------------------------------------- /src/lib/domain/Photo.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/domain/Photo.ts -------------------------------------------------------------------------------- /src/lib/domain/Schema.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/domain/Schema.ts -------------------------------------------------------------------------------- /src/lib/services/PhotoBrowser.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/services/PhotoBrowser.ts -------------------------------------------------------------------------------- /src/lib/services/PhotoCalculator.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/services/PhotoCalculator.ts -------------------------------------------------------------------------------- /src/lib/services/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/lib/services/index.ts -------------------------------------------------------------------------------- /src/routes/+error.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/+error.svelte -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/+layout.svelte -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/+page.svelte -------------------------------------------------------------------------------- /src/routes/+page.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/+page.ts -------------------------------------------------------------------------------- /src/routes/album/[id]/+page.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/album/[id]/+page.svelte -------------------------------------------------------------------------------- /src/routes/album/[id]/+page.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/album/[id]/+page.ts -------------------------------------------------------------------------------- /src/routes/photo/[id]/+page.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/photo/[id]/+page.svelte -------------------------------------------------------------------------------- /src/routes/photo/[id]/+page.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/src/routes/photo/[id]/+page.ts -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/static/favicon.png -------------------------------------------------------------------------------- /stryker.config.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/stryker.config.json -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/svelte.config.js -------------------------------------------------------------------------------- /tests/components/__screenshots__/listing.test.ts/Listing-Page-displays-a-warning-with-empty-album-set-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/listing.test.ts/Listing-Page-displays-a-warning-with-empty-album-set-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/listing.test.ts/Listing-Page-displays-the-plural-number-of-photos-per-album-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/listing.test.ts/Listing-Page-displays-the-plural-number-of-photos-per-album-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/listing.test.ts/Listing-Page-displays-the-singular-number-of-photos-per-album-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/listing.test.ts/Listing-Page-displays-the-singular-number-of-photos-per-album-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/listing.test.ts/Listing-Page-lists-all-the-photos-with-accessible-screen-reader-texts-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/listing.test.ts/Listing-Page-lists-all-the-photos-with-accessible-screen-reader-texts-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/listing.test.ts/Listing-Page-photos-in-page-link-to-a-single-photo-page-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/listing.test.ts/Listing-Page-photos-in-page-link-to-a-single-photo-page-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/photo.test.ts/Single-photo-page-contains-a-link-back-to-the-album-page-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/photo.test.ts/Single-photo-page-contains-a-link-back-to-the-album-page-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/photo.test.ts/Single-photo-page-contains-a-photo-caption-with-title-and-size-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/photo.test.ts/Single-photo-page-contains-a-photo-caption-with-title-and-size-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/photo.test.ts/Single-photo-page-contains-a-photo-with-accessible-alternative-text-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/photo.test.ts/Single-photo-page-contains-a-photo-with-accessible-alternative-text-1.png -------------------------------------------------------------------------------- /tests/components/__screenshots__/photo.test.ts/Single-photo-page-wraps-photo-as-a-figure-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/__screenshots__/photo.test.ts/Single-photo-page-wraps-photo-as-a-figure-1.png -------------------------------------------------------------------------------- /tests/components/albums.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/albums.test.ts -------------------------------------------------------------------------------- /tests/components/helpers.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/helpers.ts -------------------------------------------------------------------------------- /tests/components/listing.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/listing.test.ts -------------------------------------------------------------------------------- /tests/components/photo.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/components/photo.test.ts -------------------------------------------------------------------------------- /tests/e2e/albums.spec.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/e2e/albums.spec.ts -------------------------------------------------------------------------------- /tests/e2e/layout.spec.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/e2e/layout.spec.ts -------------------------------------------------------------------------------- /tests/e2e/listing.spec.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/e2e/listing.spec.ts -------------------------------------------------------------------------------- /tests/e2e/photo.spec.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/e2e/photo.spec.ts -------------------------------------------------------------------------------- /tests/helpers.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/helpers.ts -------------------------------------------------------------------------------- /tests/unit/Dimensions.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/unit/Dimensions.test.ts -------------------------------------------------------------------------------- /tests/unit/FakeGateway.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/unit/FakeGateway.ts -------------------------------------------------------------------------------- /tests/unit/Gateway.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/unit/Gateway.test.ts -------------------------------------------------------------------------------- /tests/unit/PhotoBrowser.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/unit/PhotoBrowser.test.ts -------------------------------------------------------------------------------- /tests/unit/PhotoCalculator.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tests/unit/PhotoCalculator.test.ts -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/tsconfig.json -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/vite.config.js -------------------------------------------------------------------------------- /vitest.config.components.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/vitest.config.components.ts -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/vitest.config.ts -------------------------------------------------------------------------------- /vitest.config.unit.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/vitest.config.unit.ts -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikoheikkila/photo-browser/HEAD/yarn.lock --------------------------------------------------------------------------------