Commit Graph

668 Commits

Author SHA1 Message Date
Éric Le Maître
94a8d258f8
fix(vue-3): on editor destruction, transition smoothly (#5772) 2024-11-07 09:19:46 +01:00
Armando Guarino
585f6ef77e test: improve url parsing logic 2024-11-06 15:08:30 +01:00
Armando Guarino
035862b698 refactor: update tests url checking logic and comments 2024-11-06 14:11:48 +01:00
Armando Guarino
444e6e5a11 refactor: adjust validate and add shouldAutoLink to improve URL handling 2024-11-06 13:43:54 +01:00
Nick the Sick
ad7ea1a072
Merge branch 'develop' into next 2024-11-01 16:30:54 +01:00
Héctor Chong
077c540cf9
docs: add drag handle demo for React (#5783) 2024-10-30 10:44:45 +01:00
Rägnar O'ock
152390130e
fix(table): set min-width for cols #5435 (#5464) 2024-10-30 10:31:25 +01:00
Armando Guarino
6b2df67219
fix: add zero-width space to resolve cursor selection issue (#5774) 2024-10-28 14:19:25 +01:00
Nick Perez
f95b13e93f
feat(core): allow nodes and fragments to be inserted into the editor using insertContentAt command #5764 (#5766) 2024-10-25 16:32:18 +02:00
Nick the Sick
f89a6d9f55
Merge branch 'main' into develop 2024-10-22 15:10:41 +02:00
Nick Perez
873a67c6e3
feat: in a collab setting, disable transactions that are trying to sync invalid content (#5207)
When collaborating on a document, a client may send changes which are invalid to the current client. This change makes it so that the client can be disabled from synchronizing any further changes to avoid the default behavior of stripping unknown content. This would allow the other client to continue editing on the document while still synchronizing any known changes.
2024-10-21 17:15:06 +02:00
Nick Perez
ffb51d3b7e
fix(core): respect the editor's parseOptions (#5742)
Co-authored-by: guarmo <armando.guarino@tiptap.dev>
2024-10-21 12:55:35 +02:00
trry
7ddc1af5e9
chore: delete duplicate name (#5732) 2024-10-20 22:33:20 +02:00
Nick the Sick
bfcf6d94e8
test: use id for tests 2024-10-18 16:36:11 +02:00
Éric Le Maître
364231a1bd
Fix editor destruction at the end of Vue transition (#5648)
* wip: destruction éditeur

* fix: replacing DOM nodes at unmount

* fix: event for useEditor destroy

* chore: Generating changeset

* chore: generating changeset

* chore: delete duplicate changeset

* revert: note tutorial

* feat: add Vue transition example

* fix: test for Vue transition

* fix: components within editor

* chore: remove useless ref
2024-10-14 10:26:12 +02:00
Jaap van Hoek
21df331b60
fix(table): respect resizeable columns colwidths (#4955) 2024-10-04 14:17:08 +02:00
github-actions[bot]
5d9b8d0907
chore(release): release version 2.8.0 (#5669) 2024-09-30 16:46:03 +02:00
Nick the Sick
d1870cad64
Merge "develop" into branch "next" 2024-09-26 15:18:18 +02:00
Nick Perez
6834a7f7d6
build: type defs only emit for a single package's code (#5665) 2024-09-26 14:51:00 +02:00
bdbch
12bb31a099
Fix/insert content at block insertions (#5651)
* fix(core): dont split text nodes when insert block nodes at start of text

* chore: added changeset

* removed duplicated logic from horizontal rule
2024-09-26 14:44:49 +02:00
dependabot[bot]
1bad8f8c95
build(deps-dev): bump vite from 5.4.1 to 5.4.6 (#5629)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.1 to 5.4.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-25 14:07:59 +02:00
Nick the Sick
14afcadd7b
Merge branch 'develop' into next 2024-09-24 22:31:49 +02:00
Sven Adlung
cbe06d12db
fix(vue-3): late-registering plugins #5259 (#5616) 2024-09-18 14:46:45 +02:00
dependabot[bot]
cf443630cf
build(deps-dev): bump svelte from 4.2.18 to 4.2.19 (#5571)
Bumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) from 4.2.18 to 4.2.19.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/svelte@4.2.19/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@4.2.19/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-17 15:52:41 +02:00
Nick the Sick
e0c4db9674
revert: "fix(core): handle macOS text expansion properly in InputRules (#5261)"
This reverts commit 88e310b144.
2024-09-16 06:19:37 +02:00
Ricardo Amaral
88e310b144
fix(core): handle macOS text expansion properly in InputRules (#5261) 2024-08-22 12:34:27 +02:00
Nick Perez
07fa49d026
fix: preserve attributes of toggled node #3644 (#5489)
I only feel comfortable copying the attributes of the current node if the selection is only within a single node (I don't know what is expected if you had a selection of multiple nodes, the intersection of the attributes maybe?)

---------

Co-authored-by: Dominik Biedebach <dominik.biedebach@tiptap.dev>
2024-08-21 14:03:57 +02:00
Nick Perez
6a0f4f30f8
fix(react): attempt to cleanup editor instances, on creation #5492 (#5496)
The core of the change ended up being quite simple, because we can create the editor within the first render, we need to already schedule it's destruction.
Scheduling a destruction, ensures that an instance that was created in that first render pass can be cleaned up.
Waiting one more tick than before ensures that we don't accidentally destroy an editor instance that could actually be valid in the next render pass.

In StrictMode, there will be two editor instances created, the first will be created & quickly destroyed in 2 ticks.
In Normal React, there will only ever be 1 instance created and destroyed only on unmount.
2024-08-15 08:55:42 +02:00
github-actions[bot]
a07eea26ea
chore(release): release new pre-release version v3.0.0-next.1 (#5456) 2024-08-14 18:35:35 +02:00
Nick the Sick
06ffa88cf6
Merge branch 'develop' into next 2024-08-14 18:00:55 +02:00
Nick the Sick
a3ceec79e8
chore: resolve to root dir 2024-08-12 14:23:11 +02:00
Nick the Sick
5270b5c43d
chore: dedupe esbuild 2024-08-12 14:13:46 +02:00
Nick the Sick
157d9d8604
chore: pin esbuild 2024-08-12 14:06:25 +02:00
Nick the Sick
df9f6967c2
docs: fix demos resolution of y-prosemirror 2024-08-12 13:50:19 +02:00
Nick the Sick
fef96a04bb
chore: explicit dep for demos 2024-08-12 12:27:11 +02:00
Nick the Sick
ff19f241a1
chore: bump deps 2024-08-12 11:33:03 +02:00
Nick the Sick
2c6590b3d4
fix: update docs and add tests for collaboration and priority docs 2024-08-12 11:14:41 +02:00
Nick the Sick
fa17c2374f
chore: update deps to bundle 2024-08-12 10:59:50 +02:00
Nick the Sick
0fa9e1a4b0
Merge branch 'develop' into next 2024-08-07 06:26:41 +02:00
github-actions[bot]
535dcccb40
chore(release): publish version v2.5.9 (#5451)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-08-06 17:03:26 +02:00
Nick the Sick
273e18bd87
Merge branch 'main' into develop 2024-08-06 16:37:34 +02:00
Nick Perez
d6e56c41e3
fix(extension-code-block-lowlight): use lowlight v3 and update demos (#5374) 2024-08-06 13:53:58 +02:00
Nick Perez
174aefe0f1
fix(collaboration): update y-prosemirror, respect onFirstRender (#5411) 2024-08-06 11:23:20 +02:00
Nick Perez
7c8889a2a6
fix(react): optimize useEditor and useEditorState to reduce number of instances created while being performant #5432 (#5445) 2024-08-05 17:46:19 +02:00
svenadlung
bde3328ba2 docs: update demo styles 2024-08-01 12:51:45 +02:00
Dominik Biedebach
8e85b5916d Merge branch 'develop' into 'next' 2024-08-01 00:34:47 +02:00
bdbch
7eaa34d0d1 Remove tippy.js and replace with Floating UI (#5398)
* start experimenting with floating-ui

* add options to floating-ui bubble menu plugin & fix smaller issues

* add vue support for new floating-ui

* start experimenting with floating-ui

* adjust floating-menu plugin for floating-ui & update react component

* add vue support for floating-menu with floating-ui

* update tests for new floating-ui integration

* added changeset file

* move floating-ui dependency to peerDeps

* add install notice to changelog

* remove unnecessary code for destroying and removing component element in Vue suggestion.js

* remove unnecessary code for destroying and removing component element in React suggestion.js

* sync package-lock

* widen range for peerDeps again
2024-07-31 03:51:53 +02:00
Nick the Sick
4b9d8a3346
chore: cleanup 2024-07-30 09:07:53 +02:00
Nick Perez
99d7820cbb
fix(react): always cleanup old editor instances (#5414) 2024-07-30 09:06:31 +02:00
Raman Paulau
f7f644f7b2
fix(vue-3): set editor's appContext.provide to forward inject chain (#5397)
Vue internally uses prototype chain to preserve injects across the entire component chain. Thus should avoid Object.assign or spread operator as it won't copy the prototype. All correct provides will be already present on `instance.provides`.
2024-07-29 17:02:15 +02:00
Moch. Irfan Rafif
c7f55500ee
fix(extension-table): correctly set min-width for table (#4684) 2024-07-24 14:16:48 +02:00
Nick the Sick
9e0e167885
fix(link): use the view's editable property as the indicator instead 2024-07-23 12:21:18 +02:00
github-actions[bot]
a21a122759 chore(release): publish a new pre-release version 2024-07-15 14:52:21 +02:00
bdbch
7c9516a519
fix: fix shiki setup (#5347) 2024-07-15 14:05:47 +02:00
Nick the Sick
cb7d4f1879
chore: update vite 2024-07-15 13:45:19 +02:00
Nick the Sick
226a0dfe59
build: demos 2024-07-15 12:00:31 +02:00
Nick the Sick
b2dad29436
chore: version number 2024-07-14 15:33:36 +02:00
Nick the Sick
fb4514946c
revert: "chore(release): publish a new pre-release version"
This reverts commit ff157042a3.
2024-07-14 15:04:56 +02:00
github-actions[bot]
ff157042a3 chore(release): publish a new pre-release version 2024-07-14 12:52:24 +02:00
Nick Perez
1110280b2b
fix(react): useEditor should not destroy still mounted instances (#5338)
This forces the editor to re-use the editor instance that existed prior to an unmount and remount of the same component.
This fixes a bug in `React.StrictMode` introduced with the latest performance updates by PR #5161
2024-07-13 10:59:33 +02:00
Nick Perez
df5609cdff
fix: default to rendering the editor immediately, while staying backward compatible (#5161)
* fix: default to rendering the editor immediately, while staying backward compatible

* feat: add `useEditorWithState` hook for extracting state and editor instance simultaneously

* feat(react): add `useEditorState` hook for subscribing to selected editor state

* docs: add an example to show the concept

* chore: add changeset
2024-07-10 11:41:43 +02:00
Nick the Sick
14a00f48d7
chore: use vite in prod mode during tests 2024-07-03 18:28:14 +02:00
svenadlung
f79f22308a Merge branch 'main' into develop 2024-07-02 18:13:21 +02:00
svenadlung
d0010d470c docs: fix drawing demo 2024-07-02 18:13:08 +02:00
Nick the Sick
c96d332364
Merge branch 'main' into develop 2024-07-02 16:21:06 +02:00
Sven Adlung
d13e841da3
docs: move docs to own repository (#5304)
* docs: move docs

* docs: remove navigation file

* test: pre-optimize highlight.js
2024-07-02 16:07:10 +02:00
Nick the Sick
045d9871f1 chore: update package versions for prosemirror 2024-06-28 08:17:13 +02:00
Nick the Sick
de04a9f993
chore: ignore 2024-06-27 17:37:27 +02:00
bdbch
8c017d88f6 chore: merged main branch into beta branch 2024-06-26 23:53:44 +02:00
bdbch
729d1073bf chore: revert dev dependencies in demos package to ensure peer dependency compatibility 2024-06-26 23:53:07 +02:00
Nick the Sick
4ad8bbe5f3
chore: update package-lock 2024-06-26 20:47:26 +02:00
bdbch
81d3b8a671
feat(core): normalize setContent and insertContentAt (#4895)
When `parseOptions.whitespace === 'full' or parseOptions.whitespace === true` setting content will no longer strip whitespaces on setContent
2024-06-25 16:50:46 +02:00
bdbch
01aa68da3a fix: add column resize cursor to tables in demos 2024-06-21 11:25:31 +02:00
svenadlung
855141e428 docs: update global demo styles 2024-06-20 21:03:12 +02:00
bdbch
0bdd09fb53 chore: increase min-height for demo frames 2024-06-20 13:12:52 +02:00
Sven Adlung
ba76209ddf
docs: add collaboration split pane demo 2024-06-20 10:48:51 +02:00
svenadlung
c7f58a99a0 docs: fix TW demo dark mode issue 2024-06-19 12:19:16 +02:00
Nick the Sick
9ec0cd550a
docs: make docs searchable 2024-06-18 09:25:12 +02:00
Nazar
d122980cec
fix(core): update tabindex on state change (#5231) (#5232) 2024-06-14 05:35:50 +02:00
Daniel Pivovarov
33de6fef67
fix(horizontal-rule): fix insertion behavior (#4898) 2024-06-14 04:51:52 +02:00
Nick the Sick
ca2a2284f0
Merge branch 'main' into develop 2024-06-13 07:05:09 +02:00
Sven Adlung
aba6657d70
docs: demos styling 2024-06-12 11:52:54 +02:00
Nick the Sick
7e7ae195e7
test: wait a little longer, pre-optimize some deps 2024-06-12 06:33:03 +02:00
Nick the Sick
747985b3a7
chore: update package versions for prosemirror 2024-06-11 23:03:14 +02:00
svenadlung
bd480a2009 docs: add query param to hide the demo preview 2024-06-10 13:56:55 +02:00
Nick the Sick
4a01716408
v2.5.0-beta.2 2024-06-07 16:49:52 +02:00
Nick the Sick
65cef599bc
Merge branch 'main' into develop 2024-06-07 16:48:53 +02:00
Nick Perez
a95ba3fa6f
fix(extension-link): make links exitable resolving #3293 (#5181) 2024-06-07 16:38:54 +02:00
Henry Stelle
ff6e00a356
feat(extension-link): add support for default protocol (#5022) 2024-06-07 16:37:48 +02:00
Nick the Sick
e542330170
chore: upgrade y-prosemirror 2024-06-07 15:11:48 +02:00
Nick the Sick
52002feeed
v2.5.0-beta.1 2024-06-04 10:39:58 +02:00
Nick the Sick
65a06136ac
Merge branch 'main' into develop 2024-06-04 10:30:30 +02:00
Nick Perez
f635d7b4f5
fix: revert font-family escaping introduced by #4545 (#5164)
Using `CSS.escape` is the wrong tool for the job here:
 - it is meant for CSS selectors and does not handle CSS variables properly.
 - you can't use `var(--title)` as a font-family because it was getting escaped to `var\(--title\)`
2024-06-04 09:37:43 +02:00
bdbch
1e562ec7da fix(demos): dont remove sources and content on tab change 2024-05-30 17:43:51 +02:00
bdbch
f776a75895
fix: don't hide tabs in previews when only one lang is available (#5195)
* feat: new demo frame design

* fix: dont hide tabs in previews when only one lang is available
2024-05-30 17:34:45 +02:00
bdbch
fb311fb5e9
feat: new demo frame design (#5194) 2024-05-30 17:28:46 +02:00
Nick the Sick
d36a7ef1d9
v2.5.0-beta.0 2024-05-29 10:43:43 +02:00
svenadlung
7c8d21745d test(images): fix failing tests 2024-05-27 17:22:55 +02:00
svenadlung
6050d20281 docs: fix YouTube extension demo tests 2024-05-27 16:43:18 +02:00
svenadlung
eaf41d70d9 docs: use nocookie version in YouTube extension demo 2024-05-27 16:22:03 +02:00
bdbch
6a581153d8 v2.4.0 2024-05-14 14:45:38 +02:00
Nick Perez
1ff58aea21
test: get tests running on macOS again by leveraging built-in platform detection (#5144) 2024-05-14 14:42:57 +02:00
Dominik Biedebach
ca4f13461e v2.3.2 2024-05-08 17:43:53 +02:00
bdbch
e307034088
upgrade y-prosemirror (#5124) 2024-05-08 17:41:53 +02:00
Dalius C
4900a27c53
fix: NodePos querySelectorAll function (#5094)
* fix nodepos queryselector

* fix NodePos querySelectorAll function

* tests

* remove test variable

* test fix
2024-05-08 12:22:13 +02:00
bdbch
dfd5ff5c6b v2.3.1 2024-04-30 17:27:07 +02:00
Dominik Biedebach
173f609972 fix images demo test 2024-04-11 12:02:37 +02:00
svenadlung
4c602e76db adjust tests 2024-04-09 14:22:05 +02:00
svenadlung
b132d9207d v2.3.0 2024-04-09 13:17:27 +02:00
bdbch
22ced31872
fix(core): fix nodepos child lookup (#5038) 2024-04-09 13:12:28 +02:00
Sven Adlung
96b6abcf6e
feat(core): apply input and paste rules when using insertContent methods (#5046) 2024-04-09 13:04:16 +02:00
bdbch
e79523fb8b v2.2.6 2024-04-06 17:46:17 +02:00
dependabot[bot]
05ed556021
Bump vite from 2.9.16 to 2.9.18 in /demos (#5028)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.16 to 2.9.18.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v2.9.18/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.9.18/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: bdbch <6538827+bdbch@users.noreply.github.com>
2024-04-06 13:16:26 +02:00
bdbch
0e5af53778 v2.2.5 2024-04-06 00:09:00 +02:00
Dominik Biedebach
9a615643ac v2.2.4 2024-02-23 13:01:19 +01:00
Dominik Biedebach
f8baf792cf v2.2.3 2024-02-15 16:41:48 +01:00
Dominik Biedebach
21aa96dee8 fix: fix test path 2024-02-07 15:22:54 +01:00
svenadlung
d308d7c31f v2.2.2 2024-02-07 13:47:00 +01:00
bdbch
1c5c087641 v2.2.1 2024-01-31 09:04:52 +01:00
bdbch
6ad92fbd28 v2.2.0 2024-01-29 13:25:37 +01:00
svenadlung
8e36d65b6f Merge branch 'main' into develop 2024-01-29 13:16:04 +01:00
bdbch
8954007b2b
fix: fix newline stripping via insertContent
* fix(core): fix whitespace handling in elementFromString function

* demos: add button to insert HTML content with span tags

* Move tests and demo to insertContent demo

---------

Co-authored-by: bdbch <dominik@bdbch.com>
2024-01-29 13:15:39 +01:00
Sven Adlung
681aa577bf
fix: fix imports, fix demos, unpin y-prosemirror
* use @tiptap/pm

* unpin y-prosemirror

* fix lock file

* fix IsolatingClear demo

* fix OnUpdateRenderer demo

* fix YouTube demo video

* update demos

* remove unneeded function call
2024-01-29 13:03:52 +01:00
Jan Thurau
77f3fa9f9a
fixes CollaborativeEditing demo 2024-01-18 20:07:51 +01:00
bdbch
731109b566 merge main 2024-01-10 13:57:46 +01:00
bdbch
23b32f805f v2.1.16 2024-01-10 13:45:34 +01:00
bdbch
2235908c28 fix(core): fix new lines being added via elementFromString (#4767)
Co-authored-by: bdbch <dominik@bdbch.com>
2024-01-10 13:44:56 +01:00
bdbch
b7a2504f16
fix(core): fix new lines being added via elementFromString (#4767)
Co-authored-by: bdbch <dominik@bdbch.com>
2024-01-10 13:43:48 +01:00
bdbch
46e391aa9d merge main 2024-01-08 22:30:06 +01:00
Jan Thurau
8938acb085 fixes tests in marks/link 2024-01-08 22:26:27 +01:00
bdbch
412b0b92f0 v2.1.15 2024-01-08 20:25:21 +01:00
bdbch
c2232e74a4 v2.2.0-rc.8 2024-01-08 20:22:38 +01:00
bdbch
135a12f7aa
fix(core): fix insertContentAt keeping new lines in html content (#4465)
* fix(core): fix insertContentAt keeping new lines in html content

* test(core): add tests

* chore: remove stray console.log

* chore: remove buttons from demo

* fix(core): fix replacement on multiple breaks
2024-01-08 20:21:45 +01:00
bdbch
57eba08f46
feature: nodepos (#4701)
* start writing docs for nodepos
* added nodepos docs
* added to links

---------

Co-authored-by: bdbch <dominik@bdbch.com>
2024-01-08 20:21:23 +01:00
Dominik Biedebach
ed72d3ef72 merge main 2024-01-08 15:07:16 +01:00
Dominik Biedebach
d495d92a1f fix(link): fix tests 2024-01-08 15:06:45 +01:00
Dominik Biedebach
8c99685545 sync with main 2024-01-08 12:54:37 +01:00
Dominik Biedebach
6c7b27f39b v2.1.14 2024-01-08 12:49:20 +01:00
bdbch
eaee9c7177
Fix/link pasting (#4700)
* revert link paste handling to behavior before

* fix(link): fix linking while typing

* add validate support for autolinking back

* revert autolink behaviour

* fix autolinking on pasting text

* remove broken link

* fix react link test

* fix savvy test

---------

Co-authored-by: bdbch <dominik@bdbch.com>
2024-01-08 12:48:14 +01:00
bdbch
894c732d29
chore(pm): update all prosemirror package dependencies (#4714)
* chore(pm): update all prosemirror package dependencies

* rchore(core): remove filterTransaction from state

* fix(demo): fix typings in vue demo

* feat(core): add missing prosemirror commands for joining textblocks

* adoc: added documentation for missing commands

---------

Co-authored-by: bdbch <dominik@bdbch.com>
2024-01-02 13:38:28 +01:00
Dominik Biedebach
2456ac7a74 Merge branch 'main' of github.com:ueberdosis/tiptap into develop 2023-12-15 12:32:00 +01:00
bdbch
f6d7e00a74
fix(typography): require spaces after divisions to not break date formats (#4696) 2023-12-14 15:10:08 +01:00
Dominik Biedebach
e128f6cac0 merge main 2023-12-14 13:00:09 +01:00
Dominik Biedebach
b18d729101 v2.1.13 2023-11-30 18:04:49 +01:00
Dominik Biedebach
fab5e963ce v2.2.0-rc.7 2023-11-27 14:14:28 +01:00
Dominik Biedebach
e2ac6003fb v2.2.0-rc.6 2023-11-23 14:42:38 +01:00
Dominik Biedebach
2bb371126e merge main 2023-11-23 09:28:26 +01:00
Dominik Biedebach
b62c87a07e v2.2.0-rc.5 2023-11-23 09:24:24 +01:00
Jan Thurau
de8d4bf149
fixes typo 2023-11-20 21:13:41 +01:00
Jakub Kolčář
82f16d2d91
link click handler fixed 2023-11-20 21:13:40 +01:00