@edifice.io/tiptap-extensions 2.6.10-develop-pedago.20261023145636 → 2.6.10-develop-enabling.20261023170056
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -104
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/abbr/abbr.cjs +2 -2
- package/dist/abbr/abbr.cjs.map +1 -1
- package/dist/abbr/abbr.js +2 -33
- package/dist/abbr/abbr.js.map +1 -1
- package/dist/alert/alert.cjs +2 -2
- package/dist/alert/alert.cjs.map +1 -1
- package/dist/alert/alert.js +2 -45
- package/dist/alert/alert.js.map +1 -1
- package/dist/attachment/attachment-transformer.cjs +2 -2
- package/dist/attachment/attachment-transformer.cjs.map +1 -1
- package/dist/attachment/attachment-transformer.js +2 -76
- package/dist/attachment/attachment-transformer.js.map +1 -1
- package/dist/attachment/attachment.cjs +2 -2
- package/dist/attachment/attachment.cjs.map +1 -1
- package/dist/attachment/attachment.js +2 -98
- package/dist/attachment/attachment.js.map +1 -1
- package/dist/audio/audio.cjs +2 -2
- package/dist/audio/audio.cjs.map +1 -1
- package/dist/audio/audio.js +3 -52
- package/dist/audio/audio.js.map +1 -1
- package/dist/conversation-history/conversation-history.cjs +2 -2
- package/dist/conversation-history/conversation-history.cjs.map +1 -1
- package/dist/conversation-history/conversation-history.js +2 -63
- package/dist/conversation-history/conversation-history.js.map +1 -1
- package/dist/conversation-history-body/conversation-history-body.cjs +2 -2
- package/dist/conversation-history-body/conversation-history-body.cjs.map +1 -1
- package/dist/conversation-history-body/conversation-history-body.js +2 -24
- package/dist/conversation-history-body/conversation-history-body.js.map +1 -1
- package/dist/font-size/font-size.cjs +2 -2
- package/dist/font-size/font-size.cjs.map +1 -1
- package/dist/font-size/font-size.js +2 -39
- package/dist/font-size/font-size.js.map +1 -1
- package/dist/heading/heading.cjs +2 -2
- package/dist/heading/heading.cjs.map +1 -1
- package/dist/heading/heading.js +2 -52
- package/dist/heading/heading.js.map +1 -1
- package/dist/highlight/highlight.cjs +2 -2
- package/dist/highlight/highlight.cjs.map +1 -1
- package/dist/highlight/highlight.js +2 -28
- package/dist/highlight/highlight.js.map +1 -1
- package/dist/hyperlink/hyperlink.cjs +2 -2
- package/dist/hyperlink/hyperlink.cjs.map +1 -1
- package/dist/hyperlink/hyperlink.js +2 -53
- package/dist/hyperlink/hyperlink.js.map +1 -1
- package/dist/iframe/iframe.cjs +2 -2
- package/dist/iframe/iframe.cjs.map +1 -1
- package/dist/iframe/iframe.js +2 -70
- package/dist/iframe/iframe.js.map +1 -1
- package/dist/iframe/transformers/index.cjs +2 -2
- package/dist/iframe/transformers/index.cjs.map +1 -1
- package/dist/iframe/transformers/index.js +2 -22
- package/dist/iframe/transformers/index.js.map +1 -1
- package/dist/iframe/transformers/pad-transformer.cjs +2 -2
- package/dist/iframe/transformers/pad-transformer.cjs.map +1 -1
- package/dist/iframe/transformers/pad-transformer.js +2 -24
- package/dist/iframe/transformers/pad-transformer.js.map +1 -1
- package/dist/image/image.cjs +2 -2
- package/dist/image/image.cjs.map +1 -1
- package/dist/image/image.d.ts +7 -0
- package/dist/image/image.js +2 -173
- package/dist/image/image.js.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.js +1 -52
- package/dist/information-pane/information-pane.cjs +2 -2
- package/dist/information-pane/information-pane.cjs.map +1 -1
- package/dist/information-pane/information-pane.js +2 -57
- package/dist/information-pane/information-pane.js.map +1 -1
- package/dist/line-height/line-height.cjs +2 -2
- package/dist/line-height/line-height.cjs.map +1 -1
- package/dist/line-height/line-height.js +2 -33
- package/dist/line-height/line-height.js.map +1 -1
- package/dist/linker/linker.cjs +2 -2
- package/dist/linker/linker.cjs.map +1 -1
- package/dist/linker/linker.js +2 -95
- package/dist/linker/linker.js.map +1 -1
- package/dist/mathjax/mathjax.cjs +2 -2
- package/dist/mathjax/mathjax.cjs.map +1 -1
- package/dist/mathjax/mathjax.js +2 -40
- package/dist/mathjax/mathjax.js.map +1 -1
- package/dist/paragraph/paragraph.cjs +2 -2
- package/dist/paragraph/paragraph.cjs.map +1 -1
- package/dist/paragraph/paragraph.js +2 -16
- package/dist/paragraph/paragraph.js.map +1 -1
- package/dist/speech-recognition/speech-recognition.cjs +2 -2
- package/dist/speech-recognition/speech-recognition.cjs.map +1 -1
- package/dist/speech-recognition/speech-recognition.js +2 -56
- package/dist/speech-recognition/speech-recognition.js.map +1 -1
- package/dist/speech-synthesis/speech-synthesis.cjs +2 -2
- package/dist/speech-synthesis/speech-synthesis.cjs.map +1 -1
- package/dist/speech-synthesis/speech-synthesis.js +2 -25
- package/dist/speech-synthesis/speech-synthesis.js.map +1 -1
- package/dist/table-cell/table-cell.cjs +2 -2
- package/dist/table-cell/table-cell.cjs.map +1 -1
- package/dist/table-cell/table-cell.d.ts +1 -1
- package/dist/table-cell/table-cell.js +2 -23
- package/dist/table-cell/table-cell.js.map +1 -1
- package/dist/transform/html-to-json/html-to-json.cjs +2 -2
- package/dist/transform/html-to-json/html-to-json.cjs.map +1 -1
- package/dist/transform/html-to-json/html-to-json.js +2 -6
- package/dist/transform/html-to-json/html-to-json.js.map +1 -1
- package/dist/transform/json-to-html/json-to-html.cjs +2 -2
- package/dist/transform/json-to-html/json-to-html.cjs.map +1 -1
- package/dist/transform/json-to-html/json-to-html.js +2 -6
- package/dist/transform/json-to-html/json-to-html.js.map +1 -1
- package/dist/video/video.cjs +3 -3
- package/dist/video/video.cjs.map +1 -1
- package/dist/video/video.js +3 -92
- package/dist/video/video.js.map +1 -1
- package/package.json +34 -55
- package/dist/abbr/abbr.spec.d.ts +0 -1
- package/dist/alert/alert.spec.d.ts +0 -1
- package/dist/attachment/attachment.spec.d.ts +0 -1
- package/dist/audio/audio.spec.d.ts +0 -1
- package/dist/conversation-history/conversation-history.spec.d.ts +0 -1
- package/dist/conversation-history-body/conversation-history-body.spec.d.ts +0 -1
- package/dist/font-size/font-size.spec.d.ts +0 -1
- package/dist/heading/heading.spec.d.ts +0 -1
- package/dist/highlight/highlight.spec.d.ts +0 -1
- package/dist/hyperlink/hyperlink.spec.d.ts +0 -1
- package/dist/iframe/iframe.spec.d.ts +0 -1
- package/dist/image/image.spec.d.ts +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/information-pane/information-pane.spec.d.ts +0 -1
- package/dist/line-height/line-height.spec.d.ts +0 -1
- package/dist/linker/linker.spec.d.ts +0 -1
- package/dist/mathjax/mathjax.spec.d.ts +0 -1
- package/dist/paragraph/paragraph.spec.d.ts +0 -1
- package/dist/table-cell/table-cell.spec.d.ts +0 -1
- package/dist/video/video.spec.d.ts +0 -1
package/README.md
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|

|
|
4
4
|

