Add favicon

This commit is contained in:
Andras Schmelczer 2025-07-12 15:25:12 +01:00
parent 7d160cd9fd
commit cf21219424
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
7 changed files with 121 additions and 23 deletions

View file

@ -1,4 +1,4 @@
name: Check name: Check & publish
on: on:
push: push:

View file

@ -7,6 +7,7 @@
"name": "reconcile-example-website", "name": "reconcile-example-website",
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
"devDependencies": { "devDependencies": {
"copy-webpack-plugin": "^13.0.0",
"css-loader": "^7.1.2", "css-loader": "^7.1.2",
"html-webpack-plugin": "^5.6.3", "html-webpack-plugin": "^5.6.3",
"inline-source-webpack-plugin": "^3.0.1", "inline-source-webpack-plugin": "^3.0.1",
@ -27,7 +28,7 @@
}, },
"../../reconcile-js": { "../../reconcile-js": {
"name": "reconcile-text", "name": "reconcile-text",
"version": "0.4.3", "version": "0.4.10",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
@ -1536,6 +1537,43 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/copy-webpack-plugin": {
"version": "13.0.0",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz",
"integrity": "sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"glob-parent": "^6.0.1",
"normalize-path": "^3.0.0",
"schema-utils": "^4.2.0",
"serialize-javascript": "^6.0.2",
"tinyglobby": "^0.2.12"
},
"engines": {
"node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.1.0"
}
},
"node_modules/copy-webpack-plugin/node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/core-util-is": { "node_modules/core-util-is": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@ -4987,6 +5025,51 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/tinyglobby": {
"version": "0.2.14",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
"integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.4.4",
"picomatch": "^4.0.2"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/tinyglobby/node_modules/fdir": {
"version": "6.4.6",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
"integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"picomatch": "^3 || ^4"
},
"peerDependenciesMeta": {
"picomatch": {
"optional": true
}
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/to-regex-range": { "node_modules/to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",

View file

@ -22,12 +22,13 @@
], ],
"homepage": "https://github.com/schmelczer/reconcile#readme", "homepage": "https://github.com/schmelczer/reconcile#readme",
"devDependencies": { "devDependencies": {
"reconcile-text": "file:../../reconcile-js", "copy-webpack-plugin": "^13.0.0",
"css-loader": "^7.1.2", "css-loader": "^7.1.2",
"html-webpack-plugin": "^5.6.3", "html-webpack-plugin": "^5.6.3",
"mini-css-extract-plugin": "^2.9.2",
"inline-source-webpack-plugin": "^3.0.1", "inline-source-webpack-plugin": "^3.0.1",
"mini-css-extract-plugin": "^2.9.2",
"prettier": "^3.6.2", "prettier": "^3.6.2",
"reconcile-text": "file:../../reconcile-js",
"resolve-url-loader": "^5.0.0", "resolve-url-loader": "^5.0.0",
"sass": "^1.89.2", "sass": "^1.89.2",
"sass-loader": "^16.0.5", "sass-loader": "^16.0.5",

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -17,9 +17,11 @@
/> />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:url" content="https://schmelczer.dev/reconcile" /> <meta property="og:url" content="https://schmelczer.dev/reconcile" />
<meta property="og:image" content="/favicon.ico" /> <meta property="og:image" content="/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<link rel="icon" type="image/x-icon" href="favicon.ico" /> <link rel="icon" type="image/x-icon" href="favicon.ico" />
<title>Reconcile: conflict-free text merging</title> <title>reconcile-text: conflict-free 3-way text merging</title>
<link inline inline-asset="index.css" inline-asset-delete /> <link inline inline-asset="index.css" inline-asset-delete />
</head> </head>
<body> <body>
@ -37,13 +39,13 @@
rel="noopener noreferrer" rel="noopener noreferrer"
>diff3</a >diff3</a
> >
or <code>git merge</code>, but with intelligent conflict resolution that (or more specifically, <code>git merge</code>), but with intelligent conflict
requires no user intervention. The resolution that requires no user intervention. The
<a <a
href="https://github.com/schmelczer/reconcile" href="https://github.com/schmelczer/reconcile"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
>Reconcile</a >reconcile-text</a
> >
library tackles a fundamental challenge in collaborative editing: what happens library tackles a fundamental challenge in collaborative editing: what happens
when multiple users edit the same text simultaneously, but the conflict when multiple users edit the same text simultaneously, but the conflict
@ -52,18 +54,20 @@
<p> <p>
Where traditional merge tools leave you with conflict markers to resolve Where traditional merge tools leave you with conflict markers to resolve
manually, Reconcile automatically weaves changes together. The manually, <code>reconcile-text</code> automatically weaves changes together.
<code>reconcile(parent, left, right)</code> function takes conflicting edits The <code>reconcile(parent, left, right)</code> function takes conflicting
and produces clean, unified results using an algorithm inspired by Operational edits and produces clean, unified results using an algorithm inspired by
Transformation. No more <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code> markers Operational Transformation. No more
cluttering your text. <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code> markers jumbling your text.
</p> </p>
<p> <p>
The process starts with your chosen tokenisation strategy, then applies Myers' The process starts with your chosen tokenisation strategy, then applies Myers'
diff algorithm to compare the original with both modified versions. These 2-way diff algorithm to compare the original with both modified versions.
diffs are optimised and transformed to preserve meaningful changes, before a These diffs are optimised and transformed to preserve the longest meaningful
final merge strategy combines all modifications without losing any edits. changes, before a final merge strategy combines all inserts and deletes
without losing any edits. Cursor positions may be tracked and updated during
merging too.
</p> </p>
<p> <p>
@ -74,12 +78,9 @@
rel="noopener noreferrer" rel="noopener noreferrer"
>documentation</a >documentation</a
> >
or try editing the text boxes below to see Reconcile in action. or try editing the text boxes below to see <code>reconcile-text</code> in
</p> action. Use the tokenisation options below to experiment with different
approaches — the Rust library also supports providing a custom tokeniser.
<p>
Use the tokenisation options below to experiment with different approaches —
the library also supports custom tokenisers.
</p> </p>
</header> </header>

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -3,6 +3,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin');
const InlineSourceWebpackPlugin = require('inline-source-webpack-plugin'); const InlineSourceWebpackPlugin = require('inline-source-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = (_env, argv) => ({ module.exports = (_env, argv) => ({
devtool: argv.mode === 'development' ? 'inline-source-map' : false, devtool: argv.mode === 'development' ? 'inline-source-map' : false,
@ -34,6 +35,18 @@ module.exports = (_env, argv) => ({
template: './src/index.html', template: './src/index.html',
}), }),
new MiniCssExtractPlugin(), new MiniCssExtractPlugin(),
new CopyWebpackPlugin({
patterns: [
{
from: 'src/*.ico',
to: '[name][ext]',
},
{
from: 'src/*.png',
to: '[name][ext]',
},
],
}),
argv.mode === 'production' argv.mode === 'production'
? new InlineSourceWebpackPlugin({ ? new InlineSourceWebpackPlugin({
compress: true, compress: true,