├── .browserslistrc ├── .editorconfig ├── .github ├── dependabot.yml └── workflows │ ├── dependabot-auto-merge.yml │ └── deploy.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── app.vue ├── assets ├── css │ └── global.scss ├── theme-dark.json └── theme-light.json ├── components ├── ActionTrigger.vue ├── Alert.vue ├── Button.vue ├── ColorModeSwitch.vue ├── ContextMenu.vue ├── DiffEditor.client.vue ├── Icon.vue ├── IconButton.vue ├── SquareLoader.vue └── ToggleButton.vue ├── composables ├── use-base-url.ts ├── use-diffr-head.ts ├── use-font-ready.ts ├── use-theme-toggle.ts └── use-url-state.ts ├── encoding-worker ├── encoding-tools.ts ├── encoding-utils.ts └── encoding-worker.ts ├── logo.png ├── modules ├── fix-manifest │ └── module.ts └── floating-vue │ ├── module.ts │ └── plugin.ts ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages ├── about.vue └── index.vue ├── public ├── apple-touch-icon.png ├── diffr-pwa-192x192.png ├── diffr-pwa-512x512-maskable.png ├── diffr-pwa-512x512.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── favicon.svg ├── icons │ ├── blank.svg │ ├── copy.svg │ ├── cut.svg │ ├── diffr.svg │ ├── indent.svg │ ├── moon.svg │ ├── paste.svg │ ├── screen.svg │ ├── share.svg │ ├── split.svg │ ├── sun.svg │ ├── swap.svg │ └── trash.svg ├── logo.svg └── maskable.svg ├── stores ├── color-preference-cycle.ts └── encoding-worker.ts ├── tailwind.config.ts ├── tsconfig.json └── util └── encoding-worker ├── encoding-tools.ts ├── encoding-utils.ts └── encoding-worker.ts /.browserslistrc: -------------------------------------------------------------------------------- 1 | last 2 chrome versions 2 | last 2 firefox versions 3 | ios_saf >= 15.4 4 | safari >= 15.4 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: '/' 5 | schedule: 6 | interval: daily 7 | time: '04:00' 8 | open-pull-requests-limit: 10 9 | ignore: 10 | - dependency-name: sass-loader 11 | versions: 12 | - '>= 11.a, < 12' 13 | - dependency-name: '*' 14 | update-types: 15 | - 'version-update:semver-patch' 16 | - 'version-update:semver-minor' 17 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: Dependabot auto-merge 2 | on: pull_request 3 | 4 | permissions: 5 | contents: write 6 | pull-requests: write 7 | 8 | jobs: 9 | dependabot: 10 | runs-on: ubuntu-latest 11 | if: ${{ github.actor == 'dependabot[bot]' }} 12 | steps: 13 | - name: Dependabot metadata 14 | id: metadata 15 | uses: dependabot/fetch-metadata@v1 16 | with: 17 | github-token: '${{ secrets.GITHUB_TOKEN }}' 18 | - name: Enable auto-merge for Dependabot PRs 19 | if: ${{ contains(steps.metadata.outputs.dependency-names, 'sass') && (steps.metadata.outputs.update-type == 'version-update:semver-patch' || steps.metadata.outputs.update-type == 'version-update:semver-minor') }} 20 | run: gh pr merge --auto --squash "$PR_URL" 21 | env: 22 | PR_URL: ${{ github.event.pull_request.html_url }} 23 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 24 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deployment CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v3 14 | with: 15 | persist-credentials: false 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: '18' 19 | - run: npm ci 20 | - run: npm run generate 21 | env: 22 | BASE_URL: /diffr/ 23 | - uses: JamesIves/github-pages-deploy-action@v4 24 | with: 25 | token: ${{ secrets.ACCESS_TOKEN }} 26 | branch: gh-pages 27 | folder: dist 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .env 8 | dist 9 | .DS_Store 10 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | legacy-peer-deps=true 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | arrowParens: avoid 2 | bracketSpacing: true 3 | htmlWhitespaceSensitivity: css 4 | insertPragma: false 5 | jsxBracketSameLine: false 6 | jsxSingleQuote: false 7 | printWidth: 80 8 | proseWrap: preserve 9 | requirePragma: false 10 | semi: false 11 | singleQuote: true 12 | tabWidth: 2 13 | trailingComma: all 14 | useTabs: false 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.colorCustomizations": { 3 | "titleBar.activeBackground": "#47b5e8", 4 | "titleBar.activeForeground": "#15202b", 5 | "titleBar.inactiveBackground": "#47b5e899", 6 | "titleBar.inactiveForeground": "#15202b99", 7 | "sash.hoverBorder": "#74c7ee", 8 | "commandCenter.border": "#15202b99" 9 | }, 10 | "peacock.color": "#47b5e8" 11 | } 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
28 | Diffr is a tool for comparing text files. It was created out of 29 | dissatisfaction with existing diffing tools (and a certain amount of 30 | paranoia because virtually every diffing tool has to send your data to 31 | their server to compare). In Diffr, all the work happens locally and 32 | your data never leaves the browser. 33 |
34 |182 | 183 | Use the button below to share your diff with others. 184 | 185 | 186 | Copy the URL below to share your diff with others: 187 | 188 | 193 | 194 |
195 |224 | Unfortunately, your browser denies copying to your 225 | clipboard. Please copy the URL manually. 226 |
227 |236 | Note that Diffr's highest maxim is to never share your input 237 | with a third party. Therefore, no direct collaboration on your 238 | diff is possible with people you share it with — they will 239 | receive a fresh copy of the text, and their changes will not 240 | affect your data. 241 |
242 |