|
|
5
5
|
|
|
6
|
-
Extensions
|
|
6
|
+
Extensions based on [Tiptap Editor](https://tiptap.dev/). Extends functionalities of the editor.
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Prerequisites
|
|
9
9
|
|
|
10
10
|
- `pnpm: >= 9`
|
|
11
11
|
- `node: >= 20`
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Getting Started
|
|
14
14
|
|
|
15
|
-
###
|
|
15
|
+
### Install
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
pnpm add @edifice.io/tiptap-extensions
|
|
@@ -26,114 +26,23 @@ pnpm add @edifice.io/tiptap-extensions
|
|
|
26
26
|
import { Alert, Video } from "@edifice.io/tiptap-extensions"
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
####
|
|
29
|
+
#### Sub-imports
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
import { Alert } from "@edifice.io/tiptap-extensions/alert"
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
##
|
|
36
|
-
|
|
37
|
-
Chaque extension est testée contre les formes HTML réelles qu'elle doit parser et rendre — format
|
|
38
|
-
actuel et formats legacy quand c'est pertinent — en utilisant `generateJSON`/`generateHTML` de
|
|
39
|
-
`@tiptap/core` (les mêmes fonctions que `src/transform/` expose en production) sous `jsdom`, qui se
|
|
40
|
-
comporte comme un vrai navigateur. Les tests sont colocalisés avec leur extension :
|
|
41
|
-
`src/<nom>/<nom>.spec.ts`.
|
|
42
|
-
|
|
43
|
-
Pour chaque extension, quand c'est pertinent :
|
|
44
|
-
|
|
45
|
-
1. **HTML → JSON** : la ou les formes HTML réelles (actuelle et legacy) se parsent dans le bon type de
|
|
46
|
-
nœud/mark avec les bons attributs.
|
|
47
|
-
2. **JSON → HTML** : le rendu d'un document stocké produit le HTML attendu.
|
|
48
|
-
|
|
49
|
-
Contrairement à la suite golden-fixture d'`edifice-tiptap-transformer` (qui fige un snapshot JSON v2
|
|
50
|
-
externe pour comparer), chaque test ici écrit son HTML/JSON attendu directement en dur dans le fichier :
|
|
51
|
-
il n'y a pas de "snapshot v2 navigateur" préexistant à comparer, et tester une extension isolément
|
|
52
|
-
(pas 20 combinées) rend une assertion écrite à la main à la fois fiable et facile à lire.
|
|
53
|
-
|
|
54
|
-
Un smoke test séparé, `packages/react/src/modules/editor/hooks/useTipTapEditor.spec.tsx`, combine un
|
|
55
|
-
exemple de chaque extension réellement branchée dans l'éditeur réel (un "kitchen sink", sur le même
|
|
56
|
-
principe que celui du backend) — c'est lui qui attrape les interactions *entre* extensions (ex. un nom
|
|
57
|
-
dupliqué entre deux kits) qu'un test par extension isolée ne peut pas voir.
|
|
58
|
-
|
|
59
|
-
### Extensions couvertes
|
|
60
|
-
|
|
61
|
-
| Extension | Ce qui est testé |
|
|
62
|
-
|---|---|
|
|
63
|
-
| `heading`, `hyperlink` | ne sont pas masquées par les `heading`/`link` que StarterKit v3 embarque désormais par défaut |
|
|
64
|
-
| `linker` | distinction avec un lien simple via `data-id`+`data-app-prefix` ; sanitization du `href` `javascript:` ; également masqué par le `link` de StarterKit si non désactivé |
|
|
65
|
-
| `paragraph` | forme legacy `div[style]:has(> span)` *(exportée, non branchée dans l'éditeur actuellement)* |
|
|
66
|
-
| `alert` | balises legacy `p.info`/`div.warning`/`div.info` |
|
|
67
|
-
| `highlight` (CustomHighlight) | style `background-color` → attribut `color` |
|
|
68
|
-
| `abbr` | mark `<abbr>` |
|
|
69
|
-
| `mathjax` | extraction/rendu de l'équation *(exportée pour le contenu legacy ; l'éditeur réel utilise `@tiptap/extension-mathematics` à la place)* |
|
|
70
|
-
| `image` (custom-image) | largeur héritée du conteneur legacy `.image-container`, détection "smiley" legacy, attributs standards, URI `data:` ignorées |
|
|
71
|
-
| `video` | coercion de `controls` (attribut nu vs chaîne `"true"` vs absent), indicateur de captation |
|
|
72
|
-
| `audio` | `src`/`documentId`, balisage du conteneur |
|
|
73
|
-
| `iframe` | `width: "100%"` conservé tel quel vs une largeur numérique convertie en nombre, défaut d'`allowfullscreen` |
|
|
74
|
-
| `information-pane` | `type` via `data-type`, défaut `info` |
|
|
75
|
-
| `attachment` | parse les `<a>` enfants en `links[]`, retombe sur le dernier segment du `href` pour l'identifiant du document |
|
|
76
|
-
| `conversation-history` | le plugin ProseMirror qui regroupe tout ce qui suit un `<hr>` (nécessite une vraie instance `Editor`/transaction, pas juste `generateJSON` — le `content` initial seul ne le déclenche pas) |
|
|
77
|
-
| `conversation-history-body` | parse/rendu simple |
|
|
78
|
-
| `font-size`, `line-height`, `table-cell` | comportement actuel, **y compris** le défaut préexistant `""` au lieu de `null` pour une valeur non définie (même cause racine que `StyleCompat.ts` côté backend, non introduite par cette migration, non corrigée ici — voir le commentaire de chaque spec) |
|
|
79
|
-
|
|
80
|
-
`line-height` est exportée mais non branchée actuellement dans `useTipTapEditor.ts`.
|
|
81
|
-
|
|
82
|
-
**Volontairement non couvertes** : `speech-recognition` et `speech-synthesis` n'ont aucune logique
|
|
83
|
-
`parseHTML`/`renderHTML` — elles ne font que piloter les API navigateur `SpeechRecognition`/
|
|
84
|
-
`speechSynthesis` et n'ont aucun effet sur le contenu du document, donc hors du périmètre de cette suite
|
|
85
|
-
de sérialisation de contenu. `attachment-transformer.ts` (`AttachmentTransformer`) est backend-only —
|
|
86
|
-
l'éditeur réel utilise `Attachment` d'`attachment.ts` (confirmé via `AttachmentNodeView.tsx`).
|
|
87
|
-
|
|
88
|
-
### Ajouter un test pour une nouvelle extension
|
|
89
|
-
|
|
90
|
-
1. Créer `src/<nom>/<nom>.spec.ts` à côté de l'extension.
|
|
91
|
-
2. Écrire le HTML que le `parseHTML` de l'extension est censé reconnaître (format actuel, et tout
|
|
92
|
-
format legacy encore supporté), et vérifier le type de nœud/mark et les attributs obtenus avec
|
|
93
|
-
`generateJSON`.
|
|
94
|
-
3. Si l'extension produit un rendu non trivial, vérifier que `generateHTML` sur un JSON écrit à la main
|
|
95
|
-
produit le HTML attendu.
|
|
96
|
-
4. Si l'extension est branchée dans `useTipTapEditor.ts`, ajouter un court exemple représentatif au
|
|
97
|
-
contenu kitchen-sink de `useTipTapEditor.spec.tsx` aussi.
|
|
98
|
-
|
|
99
|
-
### Lancer les tests
|
|
35
|
+
## New extension
|
|
100
36
|
|
|
101
|
-
|
|
102
|
-
pnpm --filter @edifice.io/react test
|
|
103
|
-
pnpm --filter @edifice.io/tiptap-extensions test
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## Régressions de la migration v2 → v3
|
|
107
|
-
|
|
108
|
-
Le passage à TipTap v3 a introduit plusieurs régressions dans `packages/extensions` et
|
|
109
|
-
`packages/react` (l'éditeur réel), toutes trouvées grâce à la suite de tests ci-dessus et
|
|
110
|
-
corrigées. Listées ici pour référence — chaque fichier porte un commentaire court expliquant le
|
|
111
|
-
bug précis.
|
|
112
|
-
|
|
113
|
-
| Régression | Corrigé dans |
|
|
114
|
-
|---|---|
|
|
115
|
-
| Import brut `prosemirror-state` au lieu de `@tiptap/pm/state` — risque une seconde instance ProseMirror incompatible | `src/image/image.ts`, `src/conversation-history/conversation-history.ts` |
|
|
116
|
-
| `@tiptap/extension-table-header`/`-row` n'existent plus en paquets séparés en v3 (fusionnés dans `@tiptap/extension-table`) | `packages/react/.../test-utils/createTestEditor.ts` |
|
|
117
|
-
| `StarterKit` nu entre en collision avec son `heading`/`underline`/`link` embarqués par défaut en v3, masquant nos extensions custom | `useTipTapEditor.ts`, `useCommentEditor.ts`, `createTestEditor.ts`, `EditorToolbar.spec.tsx` |
|
|
118
|
-
| `TextStyleKit` nu entre en collision avec les `Color`/`FontFamily`/`FontSize` ajoutés séparément | `useTipTapEditor.ts` |
|
|
119
|
-
| L'extension undo/redo de StarterKit a été renommée de `history` à `undoRedo` en v3 — `hasExtension('history', ...)` renvoyait toujours faux | `EditorToolbar.tsx` |
|
|
120
|
-
| `TextStyle` de `@tiptap/extension-text-style` a perdu son export par défaut en v3 | plusieurs `EditorToolbar.*.spec.tsx`, `has-text-style.spec.ts` |
|
|
121
|
-
| `FloatingMenu`/`BubbleMenu` ont déménagé de `@tiptap/react` vers `@tiptap/react/menus` | `TableToolbar.spec.tsx`, `LinkToolbar.spec.tsx`, `BubbleMenuEditImage.spec.tsx`, `BubbleMenuEditInformationPane.spec.tsx` |
|
|
122
|
-
| `setContent` émet désormais `'update'` par défaut (pas en v2), déclenchant `onContentChange` sur une synchronisation programmatique, pas seulement sur une vraie édition | `useTipTapEditor.ts` |
|
|
123
|
-
| Le bouton fusionner/scinder de `TableToolbar` restait périmé sur un simple déplacement de sélection : le hook partagé `useEditorState` n'écoutait que `'update'` (changements de contenu), pas les changements de sélection | `useEditorState.ts`, `TableToolbar.tsx` |
|
|
124
|
-
| Propriété `keepOnSplit` morte sur une config de `Node` (valide uniquement sur les `Mark`) — inoffensif mais faisait échouer `tsc` | `src/linker/linker.ts` |
|
|
125
|
-
|
|
126
|
-
## Nouvelle extension
|
|
127
|
-
|
|
128
|
-
Pour créer une nouvelle extension, procéder comme suit :
|
|
37
|
+
To create a new extension, please do as follow :
|
|
129
38
|
|
|
130
|
-
-
|
|
39
|
+
- Create a subfolder in `src` with the name of the extension (e.g: `my-extension`)
|
|
131
40
|
|
|
132
41
|
```
|
|
133
42
|
my-extension
|
|
134
43
|
```
|
|
135
44
|
|
|
136
|
-
-
|
|
45
|
+
- Create two files inside the new folder:
|
|
137
46
|
- `index.ts`
|
|
138
47
|
- `my-extension.ts`
|
|
139
48
|
|
|
@@ -143,8 +52,8 @@ my-extension
|
|
|
143
52
|
└── index.ts
|
|
144
53
|
```
|
|
145
54
|
|
|
146
|
-
-
|
|
147
|
-
-
|
|
55
|
+
- Check one existing extension or refer to the official [documentation](https://tiptap.dev/docs/editor/extensions/custom-extensions) to develop an extension.
|
|
56
|
+
- Then, add your extension in the `package.json` sub-exports in alphabetical order.
|
|
148
57
|
|
|
149
58
|
```
|
|
150
59
|
"./my-extension": {
|
|
@@ -153,5 +62,5 @@ my-extension
|
|
|
153
62
|
}
|
|
154
63
|
```
|
|
155
64
|
|
|
156
|
-
-
|
|
157
|
-
-
|
|
65
|
+
- Run `pnpm run build` to generate a bundle
|
|
66
|
+
- Test your extension before committing and pushing to remote
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__copyProps=(to,from,except,desc)=>{if(from&&typeof from==`object`||typeof from==`function`)for(var keys=__getOwnPropNames(from),i=0,n=keys.length,key;i<n;i++)key=keys[i],!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:(k=>from[k]).bind(null,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=mod==null?{}:__create(__getProtoOf(mod)),__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,`default`,{value:mod,enumerable:!0}):target,mod));exports.__toESM=__toESM;
|
package/dist/abbr/abbr.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=abbr.cjs.map
|
|
1
|
+
let _tiptap_core=require("@tiptap/core");var Abbr=_tiptap_core.Mark.create({name:`abbr`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`abbr`}]},renderHTML({HTMLAttributes}){return[`abbr`,(0,_tiptap_core.mergeAttributes)(this.options.HTMLAttributes,HTMLAttributes),0]},addCommands(){return{setAbbr:()=>({commands})=>commands.setMark(this.name),toggleAbbr:()=>({commands})=>commands.toggleMark(this.name)}}});exports.Abbr=Abbr;
|
|
2
|
+
//# sourceMappingURL=abbr.cjs.map
|
package/dist/abbr/abbr.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abbr.cjs","sources":["../../src/abbr/abbr.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n abbr: {\n /**\n * Set an abbr mark\n */\n setAbbr: (src: string) => ReturnType;\n /**\n * Toggle an abbr mark\n */\n toggleAbbr: (src: string) => ReturnType;\n };\n }\n}\n\nexport const Abbr = Mark.create({\n name: 'abbr',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'abbr',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'abbr',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n 0,\n ];\n },\n\n addCommands() {\n return {\n setAbbr:\n () =>\n ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleAbbr:\n () =>\n ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n };\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"abbr.cjs","names":[],"sources":["../../src/abbr/abbr.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n abbr: {\n /**\n * Set an abbr mark\n */\n setAbbr: (src: string) => ReturnType;\n /**\n * Toggle an abbr mark\n */\n toggleAbbr: (src: string) => ReturnType;\n };\n }\n}\n\nexport const Abbr = Mark.create({\n name: 'abbr',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'abbr',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'abbr',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n 0,\n ];\n },\n\n addCommands() {\n return {\n setAbbr:\n () =>\n ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleAbbr:\n () =>\n ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n };\n },\n});\n"],"mappings":"yCAiBA,IAAa,KAAO,aAAA,KAAK,OAAO,CAC9B,KAAM,OAEN,YAAa,CACX,MAAO,CACL,eAAgB,CAAC,CACnB,CACF,EAEA,WAAY,CACV,MAAO,CACL,CACE,IAAK,MACP,CACF,CACF,EAEA,WAAW,CAAE,gBAAkB,CAC7B,MAAO,CACL,wCACgB,KAAK,QAAQ,eAAgB,cAAc,EAC3D,CACF,CACF,EAEA,aAAc,CACZ,MAAO,CACL,aAEG,CAAE,YACM,SAAS,QAAQ,KAAK,IAAI,EAErC,gBAEG,CAAE,YACM,SAAS,WAAW,KAAK,IAAI,CAE1C,CACF,CACF,CAAC"}
|
package/dist/abbr/abbr.js
CHANGED
|
@@ -1,33 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
name: "abbr",
|
|
4
|
-
addOptions() {
|
|
5
|
-
return {
|
|
6
|
-
HTMLAttributes: {}
|
|
7
|
-
};
|
|
8
|
-
},
|
|
9
|
-
parseHTML() {
|
|
10
|
-
return [
|
|
11
|
-
{
|
|
12
|
-
tag: "abbr"
|
|
13
|
-
}
|
|
14
|
-
];
|
|
15
|
-
},
|
|
16
|
-
renderHTML({ HTMLAttributes }) {
|
|
17
|
-
return [
|
|
18
|
-
"abbr",
|
|
19
|
-
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),
|
|
20
|
-
0
|
|
21
|
-
];
|
|
22
|
-
},
|
|
23
|
-
addCommands() {
|
|
24
|
-
return {
|
|
25
|
-
setAbbr: () => ({ commands }) => commands.setMark(this.name),
|
|
26
|
-
toggleAbbr: () => ({ commands }) => commands.toggleMark(this.name)
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
export {
|
|
31
|
-
Abbr
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=abbr.js.map
|
|
1
|
+
import{Mark,mergeAttributes}from"@tiptap/core";var Abbr=Mark.create({name:`abbr`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`abbr`}]},renderHTML({HTMLAttributes}){return[`abbr`,mergeAttributes(this.options.HTMLAttributes,HTMLAttributes),0]},addCommands(){return{setAbbr:()=>({commands})=>commands.setMark(this.name),toggleAbbr:()=>({commands})=>commands.toggleMark(this.name)}}});export{Abbr};
|
|
2
|
+
//# sourceMappingURL=abbr.js.map
|
package/dist/abbr/abbr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abbr.js","sources":["../../src/abbr/abbr.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n abbr: {\n /**\n * Set an abbr mark\n */\n setAbbr: (src: string) => ReturnType;\n /**\n * Toggle an abbr mark\n */\n toggleAbbr: (src: string) => ReturnType;\n };\n }\n}\n\nexport const Abbr = Mark.create({\n name: 'abbr',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'abbr',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'abbr',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n 0,\n ];\n },\n\n addCommands() {\n return {\n setAbbr:\n () =>\n ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleAbbr:\n () =>\n ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n };\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"abbr.js","names":[],"sources":["../../src/abbr/abbr.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n abbr: {\n /**\n * Set an abbr mark\n */\n setAbbr: (src: string) => ReturnType;\n /**\n * Toggle an abbr mark\n */\n toggleAbbr: (src: string) => ReturnType;\n };\n }\n}\n\nexport const Abbr = Mark.create({\n name: 'abbr',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'abbr',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'abbr',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n 0,\n ];\n },\n\n addCommands() {\n return {\n setAbbr:\n () =>\n ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleAbbr:\n () =>\n ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n };\n },\n});\n"],"mappings":"+CAiBA,IAAa,KAAO,KAAK,OAAO,CAC9B,KAAM,OAEN,YAAa,CACX,MAAO,CACL,eAAgB,CAAC,CACnB,CACF,EAEA,WAAY,CACV,MAAO,CACL,CACE,IAAK,MACP,CACF,CACF,EAEA,WAAW,CAAE,gBAAkB,CAC7B,MAAO,CACL,OACA,gBAAgB,KAAK,QAAQ,eAAgB,cAAc,EAC3D,CACF,CACF,EAEA,aAAc,CACZ,MAAO,CACL,aAEG,CAAE,YACM,SAAS,QAAQ,KAAK,IAAI,EAErC,gBAEG,CAAE,YACM,SAAS,WAAW,KAAK,IAAI,CAE1C,CACF,CACF,CAAC"}
|
package/dist/alert/alert.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=alert.cjs.map
|
|
1
|
+
var Alert=require("@tiptap/core").Node.create({name:`alert`,content:`inline+`,marks:``,group:`block`,inline:!1,selectable:!0,draggable:!0,parseHTML(){return[{tag:`p.info`,priority:60},{tag:`p.warning`,priority:60},{tag:`div.info`,priority:60},{tag:`div.warning`,priority:60}]},addAttributes(){return{class:{default:`info`,parseHTML:element=>element.getAttribute(`class`)}}},renderHTML({HTMLAttributes}){return[`div`,HTMLAttributes,0]}});exports.Alert=Alert;
|
|
2
|
+
//# sourceMappingURL=alert.cjs.map
|
package/dist/alert/alert.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.cjs","sources":["../../src/alert/alert.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport const Alert = Node.create({\n name: 'alert',\n content: 'inline+',\n marks: '',\n group: 'block',\n\n inline: false,\n selectable: true,\n draggable: true,\n\n parseHTML() {\n return [\n {\n tag: 'p.info',\n priority: 60,\n },\n {\n tag: 'p.warning',\n priority: 60,\n },\n {\n tag: 'div.info',\n priority: 60,\n },\n {\n tag: 'div.warning',\n priority: 60,\n },\n ];\n },\n addAttributes() {\n return {\n class: {\n default: 'info',\n parseHTML: (element) => {\n return element.getAttribute('class');\n },\n },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return ['div', HTMLAttributes, 0];\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"alert.cjs","names":[],"sources":["../../src/alert/alert.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport const Alert = Node.create({\n name: 'alert',\n content: 'inline+',\n marks: '',\n group: 'block',\n\n inline: false,\n selectable: true,\n draggable: true,\n\n parseHTML() {\n return [\n {\n tag: 'p.info',\n priority: 60,\n },\n {\n tag: 'p.warning',\n priority: 60,\n },\n {\n tag: 'div.info',\n priority: 60,\n },\n {\n tag: 'div.warning',\n priority: 60,\n },\n ];\n },\n addAttributes() {\n return {\n class: {\n default: 'info',\n parseHTML: (element) => {\n return element.getAttribute('class');\n },\n },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return ['div', HTMLAttributes, 0];\n },\n});\n"],"mappings":"AAEA,IAAa,4BAAQ,EAAA,KAAK,OAAO,CAC/B,KAAM,QACN,QAAS,UACT,MAAO,GACP,MAAO,QAEP,OAAQ,GACR,WAAY,GACZ,UAAW,GAEX,WAAY,CACV,MAAO,CACL,CACE,IAAK,SACL,SAAU,EACZ,EACA,CACE,IAAK,YACL,SAAU,EACZ,EACA,CACE,IAAK,WACL,SAAU,EACZ,EACA,CACE,IAAK,cACL,SAAU,EACZ,CACF,CACF,EACA,eAAgB,CACd,MAAO,CACL,MAAO,CACL,QAAS,OACT,UAAY,SACH,QAAQ,aAAa,OAAO,CAEvC,CACF,CACF,EACA,WAAW,CAAE,gBAAkB,CAC7B,MAAO,CAAC,MAAO,eAAgB,CAAC,CAClC,CACF,CAAC"}
|
package/dist/alert/alert.js
CHANGED
|
@@ -1,45 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
name: "alert",
|
|
4
|
-
content: "inline+",
|
|
5
|
-
marks: "",
|
|
6
|
-
group: "block",
|
|
7
|
-
inline: !1,
|
|
8
|
-
selectable: !0,
|
|
9
|
-
draggable: !0,
|
|
10
|
-
parseHTML() {
|
|
11
|
-
return [
|
|
12
|
-
{
|
|
13
|
-
tag: "p.info",
|
|
14
|
-
priority: 60
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
tag: "p.warning",
|
|
18
|
-
priority: 60
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
tag: "div.info",
|
|
22
|
-
priority: 60
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
tag: "div.warning",
|
|
26
|
-
priority: 60
|
|
27
|
-
}
|
|
28
|
-
];
|
|
29
|
-
},
|
|
30
|
-
addAttributes() {
|
|
31
|
-
return {
|
|
32
|
-
class: {
|
|
33
|
-
default: "info",
|
|
34
|
-
parseHTML: (element) => element.getAttribute("class")
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
},
|
|
38
|
-
renderHTML({ HTMLAttributes }) {
|
|
39
|
-
return ["div", HTMLAttributes, 0];
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
export {
|
|
43
|
-
Alert
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=alert.js.map
|
|
1
|
+
import{Node}from"@tiptap/core";var Alert=Node.create({name:`alert`,content:`inline+`,marks:``,group:`block`,inline:!1,selectable:!0,draggable:!0,parseHTML(){return[{tag:`p.info`,priority:60},{tag:`p.warning`,priority:60},{tag:`div.info`,priority:60},{tag:`div.warning`,priority:60}]},addAttributes(){return{class:{default:`info`,parseHTML:element=>element.getAttribute(`class`)}}},renderHTML({HTMLAttributes}){return[`div`,HTMLAttributes,0]}});export{Alert};
|
|
2
|
+
//# sourceMappingURL=alert.js.map
|
package/dist/alert/alert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.js","sources":["../../src/alert/alert.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport const Alert = Node.create({\n name: 'alert',\n content: 'inline+',\n marks: '',\n group: 'block',\n\n inline: false,\n selectable: true,\n draggable: true,\n\n parseHTML() {\n return [\n {\n tag: 'p.info',\n priority: 60,\n },\n {\n tag: 'p.warning',\n priority: 60,\n },\n {\n tag: 'div.info',\n priority: 60,\n },\n {\n tag: 'div.warning',\n priority: 60,\n },\n ];\n },\n addAttributes() {\n return {\n class: {\n default: 'info',\n parseHTML: (element) => {\n return element.getAttribute('class');\n },\n },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return ['div', HTMLAttributes, 0];\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"alert.js","names":[],"sources":["../../src/alert/alert.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport const Alert = Node.create({\n name: 'alert',\n content: 'inline+',\n marks: '',\n group: 'block',\n\n inline: false,\n selectable: true,\n draggable: true,\n\n parseHTML() {\n return [\n {\n tag: 'p.info',\n priority: 60,\n },\n {\n tag: 'p.warning',\n priority: 60,\n },\n {\n tag: 'div.info',\n priority: 60,\n },\n {\n tag: 'div.warning',\n priority: 60,\n },\n ];\n },\n addAttributes() {\n return {\n class: {\n default: 'info',\n parseHTML: (element) => {\n return element.getAttribute('class');\n },\n },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return ['div', HTMLAttributes, 0];\n },\n});\n"],"mappings":"+BAEA,IAAa,MAAQ,KAAK,OAAO,CAC/B,KAAM,QACN,QAAS,UACT,MAAO,GACP,MAAO,QAEP,OAAQ,GACR,WAAY,GACZ,UAAW,GAEX,WAAY,CACV,MAAO,CACL,CACE,IAAK,SACL,SAAU,EACZ,EACA,CACE,IAAK,YACL,SAAU,EACZ,EACA,CACE,IAAK,WACL,SAAU,EACZ,EACA,CACE,IAAK,cACL,SAAU,EACZ,CACF,CACF,EACA,eAAgB,CACd,MAAO,CACL,MAAO,CACL,QAAS,OACT,UAAY,SACH,QAAQ,aAAa,OAAO,CAEvC,CACF,CACF,EACA,WAAW,CAAE,gBAAkB,CAC7B,MAAO,CAAC,MAAO,eAAgB,CAAC,CAClC,CACF,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=attachment-transformer.cjs.map
|
|
1
|
+
var AttachmentTransformer=require("@tiptap/core").Node.create({name:`attachments`,content:``,marks:``,group:`inline`,inline:!0,selectable:!0,atom:!0,draggable:!0,addOptions(){return{HTMLAttributes:{class:`attachments`}}},parseHTML(){return[{tag:`div[class=attachments]`}]},renderHTML({HTMLAttributes}){let renderedLinks=HTMLAttributes.links.map(el=>[`a`,{name:el.name,href:el.href,"data-document-id":el[`data-document-id`],"data-content-type":el[`data-content-type`]},el.name]);return[`div`,this.options.HTMLAttributes,...renderedLinks]},addAttributes(){return{links:{default:[],parseHTML:element=>{let links=element.getElementsByTagName(`a`),parsedLinks=[];for(let i=0;i<links.length;i++){let link=links[i],href=link.getAttribute(`href`),name=link.textContent,regexResult=href.match(/([^/]+$)/),dataDocumentId=link.getAttribute(`data-document-id`)||regexResult&®exResult[0],dataContentType=link.getAttribute(`data-content-type`);parsedLinks.push({href,name,dataDocumentId,dataContentType})}return parsedLinks},renderHTML:attributes=>({links:attributes.links.map(link=>({href:link.href,name:link.name,"data-document-id":link.dataDocumentId,"data-content-type":link.dataContentType}))})}}},addCommands(){return{setAttachment:(attrs={dataContentType:``,name:``,documentId:``,href:``})=>({chain})=>chain().insertContent({type:this.name,attrs}).run()}}});exports.AttachmentTransformer=AttachmentTransformer;
|
|
2
|
+
//# sourceMappingURL=attachment-transformer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-transformer.cjs","sources":["../../src/attachment/attachment-transformer.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport interface AttachmentOptions {\n HTMLAttributes: Record<string, string>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n attachment: {\n setAttachment: (attachment: any) => ReturnType;\n unsetAttachment: (documentId: string) => ReturnType;\n };\n }\n}\n\nexport const AttachmentTransformer = Node.create<AttachmentOptions>({\n name: 'attachments',\n content: '',\n marks: '',\n group: 'inline',\n inline: true,\n selectable: true,\n atom: true,\n draggable: true,\n\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'attachments',\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[class=attachments]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const links = HTMLAttributes.links;\n\n const renderedLinks = links.map((el) => {\n return [\n 'a',\n {\n 'name': el.name,\n 'href': el.href,\n 'data-document-id': el['data-document-id'],\n 'data-content-type': el['data-content-type'],\n },\n el.name,\n ];\n });\n\n return ['div', this.options.HTMLAttributes, ...renderedLinks];\n },\n\n addAttributes() {\n return {\n links: {\n default: [],\n parseHTML: (element) => {\n const links = element.getElementsByTagName('a');\n const parsedLinks = [];\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n const href = link.getAttribute('href');\n const name = link.textContent;\n const regexResult = href.match(/([^/]+$)/);\n const dataDocumentId =\n link.getAttribute('data-document-id') ||\n (regexResult && regexResult[0]);\n const dataContentType = link.getAttribute('data-content-type');\n\n parsedLinks.push({\n href: href,\n name: name,\n dataDocumentId,\n dataContentType,\n });\n }\n\n return parsedLinks;\n },\n renderHTML: (attributes) => {\n return {\n links: attributes.links.map((link) => ({\n 'href': link.href,\n 'name': link.name,\n 'data-document-id': link.dataDocumentId,\n 'data-content-type': link.dataContentType,\n })),\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setAttachment:\n (\n attrs = {\n dataContentType: '',\n name: '',\n documentId: '',\n href: '',\n },\n ) =>\n ({ chain }) => {\n return chain().insertContent({ type: this.name, attrs }).run();\n },\n };\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"attachment-transformer.cjs","names":[],"sources":["../../src/attachment/attachment-transformer.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport interface AttachmentOptions {\n HTMLAttributes: Record<string, string>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n attachment: {\n setAttachment: (attachment: any) => ReturnType;\n unsetAttachment: (documentId: string) => ReturnType;\n };\n }\n}\n\nexport const AttachmentTransformer = Node.create<AttachmentOptions>({\n name: 'attachments',\n content: '',\n marks: '',\n group: 'inline',\n inline: true,\n selectable: true,\n atom: true,\n draggable: true,\n\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'attachments',\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[class=attachments]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const links = HTMLAttributes.links;\n\n const renderedLinks = links.map((el) => {\n return [\n 'a',\n {\n 'name': el.name,\n 'href': el.href,\n 'data-document-id': el['data-document-id'],\n 'data-content-type': el['data-content-type'],\n },\n el.name,\n ];\n });\n\n return ['div', this.options.HTMLAttributes, ...renderedLinks];\n },\n\n addAttributes() {\n return {\n links: {\n default: [],\n parseHTML: (element) => {\n const links = element.getElementsByTagName('a');\n const parsedLinks = [];\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n const href = link.getAttribute('href');\n const name = link.textContent;\n const regexResult = href.match(/([^/]+$)/);\n const dataDocumentId =\n link.getAttribute('data-document-id') ||\n (regexResult && regexResult[0]);\n const dataContentType = link.getAttribute('data-content-type');\n\n parsedLinks.push({\n href: href,\n name: name,\n dataDocumentId,\n dataContentType,\n });\n }\n\n return parsedLinks;\n },\n renderHTML: (attributes) => {\n return {\n links: attributes.links.map((link) => ({\n 'href': link.href,\n 'name': link.name,\n 'data-document-id': link.dataDocumentId,\n 'data-content-type': link.dataContentType,\n })),\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setAttachment:\n (\n attrs = {\n dataContentType: '',\n name: '',\n documentId: '',\n href: '',\n },\n ) =>\n ({ chain }) => {\n return chain().insertContent({ type: this.name, attrs }).run();\n },\n };\n },\n});\n"],"mappings":"AAeA,IAAa,4CAAwB,EAAA,KAAK,OAA0B,CAClE,KAAM,cACN,QAAS,GACT,MAAO,GACP,MAAO,SACP,OAAQ,GACR,WAAY,GACZ,KAAM,GACN,UAAW,GAEX,YAAa,CACX,MAAO,CACL,eAAgB,CACd,MAAO,aACT,CACF,CACF,EAEA,WAAY,CACV,MAAO,CAAC,CAAE,IAAK,wBAAyB,CAAC,CAC3C,EAEA,WAAW,CAAE,gBAAkB,CAG7B,IAAM,cAFQ,eAAe,MAED,IAAK,IACxB,CACL,IACA,CACE,KAAQ,GAAG,KACX,KAAQ,GAAG,KACX,mBAAoB,GAAG,oBACvB,oBAAqB,GAAG,oBAC1B,EACA,GAAG,IACL,CACD,EAED,MAAO,CAAC,MAAO,KAAK,QAAQ,eAAgB,GAAG,aAAa,CAC9D,EAEA,eAAgB,CACd,MAAO,CACL,MAAO,CACL,QAAS,CAAC,EACV,UAAY,SAAY,CACtB,IAAM,MAAQ,QAAQ,qBAAqB,GAAG,EACxC,YAAc,CAAC,EAErB,IAAK,IAAI,EAAI,EAAG,EAAI,MAAM,OAAQ,IAAK,CACrC,IAAM,KAAO,MAAM,GACb,KAAO,KAAK,aAAa,MAAM,EAC/B,KAAO,KAAK,YACZ,YAAc,KAAK,MAAM,UAAU,EACnC,eACJ,KAAK,aAAa,kBAAkB,GACnC,aAAe,YAAY,GACxB,gBAAkB,KAAK,aAAa,mBAAmB,EAE7D,YAAY,KAAK,CACT,KACA,KACN,eACA,eACF,CAAC,CACH,CAEA,OAAO,WACT,EACA,WAAa,aACJ,CACL,MAAO,WAAW,MAAM,IAAK,OAAU,CACrC,KAAQ,KAAK,KACb,KAAQ,KAAK,KACb,mBAAoB,KAAK,eACzB,oBAAqB,KAAK,eAC5B,EAAE,CACJ,EAEJ,CACF,CACF,EAEA,aAAc,CACZ,MAAO,CACL,eAEI,MAAQ,CACN,gBAAiB,GACjB,KAAM,GACN,WAAY,GACZ,KAAM,EACR,KAED,CAAE,SACM,MAAM,EAAE,cAAc,CAAE,KAAM,KAAK,KAAM,KAAM,CAAC,EAAE,IAAI,CAEnE,CACF,CACF,CAAC"}
|
|
@@ -1,76 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
name: "attachments",
|
|
4
|
-
content: "",
|
|
5
|
-
marks: "",
|
|
6
|
-
group: "inline",
|
|
7
|
-
inline: !0,
|
|
8
|
-
selectable: !0,
|
|
9
|
-
atom: !0,
|
|
10
|
-
draggable: !0,
|
|
11
|
-
addOptions() {
|
|
12
|
-
return {
|
|
13
|
-
HTMLAttributes: {
|
|
14
|
-
class: "attachments"
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
},
|
|
18
|
-
parseHTML() {
|
|
19
|
-
return [{ tag: "div[class=attachments]" }];
|
|
20
|
-
},
|
|
21
|
-
renderHTML({ HTMLAttributes }) {
|
|
22
|
-
const renderedLinks = HTMLAttributes.links.map((el) => [
|
|
23
|
-
"a",
|
|
24
|
-
{
|
|
25
|
-
name: el.name,
|
|
26
|
-
href: el.href,
|
|
27
|
-
"data-document-id": el["data-document-id"],
|
|
28
|
-
"data-content-type": el["data-content-type"]
|
|
29
|
-
},
|
|
30
|
-
el.name
|
|
31
|
-
]);
|
|
32
|
-
return ["div", this.options.HTMLAttributes, ...renderedLinks];
|
|
33
|
-
},
|
|
34
|
-
addAttributes() {
|
|
35
|
-
return {
|
|
36
|
-
links: {
|
|
37
|
-
default: [],
|
|
38
|
-
parseHTML: (element) => {
|
|
39
|
-
const links = element.getElementsByTagName("a"), parsedLinks = [];
|
|
40
|
-
for (let i = 0; i < links.length; i++) {
|
|
41
|
-
const link = links[i], href = link.getAttribute("href"), name = link.textContent, regexResult = href.match(/([^/]+$)/), dataDocumentId = link.getAttribute("data-document-id") || regexResult && regexResult[0], dataContentType = link.getAttribute("data-content-type");
|
|
42
|
-
parsedLinks.push({
|
|
43
|
-
href,
|
|
44
|
-
name,
|
|
45
|
-
dataDocumentId,
|
|
46
|
-
dataContentType
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
return parsedLinks;
|
|
50
|
-
},
|
|
51
|
-
renderHTML: (attributes) => ({
|
|
52
|
-
links: attributes.links.map((link) => ({
|
|
53
|
-
href: link.href,
|
|
54
|
-
name: link.name,
|
|
55
|
-
"data-document-id": link.dataDocumentId,
|
|
56
|
-
"data-content-type": link.dataContentType
|
|
57
|
-
}))
|
|
58
|
-
})
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
addCommands() {
|
|
63
|
-
return {
|
|
64
|
-
setAttachment: (attrs = {
|
|
65
|
-
dataContentType: "",
|
|
66
|
-
name: "",
|
|
67
|
-
documentId: "",
|
|
68
|
-
href: ""
|
|
69
|
-
}) => ({ chain }) => chain().insertContent({ type: this.name, attrs }).run()
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
export {
|
|
74
|
-
AttachmentTransformer
|
|
75
|
-
};
|
|
76
|
-
//# sourceMappingURL=attachment-transformer.js.map
|
|
1
|
+
import{Node}from"@tiptap/core";var AttachmentTransformer=Node.create({name:`attachments`,content:``,marks:``,group:`inline`,inline:!0,selectable:!0,atom:!0,draggable:!0,addOptions(){return{HTMLAttributes:{class:`attachments`}}},parseHTML(){return[{tag:`div[class=attachments]`}]},renderHTML({HTMLAttributes}){let renderedLinks=HTMLAttributes.links.map(el=>[`a`,{name:el.name,href:el.href,"data-document-id":el[`data-document-id`],"data-content-type":el[`data-content-type`]},el.name]);return[`div`,this.options.HTMLAttributes,...renderedLinks]},addAttributes(){return{links:{default:[],parseHTML:element=>{let links=element.getElementsByTagName(`a`),parsedLinks=[];for(let i=0;i<links.length;i++){let link=links[i],href=link.getAttribute(`href`),name=link.textContent,regexResult=href.match(/([^/]+$)/),dataDocumentId=link.getAttribute(`data-document-id`)||regexResult&®exResult[0],dataContentType=link.getAttribute(`data-content-type`);parsedLinks.push({href,name,dataDocumentId,dataContentType})}return parsedLinks},renderHTML:attributes=>({links:attributes.links.map(link=>({href:link.href,name:link.name,"data-document-id":link.dataDocumentId,"data-content-type":link.dataContentType}))})}}},addCommands(){return{setAttachment:(attrs={dataContentType:``,name:``,documentId:``,href:``})=>({chain})=>chain().insertContent({type:this.name,attrs}).run()}}});export{AttachmentTransformer};
|
|
2
|
+
//# sourceMappingURL=attachment-transformer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-transformer.js","sources":["../../src/attachment/attachment-transformer.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport interface AttachmentOptions {\n HTMLAttributes: Record<string, string>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n attachment: {\n setAttachment: (attachment: any) => ReturnType;\n unsetAttachment: (documentId: string) => ReturnType;\n };\n }\n}\n\nexport const AttachmentTransformer = Node.create<AttachmentOptions>({\n name: 'attachments',\n content: '',\n marks: '',\n group: 'inline',\n inline: true,\n selectable: true,\n atom: true,\n draggable: true,\n\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'attachments',\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[class=attachments]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const links = HTMLAttributes.links;\n\n const renderedLinks = links.map((el) => {\n return [\n 'a',\n {\n 'name': el.name,\n 'href': el.href,\n 'data-document-id': el['data-document-id'],\n 'data-content-type': el['data-content-type'],\n },\n el.name,\n ];\n });\n\n return ['div', this.options.HTMLAttributes, ...renderedLinks];\n },\n\n addAttributes() {\n return {\n links: {\n default: [],\n parseHTML: (element) => {\n const links = element.getElementsByTagName('a');\n const parsedLinks = [];\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n const href = link.getAttribute('href');\n const name = link.textContent;\n const regexResult = href.match(/([^/]+$)/);\n const dataDocumentId =\n link.getAttribute('data-document-id') ||\n (regexResult && regexResult[0]);\n const dataContentType = link.getAttribute('data-content-type');\n\n parsedLinks.push({\n href: href,\n name: name,\n dataDocumentId,\n dataContentType,\n });\n }\n\n return parsedLinks;\n },\n renderHTML: (attributes) => {\n return {\n links: attributes.links.map((link) => ({\n 'href': link.href,\n 'name': link.name,\n 'data-document-id': link.dataDocumentId,\n 'data-content-type': link.dataContentType,\n })),\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setAttachment:\n (\n attrs = {\n dataContentType: '',\n name: '',\n documentId: '',\n href: '',\n },\n ) =>\n ({ chain }) => {\n return chain().insertContent({ type: this.name, attrs }).run();\n },\n };\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"attachment-transformer.js","names":[],"sources":["../../src/attachment/attachment-transformer.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport interface AttachmentOptions {\n HTMLAttributes: Record<string, string>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n attachment: {\n setAttachment: (attachment: any) => ReturnType;\n unsetAttachment: (documentId: string) => ReturnType;\n };\n }\n}\n\nexport const AttachmentTransformer = Node.create<AttachmentOptions>({\n name: 'attachments',\n content: '',\n marks: '',\n group: 'inline',\n inline: true,\n selectable: true,\n atom: true,\n draggable: true,\n\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'attachments',\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[class=attachments]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const links = HTMLAttributes.links;\n\n const renderedLinks = links.map((el) => {\n return [\n 'a',\n {\n 'name': el.name,\n 'href': el.href,\n 'data-document-id': el['data-document-id'],\n 'data-content-type': el['data-content-type'],\n },\n el.name,\n ];\n });\n\n return ['div', this.options.HTMLAttributes, ...renderedLinks];\n },\n\n addAttributes() {\n return {\n links: {\n default: [],\n parseHTML: (element) => {\n const links = element.getElementsByTagName('a');\n const parsedLinks = [];\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n const href = link.getAttribute('href');\n const name = link.textContent;\n const regexResult = href.match(/([^/]+$)/);\n const dataDocumentId =\n link.getAttribute('data-document-id') ||\n (regexResult && regexResult[0]);\n const dataContentType = link.getAttribute('data-content-type');\n\n parsedLinks.push({\n href: href,\n name: name,\n dataDocumentId,\n dataContentType,\n });\n }\n\n return parsedLinks;\n },\n renderHTML: (attributes) => {\n return {\n links: attributes.links.map((link) => ({\n 'href': link.href,\n 'name': link.name,\n 'data-document-id': link.dataDocumentId,\n 'data-content-type': link.dataContentType,\n })),\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setAttachment:\n (\n attrs = {\n dataContentType: '',\n name: '',\n documentId: '',\n href: '',\n },\n ) =>\n ({ chain }) => {\n return chain().insertContent({ type: this.name, attrs }).run();\n },\n };\n },\n});\n"],"mappings":"+BAeA,IAAa,sBAAwB,KAAK,OAA0B,CAClE,KAAM,cACN,QAAS,GACT,MAAO,GACP,MAAO,SACP,OAAQ,GACR,WAAY,GACZ,KAAM,GACN,UAAW,GAEX,YAAa,CACX,MAAO,CACL,eAAgB,CACd,MAAO,aACT,CACF,CACF,EAEA,WAAY,CACV,MAAO,CAAC,CAAE,IAAK,wBAAyB,CAAC,CAC3C,EAEA,WAAW,CAAE,gBAAkB,CAG7B,IAAM,cAFQ,eAAe,MAED,IAAK,IACxB,CACL,IACA,CACE,KAAQ,GAAG,KACX,KAAQ,GAAG,KACX,mBAAoB,GAAG,oBACvB,oBAAqB,GAAG,oBAC1B,EACA,GAAG,IACL,CACD,EAED,MAAO,CAAC,MAAO,KAAK,QAAQ,eAAgB,GAAG,aAAa,CAC9D,EAEA,eAAgB,CACd,MAAO,CACL,MAAO,CACL,QAAS,CAAC,EACV,UAAY,SAAY,CACtB,IAAM,MAAQ,QAAQ,qBAAqB,GAAG,EACxC,YAAc,CAAC,EAErB,IAAK,IAAI,EAAI,EAAG,EAAI,MAAM,OAAQ,IAAK,CACrC,IAAM,KAAO,MAAM,GACb,KAAO,KAAK,aAAa,MAAM,EAC/B,KAAO,KAAK,YACZ,YAAc,KAAK,MAAM,UAAU,EACnC,eACJ,KAAK,aAAa,kBAAkB,GACnC,aAAe,YAAY,GACxB,gBAAkB,KAAK,aAAa,mBAAmB,EAE7D,YAAY,KAAK,CACT,KACA,KACN,eACA,eACF,CAAC,CACH,CAEA,OAAO,WACT,EACA,WAAa,aACJ,CACL,MAAO,WAAW,MAAM,IAAK,OAAU,CACrC,KAAQ,KAAK,KACb,KAAQ,KAAK,KACb,mBAAoB,KAAK,eACzB,oBAAqB,KAAK,eAC5B,EAAE,CACJ,EAEJ,CACF,CACF,EAEA,aAAc,CACZ,MAAO,CACL,eAEI,MAAQ,CACN,gBAAiB,GACjB,KAAM,GACN,WAAY,GACZ,KAAM,EACR,KAED,CAAE,SACM,MAAM,EAAE,cAAc,CAAE,KAAM,KAAK,KAAM,KAAM,CAAC,EAAE,IAAI,CAEnE,CACF,CACF,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=attachment.cjs.map
|
|
1
|
+
var Attachment=require("@tiptap/core").Node.create({name:`attachments`,content:``,marks:``,group:`block`,selectable:!0,atom:!0,draggable:!0,addOptions(){return{HTMLAttributes:{class:`attachments`}}},parseHTML(){return[{tag:`div[class=attachments]`}]},renderHTML({HTMLAttributes}){let renderedLinks=HTMLAttributes.links.map(el=>[`a`,{name:el.name,href:el.href,"data-document-id":el[`data-document-id`],"data-content-type":el[`data-content-type`]},el.name]);return[`div`,this.options.HTMLAttributes,...renderedLinks]},addAttributes(){return{links:{default:[],parseHTML:element=>{let links=element.getElementsByTagName(`a`),parsedLinks=[];for(let i=0;i<links.length;i++){let link=links[i],href=link.getAttribute(`href`),name=link.textContent,regexResult=href.match(/([^/]+$)/),dataDocumentId=link.getAttribute(`data-document-id`)||regexResult&®exResult[0],dataContentType=link.getAttribute(`data-content-type`);parsedLinks.push({href,name,dataDocumentId,dataContentType})}return parsedLinks},renderHTML:attributes=>({links:attributes.links.map(link=>({href:link.href,name:link.name,"data-document-id":link.dataDocumentId,"data-content-type":link.dataContentType}))})}}},addCommands(){return{setAttachment:(attrs={dataContentType:``,name:``,documentId:``,href:``})=>({chain})=>chain().insertContent({type:this.name,attrs}).run(),unsetAttachment:documentId=>({state,dispatch})=>{let transaction=state.tr,hasChanged=!1;return state.doc.descendants((node,pos)=>{if(node.type.name!==this.name)return!0;let mappedPos=transaction.mapping.map(pos),links=node.attrs.links??[],newLinks=links.filter(link=>{let linkDocumentId=link.dataDocumentId??link.documentId??link[`data-document-id`]??link.href;return String(linkDocumentId??``)!==String(documentId??``)});if(newLinks.length===links.length)return!0;if(hasChanged=!0,newLinks.length>0)transaction=transaction.setNodeMarkup(mappedPos,void 0,{...node.attrs,links:newLinks});else{let mappedEnd=transaction.mapping.map(pos+node.nodeSize);transaction=transaction.delete(mappedPos,mappedEnd)}return!1}),hasChanged&&dispatch&&dispatch(transaction),hasChanged}}}});exports.Attachment=Attachment;
|
|
2
|
+
//# sourceMappingURL=attachment.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.cjs","sources":["../../src/attachment/attachment.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport interface AttachmentOptions {\n HTMLAttributes: Record<string, string>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n attachment: {\n setAttachment: (attachment) => ReturnType;\n unsetAttachment: (documentId: string) => ReturnType; // Modification de la commande\n };\n }\n}\ninterface AttachmentAttrsProps {\n name: string;\n href: string;\n dataDocumentId: string;\n dataContentType: string;\n}\n\nexport const Attachment = Node.create<AttachmentOptions>({\n name: 'attachments',\n content: '',\n marks: '',\n group: 'block',\n selectable: true,\n atom: true,\n draggable: true,\n\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'attachments',\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[class=attachments]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const links = HTMLAttributes.links;\n\n const renderedLinks = links.map((el) => {\n return [\n 'a',\n {\n 'name': el.name,\n 'href': el.href,\n 'data-document-id': el['data-document-id'],\n 'data-content-type': el['data-content-type'],\n },\n el.name,\n ];\n });\n\n return ['div', this.options.HTMLAttributes, ...renderedLinks];\n },\n\n addAttributes() {\n return {\n links: {\n default: [],\n parseHTML: (element) => {\n const links = element.getElementsByTagName('a');\n const parsedLinks: AttachmentAttrsProps[] = [];\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n const href = link.getAttribute('href');\n const name = link.textContent;\n const regexResult = href.match(/([^/]+$)/);\n const dataDocumentId =\n link.getAttribute('data-document-id') ||\n (regexResult && regexResult[0]);\n const dataContentType = link.getAttribute('data-content-type');\n\n parsedLinks.push({\n href: href,\n name: name,\n dataDocumentId,\n dataContentType,\n });\n }\n\n return parsedLinks;\n },\n renderHTML: (attributes) => {\n return {\n links: attributes.links.map((link: AttachmentAttrsProps) => ({\n 'href': link.href,\n 'name': link.name,\n 'data-document-id': link.dataDocumentId,\n 'data-content-type': link.dataContentType,\n })),\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setAttachment:\n (\n attrs = {\n dataContentType: '',\n name: '',\n documentId: '',\n href: '',\n },\n ) =>\n ({ chain }) => {\n return chain().insertContent({ type: this.name, attrs }).run();\n },\n unsetAttachment:\n (documentId: string) =>\n ({ state, dispatch }) => {\n let transaction = state.tr;\n let hasChanged = false;\n\n state.doc.descendants((node, pos) => {\n if (node.type.name !== this.name) {\n return true;\n }\n\n const mappedPos = transaction.mapping.map(pos);\n\n const links = node.attrs.links ?? [];\n const newLinks = links.filter((link) => {\n const linkDocumentId =\n link.dataDocumentId ??\n link.documentId ??\n link['data-document-id'] ??\n link.href;\n return String(linkDocumentId ?? '') !== String(documentId ?? '');\n });\n\n if (newLinks.length === links.length) {\n return true;\n }\n\n hasChanged = true;\n\n if (newLinks.length > 0) {\n transaction = transaction.setNodeMarkup(mappedPos, undefined, {\n ...node.attrs,\n links: newLinks,\n });\n } else {\n const mappedEnd = transaction.mapping.map(pos + node.nodeSize);\n transaction = transaction.delete(mappedPos, mappedEnd);\n }\n\n return false;\n });\n\n if (hasChanged && dispatch) {\n dispatch(transaction);\n }\n\n return hasChanged;\n },\n };\n },\n});\n"],"
|
|
1
|
+
{"version":3,"file":"attachment.cjs","names":[],"sources":["../../src/attachment/attachment.ts"],"sourcesContent":["import { Node } from '@tiptap/core';\n\nexport interface AttachmentOptions {\n HTMLAttributes: Record<string, string>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n attachment: {\n setAttachment: (attachment) => ReturnType;\n unsetAttachment: (documentId: string) => ReturnType; // Modification de la commande\n };\n }\n}\ninterface AttachmentAttrsProps {\n name: string;\n href: string;\n dataDocumentId: string;\n dataContentType: string;\n}\n\nexport const Attachment = Node.create<AttachmentOptions>({\n name: 'attachments',\n content: '',\n marks: '',\n group: 'block',\n selectable: true,\n atom: true,\n draggable: true,\n\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'attachments',\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[class=attachments]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const links = HTMLAttributes.links;\n\n const renderedLinks = links.map((el) => {\n return [\n 'a',\n {\n 'name': el.name,\n 'href': el.href,\n 'data-document-id': el['data-document-id'],\n 'data-content-type': el['data-content-type'],\n },\n el.name,\n ];\n });\n\n return ['div', this.options.HTMLAttributes, ...renderedLinks];\n },\n\n addAttributes() {\n return {\n links: {\n default: [],\n parseHTML: (element) => {\n const links = element.getElementsByTagName('a');\n const parsedLinks: AttachmentAttrsProps[] = [];\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n const href = link.getAttribute('href');\n const name = link.textContent;\n const regexResult = href.match(/([^/]+$)/);\n const dataDocumentId =\n link.getAttribute('data-document-id') ||\n (regexResult && regexResult[0]);\n const dataContentType = link.getAttribute('data-content-type');\n\n parsedLinks.push({\n href: href,\n name: name,\n dataDocumentId,\n dataContentType,\n });\n }\n\n return parsedLinks;\n },\n renderHTML: (attributes) => {\n return {\n links: attributes.links.map((link: AttachmentAttrsProps) => ({\n 'href': link.href,\n 'name': link.name,\n 'data-document-id': link.dataDocumentId,\n 'data-content-type': link.dataContentType,\n })),\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setAttachment:\n (\n attrs = {\n dataContentType: '',\n name: '',\n documentId: '',\n href: '',\n },\n ) =>\n ({ chain }) => {\n return chain().insertContent({ type: this.name, attrs }).run();\n },\n unsetAttachment:\n (documentId: string) =>\n ({ state, dispatch }) => {\n let transaction = state.tr;\n let hasChanged = false;\n\n state.doc.descendants((node, pos) => {\n if (node.type.name !== this.name) {\n return true;\n }\n\n const mappedPos = transaction.mapping.map(pos);\n\n const links = node.attrs.links ?? [];\n const newLinks = links.filter((link) => {\n const linkDocumentId =\n link.dataDocumentId ??\n link.documentId ??\n link['data-document-id'] ??\n link.href;\n return String(linkDocumentId ?? '') !== String(documentId ?? '');\n });\n\n if (newLinks.length === links.length) {\n return true;\n }\n\n hasChanged = true;\n\n if (newLinks.length > 0) {\n transaction = transaction.setNodeMarkup(mappedPos, undefined, {\n ...node.attrs,\n links: newLinks,\n });\n } else {\n const mappedEnd = transaction.mapping.map(pos + node.nodeSize);\n transaction = transaction.delete(mappedPos, mappedEnd);\n }\n\n return false;\n });\n\n if (hasChanged && dispatch) {\n dispatch(transaction);\n }\n\n return hasChanged;\n },\n };\n },\n});\n"],"mappings":"AAqBA,IAAa,iCAAa,EAAA,KAAK,OAA0B,CACvD,KAAM,cACN,QAAS,GACT,MAAO,GACP,MAAO,QACP,WAAY,GACZ,KAAM,GACN,UAAW,GAEX,YAAa,CACX,MAAO,CACL,eAAgB,CACd,MAAO,aACT,CACF,CACF,EAEA,WAAY,CACV,MAAO,CAAC,CAAE,IAAK,wBAAyB,CAAC,CAC3C,EAEA,WAAW,CAAE,gBAAkB,CAG7B,IAAM,cAFQ,eAAe,MAED,IAAK,IACxB,CACL,IACA,CACE,KAAQ,GAAG,KACX,KAAQ,GAAG,KACX,mBAAoB,GAAG,oBACvB,oBAAqB,GAAG,oBAC1B,EACA,GAAG,IACL,CACD,EAED,MAAO,CAAC,MAAO,KAAK,QAAQ,eAAgB,GAAG,aAAa,CAC9D,EAEA,eAAgB,CACd,MAAO,CACL,MAAO,CACL,QAAS,CAAC,EACV,UAAY,SAAY,CACtB,IAAM,MAAQ,QAAQ,qBAAqB,GAAG,EACxC,YAAsC,CAAC,EAE7C,IAAK,IAAI,EAAI,EAAG,EAAI,MAAM,OAAQ,IAAK,CACrC,IAAM,KAAO,MAAM,GACb,KAAO,KAAK,aAAa,MAAM,EAC/B,KAAO,KAAK,YACZ,YAAc,KAAK,MAAM,UAAU,EACnC,eACJ,KAAK,aAAa,kBAAkB,GACnC,aAAe,YAAY,GACxB,gBAAkB,KAAK,aAAa,mBAAmB,EAE7D,YAAY,KAAK,CACT,KACA,KACN,eACA,eACF,CAAC,CACH,CAEA,OAAO,WACT,EACA,WAAa,aACJ,CACL,MAAO,WAAW,MAAM,IAAK,OAAgC,CAC3D,KAAQ,KAAK,KACb,KAAQ,KAAK,KACb,mBAAoB,KAAK,eACzB,oBAAqB,KAAK,eAC5B,EAAE,CACJ,EAEJ,CACF,CACF,EAEA,aAAc,CACZ,MAAO,CACL,eAEI,MAAQ,CACN,gBAAiB,GACjB,KAAM,GACN,WAAY,GACZ,KAAM,EACR,KAED,CAAE,SACM,MAAM,EAAE,cAAc,CAAE,KAAM,KAAK,KAAM,KAAM,CAAC,EAAE,IAAI,EAEjE,gBACG,aACA,CAAE,MAAO,YAAe,CACvB,IAAI,YAAc,MAAM,GACpB,WAAa,GA0CjB,OAxCA,MAAM,IAAI,aAAa,KAAM,MAAQ,CACnC,GAAI,KAAK,KAAK,OAAS,KAAK,KAC1B,MAAO,GAGT,IAAM,UAAY,YAAY,QAAQ,IAAI,GAAG,EAEvC,MAAQ,KAAK,MAAM,OAAS,CAAC,EAC7B,SAAW,MAAM,OAAQ,MAAS,CACtC,IAAM,eACJ,KAAK,gBACL,KAAK,YACL,KAAK,qBACL,KAAK,KACP,OAAO,OAAO,gBAAkB,EAAE,IAAM,OAAO,YAAc,EAAE,CACjE,CAAC,EAED,GAAI,SAAS,SAAW,MAAM,OAC5B,MAAO,GAKT,GAFA,WAAa,GAET,SAAS,OAAS,EACpB,YAAc,YAAY,cAAc,UAAW,IAAA,GAAW,CAC5D,GAAG,KAAK,MACR,MAAO,QACT,CAAC,MACI,CACL,IAAM,UAAY,YAAY,QAAQ,IAAI,IAAM,KAAK,QAAQ,EAC7D,YAAc,YAAY,OAAO,UAAW,SAAS,CACvD,CAEA,MAAO,EACT,CAAC,EAEG,YAAc,UAChB,SAAS,WAAW,EAGf,UACT,CACJ,CACF,CACF,CAAC"}
|