@aster-editor/core 0.4.3 → 0.5.0

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.
Files changed (94) hide show
  1. package/README.md +191 -92
  2. package/dist/api/commands.d.ts +8 -1
  3. package/dist/api/commands.d.ts.map +1 -1
  4. package/dist/api/commands.js +3 -0
  5. package/dist/api/commands.js.map +1 -1
  6. package/dist/api/index.d.ts +2 -0
  7. package/dist/api/index.d.ts.map +1 -1
  8. package/dist/api/index.js +1 -0
  9. package/dist/api/index.js.map +1 -1
  10. package/dist/api/layout.d.ts +181 -0
  11. package/dist/api/layout.d.ts.map +1 -0
  12. package/dist/api/layout.js +28 -0
  13. package/dist/api/layout.js.map +1 -0
  14. package/dist/api/options.d.ts +6 -0
  15. package/dist/api/options.d.ts.map +1 -1
  16. package/dist/commands/layout.d.ts +40 -0
  17. package/dist/commands/layout.d.ts.map +1 -0
  18. package/dist/commands/layout.js +262 -0
  19. package/dist/commands/layout.js.map +1 -0
  20. package/dist/commands/standard.d.ts +4 -3
  21. package/dist/commands/standard.d.ts.map +1 -1
  22. package/dist/commands/standard.js +7 -3
  23. package/dist/commands/standard.js.map +1 -1
  24. package/dist/editor/aster-editor.d.ts +16 -1
  25. package/dist/editor/aster-editor.d.ts.map +1 -1
  26. package/dist/editor/aster-editor.js +41 -1
  27. package/dist/editor/aster-editor.js.map +1 -1
  28. package/dist/extensions/aster-extensions.d.ts +3 -0
  29. package/dist/extensions/aster-extensions.d.ts.map +1 -1
  30. package/dist/extensions/aster-extensions.js +24 -5
  31. package/dist/extensions/aster-extensions.js.map +1 -1
  32. package/dist/extensions/header-footer-sanitize.d.ts +22 -0
  33. package/dist/extensions/header-footer-sanitize.d.ts.map +1 -0
  34. package/dist/extensions/header-footer-sanitize.js +226 -0
  35. package/dist/extensions/header-footer-sanitize.js.map +1 -0
  36. package/dist/extensions/layout-css.d.ts +88 -0
  37. package/dist/extensions/layout-css.d.ts.map +1 -0
  38. package/dist/extensions/layout-css.js +297 -0
  39. package/dist/extensions/layout-css.js.map +1 -0
  40. package/dist/extensions/list-layout.d.ts +23 -0
  41. package/dist/extensions/list-layout.d.ts.map +1 -0
  42. package/dist/extensions/list-layout.js +65 -0
  43. package/dist/extensions/list-layout.js.map +1 -0
  44. package/dist/extensions/page-break.d.ts +8 -0
  45. package/dist/extensions/page-break.d.ts.map +1 -0
  46. package/dist/extensions/page-break.js +20 -0
  47. package/dist/extensions/page-break.js.map +1 -0
  48. package/dist/extensions/page-view.d.ts +68 -0
  49. package/dist/extensions/page-view.d.ts.map +1 -0
  50. package/dist/extensions/page-view.js +189 -0
  51. package/dist/extensions/page-view.js.map +1 -0
  52. package/dist/extensions/pagination-controller.d.ts +110 -0
  53. package/dist/extensions/pagination-controller.d.ts.map +1 -0
  54. package/dist/extensions/pagination-controller.js +295 -0
  55. package/dist/extensions/pagination-controller.js.map +1 -0
  56. package/dist/extensions/pagination-layout.d.ts +54 -0
  57. package/dist/extensions/pagination-layout.d.ts.map +1 -0
  58. package/dist/extensions/pagination-layout.js +109 -0
  59. package/dist/extensions/pagination-layout.js.map +1 -0
  60. package/dist/extensions/pagination-measure.d.ts +42 -0
  61. package/dist/extensions/pagination-measure.d.ts.map +1 -0
  62. package/dist/extensions/pagination-measure.js +108 -0
  63. package/dist/extensions/pagination-measure.js.map +1 -0
  64. package/dist/extensions/pagination.d.ts +36 -0
  65. package/dist/extensions/pagination.d.ts.map +1 -0
  66. package/dist/extensions/pagination.js +69 -0
  67. package/dist/extensions/pagination.js.map +1 -0
  68. package/dist/extensions/paragraph-layout.d.ts +62 -0
  69. package/dist/extensions/paragraph-layout.d.ts.map +1 -0
  70. package/dist/extensions/paragraph-layout.js +227 -0
  71. package/dist/extensions/paragraph-layout.js.map +1 -0
  72. package/dist/extensions/run-layout.d.ts +79 -0
  73. package/dist/extensions/run-layout.d.ts.map +1 -0
  74. package/dist/extensions/run-layout.js +302 -0
  75. package/dist/extensions/run-layout.js.map +1 -0
  76. package/dist/extensions/table-layout.d.ts +85 -0
  77. package/dist/extensions/table-layout.d.ts.map +1 -0
  78. package/dist/extensions/table-layout.js +314 -0
  79. package/dist/extensions/table-layout.js.map +1 -0
  80. package/dist/html/serialize-html.d.ts +42 -0
  81. package/dist/html/serialize-html.d.ts.map +1 -0
  82. package/dist/html/serialize-html.js +159 -0
  83. package/dist/html/serialize-html.js.map +1 -0
  84. package/dist/i18n/en.d.ts.map +1 -1
  85. package/dist/i18n/en.js +8 -0
  86. package/dist/i18n/en.js.map +1 -1
  87. package/dist/i18n/fr.d.ts.map +1 -1
  88. package/dist/i18n/fr.js +8 -0
  89. package/dist/i18n/fr.js.map +1 -1
  90. package/dist/index.d.ts +11 -0
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +13 -0
  93. package/dist/index.js.map +1 -1
  94. package/package.json +2 -1
@@ -1,5 +1,5 @@
1
1
  import { Editor } from '@tiptap/core';
2
- import type { AsterCounts, AsterDocument, AsterEditor, AsterEventName, AsterEvents, AsterOptions, CommandRegistry, GetHtmlOptions, VariableStore, I18n, Unsubscribe } from '../api';
2
+ import type { AsterCounts, AsterDocument, AsterEditor, AsterEventName, AsterEvents, AsterOptions, CommandRegistry, DocumentLayout, GetHtmlOptions, PageViewOptions, VariableStore, I18n, Unsubscribe } from '../api';
3
3
  /** Classe CSS du conteneur créé dans `options.element`. */
4
4
  export declare const CONTENT_CLASS = "aster-content";
5
5
  /** Message de l'erreur levée par les méthodes de contenu appelées après `destroy()`. */
@@ -25,7 +25,18 @@ export declare class AsterEditorImpl implements AsterEditor {
25
25
  /** Document pour lequel `cachedHtml` a été calculé : identité, pas égalité. */
26
26
  private cachedDoc;
27
27
  private cachedHtml;
28
+ /** Vue page montée, `null` quand elle est inactive. */
29
+ private pageView;
28
30
  constructor(options: AsterOptions);
31
+ /**
32
+ * Active, remplace ou désactive la vue page : classe `aster--page-view` et variables
33
+ * `--aster-page-*` sur l'hôte, conteneurs d'en-tête et de pied autour du corps. `true`
34
+ * vaut `{}` (A4 portrait, marges 25,4 mm), `false` retire tout. Indépendante de la
35
+ * lecture seule. Hors contrat : à proposer dans `api/editor.ts`.
36
+ */
37
+ setPageView(options: boolean | PageViewOptions): void;
38
+ /** Mise en page de la vue page active, `null` si elle est inactive. Hors contrat. */
39
+ getLayout(): DocumentLayout | null;
29
40
  /**
30
41
  * Mode `placeholders` (défaut) : les puces restent des `span[data-aster-variable]`,
31
42
  * résultat mis en cache. Mode `resolve` : les puces sont substituées par leurs valeurs
@@ -38,6 +49,10 @@ export declare class AsterEditorImpl implements AsterEditor {
38
49
  * `getHTML()` à chaque `change`, et `normalizeOutputHtml` reparse tout le document
39
50
  * dès qu'il contient une table. Le document est immuable, toute transaction en
40
51
  * produit un nouveau : le cache s'invalide tout seul, sans compteur ni événement.
52
+ *
53
+ * La sérialisation n'est pas `tiptap.getHTML()` mais `serializeDocumentHtml` : les
54
+ * attributs `style` sortent tels que les extensions les écrivent (`#rrggbb`, ordre du
55
+ * contrat), pas réécrits par le moteur CSS.
41
56
  */
42
57
  private placeholdersHtml;
43
58
  setHTML(html: string, emit?: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"aster-editor.d.ts","sourceRoot":"","sources":["../../src/editor/aster-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAC;AAI1D,OAAO,KAAK,EAEV,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,IAAI,EACJ,WAAW,EACZ,MAAM,QAAQ,CAAC;AAchB,2DAA2D;AAC3D,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,6BAAwB,CAAC;AAe7D;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IAErC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,+EAA+E;IAC/E,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,UAAU,CAAM;gBAEZ,OAAO,EAAE,YAAY;IAqEjC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM;IAQzC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,IAAI;IAIxC,OAAO,IAAI,aAAa;IAKxB,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,UAAO,GAAG,IAAI;IAI9C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAiBtB,gFAAgF;IAChF,OAAO,CAAC,YAAY;IAKpB;;;;;OAKG;IACH,OAAO,IAAI,MAAM;IAqBjB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,WAAW;IAOxB;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI;IAQ/C,IAAI,IAAI,IAAI;IAIZ,SAAS,IAAI,OAAO;IAIpB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAUjC,UAAU,IAAI,OAAO;IAIrB,WAAW,IAAI,OAAO;IAMtB,uGAAuG;IACvG,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW;IAO5E,GAAG,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE,IAAI,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAOtF;;;OAGG;IACH,OAAO,IAAI,IAAI;IAaf;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAKpB"}
1
+ {"version":3,"file":"aster-editor.d.ts","sourceRoot":"","sources":["../../src/editor/aster-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAC;AAI1D,OAAO,KAAK,EAEV,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACb,IAAI,EACJ,WAAW,EACZ,MAAM,QAAQ,CAAC;AAgBhB,2DAA2D;AAC3D,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,6BAAwB,CAAC;AAe7D;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IAErC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,+EAA+E;IAC/E,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,UAAU,CAAM;IACxB,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAA+B;gBAEnC,OAAO,EAAE,YAAY;IA8EjC;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI;IAUrD,qFAAqF;IACrF,SAAS,IAAI,cAAc,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM;IAQzC;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,IAAI;IAIxC,OAAO,IAAI,aAAa;IAKxB,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,UAAO,GAAG,IAAI;IAI9C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAiBtB,gFAAgF;IAChF,OAAO,CAAC,YAAY;IAKpB;;;;;OAKG;IACH,OAAO,IAAI,MAAM;IAqBjB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,WAAW;IAOxB;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI;IAQ/C,IAAI,IAAI,IAAI;IAIZ,SAAS,IAAI,OAAO;IAIpB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAUjC,UAAU,IAAI,OAAO;IAIrB,WAAW,IAAI,OAAO;IAMtB,uGAAuG;IACvG,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW;IAO5E,GAAG,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE,IAAI,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAOtF;;;OAGG;IACH,OAAO,IAAI,IAAI;IAef;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAKpB"}
@@ -5,10 +5,12 @@ import { createStandardCommands } from '../commands/standard';
5
5
  import { createAsterExtensions } from '../extensions/aster-extensions';
6
6
  import { createImageUploadProps } from '../extensions/image-upload';
7
7
  import { resolveLinkPolicy } from '../extensions/link-safety';
8
+ import { applyPageView } from '../extensions/page-view';
8
9
  import { createPastePipelineProps } from '../extensions/paste-pipeline';
9
10
  import { collectShortcutBindings } from '../extensions/shortcuts';
10
11
  import { normalizeOutputHtml } from '../html/normalize-output';
11
12
  import { resolveVariablesHtml } from '../html/resolve-variables';
13
+ import { serializeDocumentHtml } from '../html/serialize-html';
12
14
  import { createI18n } from '../i18n/create-i18n';
13
15
  import { createEventEmitter } from './event-emitter';
14
16
  import { VARIABLE_NODE_NAME, createVariableStore, variableText } from './variable-store';
@@ -47,6 +49,8 @@ export class AsterEditorImpl {
47
49
  /** Document pour lequel `cachedHtml` a été calculé : identité, pas égalité. */
48
50
  cachedDoc = null;
49
51
  cachedHtml = '';
52
+ /** Vue page montée, `null` quand elle est inactive. */
53
+ pageView = null;
50
54
  constructor(options) {
51
55
  this.element = options.element;
52
56
  this.emitter = createEventEmitter();
@@ -106,9 +110,39 @@ export class AsterEditorImpl {
106
110
  onBlur: ({ event }) => this.emit('blur', { editor: this, event }),
107
111
  });
108
112
  this.contentElement = this.tiptap.view.dom;
113
+ if (options.pageView) {
114
+ // Une mise en page hostile (en-tête importé d'un .docx) ne doit jamais laisser un
115
+ // éditeur à moitié construit : la vue page est ignorée, l'éditeur reste utilisable.
116
+ try {
117
+ this.setPageView(options.pageView);
118
+ }
119
+ catch (error) {
120
+ console.warn('[aster] vue page ignorée : mise en page invalide', error);
121
+ }
122
+ }
109
123
  // Microtâche : laisse l'appelant s'abonner à `ready` juste après `createEditor`.
110
124
  queueMicrotask(() => this.emit('ready', { editor: this }));
111
125
  }
126
+ // --- Vue page (hors contrat `AsterEditor`, proposée en session 3) -------
127
+ /**
128
+ * Active, remplace ou désactive la vue page : classe `aster--page-view` et variables
129
+ * `--aster-page-*` sur l'hôte, conteneurs d'en-tête et de pied autour du corps. `true`
130
+ * vaut `{}` (A4 portrait, marges 25,4 mm), `false` retire tout. Indépendante de la
131
+ * lecture seule. Hors contrat : à proposer dans `api/editor.ts`.
132
+ */
133
+ setPageView(options) {
134
+ this.pageView?.remove();
135
+ this.pageView = null;
136
+ if (options === false || this.destroyed) {
137
+ return;
138
+ }
139
+ const resolved = options === true ? {} : options;
140
+ this.pageView = applyPageView(this.element, this.contentElement, resolved);
141
+ }
142
+ /** Mise en page de la vue page active, `null` si elle est inactive. Hors contrat. */
143
+ getLayout() {
144
+ return this.pageView?.layout ?? null;
145
+ }
112
146
  // --- Contenu -------------------------------------------------------------
113
147
  /**
114
148
  * Mode `placeholders` (défaut) : les puces restent des `span[data-aster-variable]`,
@@ -128,13 +162,17 @@ export class AsterEditorImpl {
128
162
  * `getHTML()` à chaque `change`, et `normalizeOutputHtml` reparse tout le document
129
163
  * dès qu'il contient une table. Le document est immuable, toute transaction en
130
164
  * produit un nouveau : le cache s'invalide tout seul, sans compteur ni événement.
165
+ *
166
+ * La sérialisation n'est pas `tiptap.getHTML()` mais `serializeDocumentHtml` : les
167
+ * attributs `style` sortent tels que les extensions les écrivent (`#rrggbb`, ordre du
168
+ * contrat), pas réécrits par le moteur CSS.
131
169
  */
132
170
  placeholdersHtml() {
133
171
  const { doc } = this.tiptap.state;
134
172
  if (doc === this.cachedDoc) {
135
173
  return this.cachedHtml;
136
174
  }
137
- const html = normalizeOutputHtml(this.tiptap.getHTML());
175
+ const html = normalizeOutputHtml(serializeDocumentHtml(doc));
138
176
  this.cachedDoc = doc;
139
177
  this.cachedHtml = html;
140
178
  return html;
@@ -283,6 +321,8 @@ export class AsterEditorImpl {
283
321
  this.emit('destroy', { editor: this });
284
322
  this.destroyed = true;
285
323
  this.emitter.clear();
324
+ this.pageView?.remove();
325
+ this.pageView = null;
286
326
  this.tiptap.destroy();
287
327
  this.container.remove();
288
328
  this.cachedDoc = null;
@@ -1 +1 @@
1
- {"version":3,"file":"aster-editor.js","sourceRoot":"","sources":["../../src/editor/aster-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAiB7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEzF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAE7C,wFAAwF;AACxF,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAW,CAAC;AAEpE;;;GAGG;AACH,MAAM,qBAAqB,GACzB,OAAO,KAAK,KAAK,WAAW,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,cAAc,KAAK,UAAU,CAAC;AAEvF;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACjB,MAAM,CAAS;IACf,QAAQ,CAAkB;IAC1B,IAAI,CAAO;IACX,SAAS,CAAgB;IACzB,OAAO,CAAc;IACrB,cAAc,CAAc;IAEpB,OAAO,CAAoB;IAC3B,SAAS,CAAc;IAChC,SAAS,GAAG,KAAK,CAAC;IAC1B,+EAA+E;IACvE,SAAS,GAA2B,IAAI,CAAC;IACzC,UAAU,GAAG,EAAE,CAAC;IAExB,YAAY,OAAqB;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,MAAM,GAA4B,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,aAAa,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAgB;YAC/B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE;SAC/C,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ;YAC3B,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAC5C,WAAW;YACX,UAAU,EAAE,qBAAqB,CAAC;gBAChC,MAAM,EAAE,IAAI;gBACZ,OAAO;gBACP,UAAU;gBACV,SAAS,EAAE;oBACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,yEAAyE;oBACzE,wEAAwE;oBACxE,sEAAsE;oBACtE,QAAQ,EAAE,uBAAuB,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;oBAC3D,QAAQ;iBACT;aACF,CAAC;YACF,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACrD,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;gBACjC,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;oBACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACnE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C,iFAAiF;QACjF,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,4EAA4E;IAE5E;;;;;OAKG;IACH,OAAO,CAAC,OAAwB;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrC,OAAO,OAAO,EAAE,SAAS,KAAK,SAAS;YACrC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACK,gBAAgB;QACtB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,IAAI,GAAG,IAAI;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAkB,EAAE,IAAI,GAAG,IAAI;QACrC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;;OAUG;IACK,cAAc,CAAC,OAA+B,EAAE,IAAa;QACnE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM;aACR,KAAK,EAAE;aACP,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;aACzC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,gFAAgF;IACxE,YAAY;QAClB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,CAAC,CAAC,CACH,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QACnD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IACtE,CAAC;IAED,4EAA4E;IAE5E;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAkC;QACtC,MAAM,MAAM,GAAkB,QAAQ,IAAI,IAAI,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,qBAAqB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,KAAc;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QACD,sFAAsF;QACtF,+DAA+D;QAC/D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,UAAU;QACR,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,4EAA4E;IAE5E,uGAAuG;IACvG,EAAE,CAA2B,KAAQ,EAAE,OAAuB;QAC5D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,GAAG,CAA2B,KAAQ,EAAE,OAAuB;QAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAA2B,KAAQ,EAAE,GAAG,OAAmC;QAC7E,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACK,WAAW;QACjB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"aster-editor.js","sourceRoot":"","sources":["../../src/editor/aster-editor.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,9 @@ export interface AsterExtensionsContext {
16
16
  * citation, règle, historique, curseurs et nœud de fin. On en retire `link` pour
17
17
  * le remplacer par la version sécurisée, et on ajoute tables, alignement, images,
18
18
  * indice/exposant, surlignage, styles de texte, tâches, placeholder et compteurs.
19
+ * La mise en page (session 3) s'ajoute par-dessus : attributs de paragraphe après
20
+ * `TextAlign` (son `text-align` reste en tête du `style`), marques de run après
21
+ * `TextStyleKit`, tables et souligné remplacés par leurs versions étendues.
19
22
  * Les extensions de l'intégrateur viennent en dernier pour pouvoir surcharger.
20
23
  */
21
24
  export declare function createAsterExtensions(context: AsterExtensionsContext): AnyExtension[];
@@ -1 +1 @@
1
- {"version":3,"file":"aster-extensions.d.ts","sourceRoot":"","sources":["../../src/extensions/aster-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAUjD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAG7E,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGvF,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,EAAE,CAkCrF"}
1
+ {"version":3,"file":"aster-extensions.d.ts","sourceRoot":"","sources":["../../src/extensions/aster-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQjD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAc7E,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAIvF,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,EAAE,CA8CrF"}
@@ -1,17 +1,21 @@
1
- import { Highlight } from '@tiptap/extension-highlight';
2
1
  import { TaskItem, TaskList } from '@tiptap/extension-list';
3
2
  import { Subscript } from '@tiptap/extension-subscript';
4
3
  import { Superscript } from '@tiptap/extension-superscript';
5
- import { TableKit } from '@tiptap/extension-table';
6
4
  import { TextAlign } from '@tiptap/extension-text-align';
7
5
  import { TextStyleKit } from '@tiptap/extension-text-style';
8
6
  import { CharacterCount, Placeholder } from '@tiptap/extensions';
9
7
  import { StarterKit } from '@tiptap/starter-kit';
10
8
  import { createImageExtension } from './image';
11
9
  import { createLinkExtension } from './link-safety';
10
+ import { ListLayout } from './list-layout';
12
11
  import { Outline } from './outline';
12
+ import { ParagraphLayout } from './paragraph-layout';
13
+ import { AsterHighlight, AsterStrike, AsterTextStyle, AsterUnderline, RunLayout, } from './run-layout';
14
+ import { AsterHorizontalRule } from './page-break';
15
+ import { Pagination } from './pagination';
13
16
  import { Search } from './search';
14
17
  import { createShortcutsExtension } from './shortcuts';
18
+ import { createTableExtensions } from './table-layout';
15
19
  import { Variable } from './variable';
16
20
  /**
17
21
  * Jeu d'extensions Tiptap d'Aster.
@@ -20,6 +24,9 @@ import { Variable } from './variable';
20
24
  * citation, règle, historique, curseurs et nœud de fin. On en retire `link` pour
21
25
  * le remplacer par la version sécurisée, et on ajoute tables, alignement, images,
22
26
  * indice/exposant, surlignage, styles de texte, tâches, placeholder et compteurs.
27
+ * La mise en page (session 3) s'ajoute par-dessus : attributs de paragraphe après
28
+ * `TextAlign` (son `text-align` reste en tête du `style`), marques de run après
29
+ * `TextStyleKit`, tables et souligné remplacés par leurs versions étendues.
23
30
  * Les extensions de l'intégrateur viennent en dernier pour pouvoir surcharger.
24
31
  */
25
32
  export function createAsterExtensions(context) {
@@ -27,22 +34,32 @@ export function createAsterExtensions(context) {
27
34
  return [
28
35
  StarterKit.configure({
29
36
  link: false,
37
+ underline: false,
38
+ strike: false,
39
+ horizontalRule: false,
30
40
  heading: { levels: [1, 2, 3, 4, 5, 6] },
31
41
  dropcursor: { width: 2 },
32
42
  }),
43
+ AsterStrike,
44
+ AsterUnderline,
45
+ AsterHorizontalRule,
33
46
  createLinkExtension(context.linkPolicy),
34
47
  TaskList,
35
48
  TaskItem.configure({ nested: true }),
36
- TableKit.configure({ table: { resizable: true, cellMinWidth: 48 } }),
49
+ ...createTableExtensions(),
37
50
  // Pas de `defaultAlignment` : en v3 c'est un défaut d'attribut, donc chaque bloc
38
51
  // le porterait et sérialiserait `text-align: left` partout. On garde `null` pour
39
52
  // un HTML propre ; c'est la commande `alignLeft` qui traite « absent » comme gauche.
40
53
  TextAlign.configure({ types: ['heading', 'paragraph'] }),
54
+ ParagraphLayout,
55
+ ListLayout,
41
56
  createImageExtension(context.linkPolicy),
42
57
  Subscript,
43
58
  Superscript,
44
- Highlight.configure({ multicolor: true }),
45
- TextStyleKit,
59
+ AsterHighlight.configure({ multicolor: true }),
60
+ TextStyleKit.configure({ textStyle: false }),
61
+ AsterTextStyle,
62
+ RunLayout,
46
63
  // Lié à l'éditeur Aster : les puces lisent le magasin de valeurs et l'i18n.
47
64
  Variable.configure({ aster: editor }),
48
65
  Placeholder.configure({
@@ -53,6 +70,8 @@ export function createAsterExtensions(context) {
53
70
  Search,
54
71
  // Attribut `id` des titres (ancres, sommaire) ; aucun `id` posé sans `getOutline`.
55
72
  Outline,
73
+ // Pagination approximative de la vue page (L30) : inactive tant que la vue page l'est.
74
+ Pagination.configure({ aster: editor }),
56
75
  createShortcutsExtension(context.shortcuts),
57
76
  ...(options.extensions ?? []),
58
77
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"aster-extensions.js","sourceRoot":"","sources":["../../src/extensions/aster-extensions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAA2B,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAkC,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUtC;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACpC,OAAO;QACL,UAAU,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACvC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SACzB,CAAC;QACF,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC;QACvC,QAAQ;QACR,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC;QACpE,iFAAiF;QACjF,iFAAiF;QACjF,qFAAqF;QACrF,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;QACxD,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;QACxC,SAAS;QACT,WAAW;QACX,SAAS,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACzC,YAAY;QACZ,4EAA4E;QAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrC,WAAW,CAAC,SAAS,CAAC;YACpB,6EAA6E;YAC7E,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC;SAC9E,CAAC;QACF,cAAc;QACd,MAAM;QACN,mFAAmF;QACnF,OAAO;QACP,wBAAwB,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"aster-extensions.js","sourceRoot":"","sources":["../../src/extensions/aster-extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Assainissement du HTML des en-têtes et pieds de la vue page (session 3, L26 ; extrait de
3
+ * `page-view.ts` en F30, R30-13, API inchangée : `page-view.ts` réexporte tout). Le core
4
+ * n'avait pas de sanitiseur : celui-ci est volontairement minimal, allowlist stricte de
5
+ * balises et d'attributs, URL et `style` filtrés, profondeur plafonnée.
6
+ */
7
+ /**
8
+ * Profondeur d'imbrication conservée par l'assainissement. Au-delà, un élément est réduit
9
+ * à son texte : un fragment de 8 000 `<div>` imbriqués, possible depuis un `.docx`
10
+ * hostile, ne produit plus qu'un arbre borné.
11
+ */
12
+ export declare const MAX_SANITIZE_DEPTH = 64;
13
+ /**
14
+ * Assainit un fragment HTML d'en-tête ou de pied avant de l'injecter en `innerHTML` :
15
+ * texte et balises inline/bloc simples uniquement (`p`, titres, `span`, marques, listes,
16
+ * tables, `img`, `a`), attributs `style`, `class`, `data-*`, `href`/`src` sûrs. Jamais de
17
+ * `<script>`, `<style>`, `<iframe>`, ni d'attribut `on*`. Les balises inconnues sont
18
+ * déballées, leur texte conservé, et l'imbrication est plafonnée à `MAX_SANITIZE_DEPTH`.
19
+ * Le core n'avait pas de sanitiseur : celui-ci est volontairement minimal, allowlist stricte.
20
+ */
21
+ export declare function sanitizeHeaderFooterHtml(html: string): string;
22
+ //# sourceMappingURL=header-footer-sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-footer-sanitize.d.ts","sourceRoot":"","sources":["../../src/extensions/header-footer-sanitize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+IH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AA+ErC;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7D"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Assainissement du HTML des en-têtes et pieds de la vue page (session 3, L26 ; extrait de
3
+ * `page-view.ts` en F30, R30-13, API inchangée : `page-view.ts` réexporte tout). Le core
4
+ * n'avait pas de sanitiseur : celui-ci est volontairement minimal, allowlist stricte de
5
+ * balises et d'attributs, URL et `style` filtrés, profondeur plafonnée.
6
+ */
7
+ /** Balises conservées par l'assainissement des en-têtes et pieds. */
8
+ const ALLOWED_TAGS = new Set([
9
+ 'p',
10
+ 'h1',
11
+ 'h2',
12
+ 'h3',
13
+ 'h4',
14
+ 'h5',
15
+ 'h6',
16
+ 'div',
17
+ 'span',
18
+ 'strong',
19
+ 'b',
20
+ 'em',
21
+ 'i',
22
+ 'u',
23
+ 's',
24
+ 'sub',
25
+ 'sup',
26
+ 'code',
27
+ 'br',
28
+ 'a',
29
+ 'img',
30
+ 'ul',
31
+ 'ol',
32
+ 'li',
33
+ 'table',
34
+ 'thead',
35
+ 'tbody',
36
+ 'tr',
37
+ 'td',
38
+ 'th',
39
+ 'hr',
40
+ ]);
41
+ /** Balises supprimées avec leur contenu (tout le reste est « déballé »). */
42
+ const DROPPED_TAGS = new Set([
43
+ 'script',
44
+ 'style',
45
+ 'iframe',
46
+ 'object',
47
+ 'embed',
48
+ 'template',
49
+ 'noscript',
50
+ 'svg',
51
+ 'math',
52
+ 'form',
53
+ 'input',
54
+ 'button',
55
+ 'textarea',
56
+ 'select',
57
+ 'link',
58
+ 'meta',
59
+ 'base',
60
+ ]);
61
+ /** Attributs conservés (plus tout `data-*`). */
62
+ const ALLOWED_ATTRIBUTES = new Set([
63
+ 'style',
64
+ 'class',
65
+ 'href',
66
+ 'src',
67
+ 'alt',
68
+ 'title',
69
+ 'width',
70
+ 'height',
71
+ 'colspan',
72
+ 'rowspan',
73
+ 'type',
74
+ 'start',
75
+ 'target',
76
+ 'rel',
77
+ ]);
78
+ /** Schémas d'URL acceptés dans `href` / `src` (plus `data:image/` pour `src` seulement). */
79
+ const ALLOWED_URL_SCHEMES = new Set(['http', 'https', 'mailto', 'tel']);
80
+ /** Caractères de contrôle et blancs ASCII (U+0000 à U+0020), ignorés par les parseurs d'URL. */
81
+ // eslint-disable-next-line no-control-regex -- c'est précisément la plage à retirer.
82
+ const URL_NOISE_PATTERN = /[\u0000- ]/g;
83
+ /**
84
+ * Vrai si une URL d'attribut `href`/`src` est acceptable : ancre, chemin relatif, ou schéma
85
+ * de l'allowlist. Les parseurs d'URL ignorent les caractères de contrôle et les blancs
86
+ * ASCII (`java\tscript:` est lu `javascript:`), pas une regex : ils sont retirés **avant**
87
+ * le test, comme le fait DOMPurify (R23-01). Un `\` vaut `/` pour les schémas spéciaux
88
+ * (`\\evil` → `//evil`) et les URL relatives au protocole (`//evil`) sont refusées.
89
+ */
90
+ function isSafeUrl(name, value) {
91
+ const stripped = value.replace(URL_NOISE_PATTERN, '').replace(/\\/g, '/').toLowerCase();
92
+ if (stripped === '' || stripped.startsWith('#')) {
93
+ return true;
94
+ }
95
+ if (stripped.startsWith('//')) {
96
+ return false;
97
+ }
98
+ if (stripped.startsWith('/')) {
99
+ return true;
100
+ }
101
+ const scheme = /^([a-z][a-z0-9+.-]*):/.exec(stripped)?.[1];
102
+ if (scheme === undefined) {
103
+ return true;
104
+ }
105
+ if (ALLOWED_URL_SCHEMES.has(scheme)) {
106
+ return true;
107
+ }
108
+ return name === 'src' && stripped.startsWith('data:image/');
109
+ }
110
+ /**
111
+ * Vrai si une valeur de `style` ne charge ni n'exécute rien. Le CSS décode les échappements
112
+ * (`\75rl(` est lu `url(`, CSS Syntax L3 §4.3.7) et ignore les commentaires : tout `\` est
113
+ * refusé (Word n'en produit jamais) et les commentaires sont retirés avant de chercher les
114
+ * fonctions qui chargent une ressource (`url(`, `image-set(`, `image(`, `src(`, `element(`)
115
+ * ou exécutent du code (`expression(`, `-moz-binding`, `behavior`) (R23-08).
116
+ */
117
+ function isSafeStyle(value) {
118
+ if (value.includes('\\')) {
119
+ return false;
120
+ }
121
+ const stripped = value.replace(/\/\*[\s\S]*?\*\//g, '');
122
+ return !/(?:url|image-set|image|src|element|expression)\s*\(|javascript:|-moz-binding|behavior\s*:/i.test(stripped);
123
+ }
124
+ /** Filtre les attributs d'un élément en place : allowlist, jamais `on*`, URL et style sûrs. */
125
+ function sanitizeAttributes(element) {
126
+ for (const attribute of [...element.attributes]) {
127
+ const name = attribute.name.toLowerCase();
128
+ const allowed = (ALLOWED_ATTRIBUTES.has(name) || name.startsWith('data-')) &&
129
+ !name.startsWith('on') &&
130
+ (name !== 'href' && name !== 'src' ? true : isSafeUrl(name, attribute.value)) &&
131
+ (name !== 'style' || isSafeStyle(attribute.value));
132
+ if (!allowed) {
133
+ element.removeAttribute(attribute.name);
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Profondeur d'imbrication conservée par l'assainissement. Au-delà, un élément est réduit
139
+ * à son texte : un fragment de 8 000 `<div>` imbriqués, possible depuis un `.docx`
140
+ * hostile, ne produit plus qu'un arbre borné.
141
+ */
142
+ export const MAX_SANITIZE_DEPTH = 64;
143
+ /** Sélecteur des balises supprimées avec leur contenu. */
144
+ const DROPPED_SELECTOR = [...DROPPED_TAGS].join(',');
145
+ /**
146
+ * Remplace un élément trop profond par son seul texte, balises interdites retirées
147
+ * d'abord (leur contenu ne doit pas réapparaître en texte). Une seule passe sur le
148
+ * sous-arbre, quelle que soit sa taille : le déballer niveau par niveau déplacerait le
149
+ * sous-arbre à chaque niveau, ce qui est quadratique dans le DOM.
150
+ */
151
+ function flattenToText(element) {
152
+ for (const dropped of element.querySelectorAll(DROPPED_SELECTOR)) {
153
+ dropped.remove();
154
+ }
155
+ const text = element.textContent;
156
+ if (text === '') {
157
+ element.remove();
158
+ }
159
+ else {
160
+ element.replaceWith(document.createTextNode(text));
161
+ }
162
+ }
163
+ /**
164
+ * Parcourt les enfants d'un parent : commentaire et balise interdite supprimés, élément
165
+ * trop profond réduit à son texte, balise inconnue déballée (ses enfants remontent et sont
166
+ * examinés à leur tour), balise connue assainie puis empilée. Pile explicite plutôt que
167
+ * récursion : la version récursive faisait déborder la pile d'appels sur un HTML
168
+ * profondément imbriqué (R23-03). Le déballage ne se produit qu'au-dessus du plafond, le
169
+ * coût total reste borné par `MAX_SANITIZE_DEPTH` fois la taille du fragment.
170
+ */
171
+ function sanitizeTree(root) {
172
+ const stack = [{ parent: root, depth: 0 }];
173
+ for (let frame = stack.pop(); frame !== undefined; frame = stack.pop()) {
174
+ const { parent, depth } = frame;
175
+ let child = parent.firstChild;
176
+ while (child !== null) {
177
+ const following = child.nextSibling;
178
+ if (child.nodeType === Node.COMMENT_NODE) {
179
+ child.remove();
180
+ child = following;
181
+ continue;
182
+ }
183
+ if (child.nodeType !== Node.ELEMENT_NODE) {
184
+ child = following;
185
+ continue;
186
+ }
187
+ const element = child;
188
+ const tag = element.tagName.toLowerCase();
189
+ if (DROPPED_TAGS.has(tag)) {
190
+ element.remove();
191
+ child = following;
192
+ continue;
193
+ }
194
+ if (depth >= MAX_SANITIZE_DEPTH) {
195
+ flattenToText(element);
196
+ child = following;
197
+ continue;
198
+ }
199
+ if (!ALLOWED_TAGS.has(tag)) {
200
+ // Déballé en place : ses enfants prennent sa position et sont examinés ensuite.
201
+ const first = element.firstChild;
202
+ element.replaceWith(...element.childNodes);
203
+ child = first ?? following;
204
+ continue;
205
+ }
206
+ sanitizeAttributes(element);
207
+ stack.push({ parent: element, depth: depth + 1 });
208
+ child = following;
209
+ }
210
+ }
211
+ }
212
+ /**
213
+ * Assainit un fragment HTML d'en-tête ou de pied avant de l'injecter en `innerHTML` :
214
+ * texte et balises inline/bloc simples uniquement (`p`, titres, `span`, marques, listes,
215
+ * tables, `img`, `a`), attributs `style`, `class`, `data-*`, `href`/`src` sûrs. Jamais de
216
+ * `<script>`, `<style>`, `<iframe>`, ni d'attribut `on*`. Les balises inconnues sont
217
+ * déballées, leur texte conservé, et l'imbrication est plafonnée à `MAX_SANITIZE_DEPTH`.
218
+ * Le core n'avait pas de sanitiseur : celui-ci est volontairement minimal, allowlist stricte.
219
+ */
220
+ export function sanitizeHeaderFooterHtml(html) {
221
+ const template = document.createElement('template');
222
+ template.innerHTML = html;
223
+ sanitizeTree(template.content);
224
+ return template.innerHTML;
225
+ }
226
+ //# sourceMappingURL=header-footer-sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-footer-sanitize.js","sourceRoot":"","sources":["../../src/extensions/header-footer-sanitize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { BlockBorder, BorderSide, BorderStyle } from '../api';
2
+ /**
3
+ * Helpers de sérialisation CSS partagés par les extensions de mise en page (paragraphe,
4
+ * run, tableau). Le contrat (`api/layout.ts`) fige la forme des valeurs : points avec au
5
+ * plus deux décimales, couleurs en `#rrggbb` minuscules, bordures `1pt solid #000000`.
6
+ * Tout passe par ici pour que `setHTML(getHTML())` relise exactement ce qu'il a écrit.
7
+ */
8
+ /** Côtés de bordure portés par un `style` inline, dans l'ordre de sérialisation. */
9
+ export declare const CSS_BORDER_SIDES: readonly ["top", "right", "bottom", "left"];
10
+ export type CssBorderSide = (typeof CSS_BORDER_SIDES)[number];
11
+ /**
12
+ * Borne absolue des nombres de mise en page (points, multiples d'interligne) : ±100 000.
13
+ * Word plafonne bien plus bas (retraits ≤ 1 584 pt, espacements ≤ 1 584 pt), une valeur
14
+ * au-delà vient d'une erreur ou d'une attaque ; surtout, `value * 100` déborde vers
15
+ * `Infinity` dès 1e307 et finirait sérialisé en `Infinitypt` que personne ne relit.
16
+ */
17
+ export declare const LAYOUT_NUMBER_LIMIT = 100000;
18
+ /**
19
+ * Arrondit à deux décimales au plus, sans zéro superflu (`6` → `6`, `6.5` → `6.5`), en
20
+ * bornant d'abord à ±`LAYOUT_NUMBER_LIMIT` : jamais `Infinity` en sortie. Un `NaN` ressort
21
+ * `NaN` — c'est aux appelants de garder `isLayoutNumber` en amont.
22
+ */
23
+ export declare function roundLayoutNumber(value: number): number;
24
+ /** Formate une longueur en points : `6pt`, `6.5pt`, jamais plus de deux décimales. */
25
+ export declare function formatPt(value: number): string;
26
+ /** Formate un nombre sans unité (interligne multiple) avec au plus deux décimales. */
27
+ export declare function formatNumber(value: number): string;
28
+ /** Vrai pour un nombre fini, seule valeur acceptée dans les attributs numériques. */
29
+ export declare function isFiniteNumber(value: unknown): value is number;
30
+ /**
31
+ * Vrai pour un nombre de mise en page acceptable : fini et dans ±`LAYOUT_NUMBER_LIMIT`.
32
+ * C'est la garde à poser avant tout `roundLayoutNumber` / `formatPt` sur une valeur qui
33
+ * vient de l'extérieur (arguments de commande, attributs posés par `setJSON`, HTML).
34
+ */
35
+ export declare function isLayoutNumber(value: unknown): value is number;
36
+ /**
37
+ * Lit une longueur CSS en points. Accepte `pt`, `px` (converti), `0` sans unité ; refuse
38
+ * tout le reste (`em`, `%`, `auto`) : on ne sait pas les convertir sans contexte. Une
39
+ * longueur hors de ±`LAYOUT_NUMBER_LIMIT` est refusée comme une valeur illisible.
40
+ */
41
+ export declare function parsePt(value: string | null | undefined): number | null;
42
+ /**
43
+ * Découpe un attribut `style` en déclarations ordonnées, propriété en minuscules. Une
44
+ * propriété répétée garde sa dernière valeur. Les `;` dans une valeur ne sont pas gérés
45
+ * (jamais produits par le core, hors `url()`, que la mise en page n'utilise pas).
46
+ */
47
+ export declare function parseStyleDeclarations(style: string | null | undefined): Map<string, string>;
48
+ /** Lit une propriété du `style` inline d'un élément, `null` si absente. */
49
+ export declare function readStyleProperty(element: HTMLElement, property: string): string | null;
50
+ /**
51
+ * Normalise une couleur CSS en `#rrggbb` minuscules : `#RGB`, `#RRGGBB`, `rgb()` et
52
+ * `rgba()` (alpha ignoré). Un mot-clé connu (`red`, `transparent`) est gardé tel quel en
53
+ * minuscules ; une valeur vide, `none` ou un mot inconnu donne `null`.
54
+ */
55
+ export declare function normalizeColor(value: string | null | undefined): string | null;
56
+ /** Vrai si la valeur est un style de bordure du contrat. */
57
+ export declare function isBorderStyle(value: unknown): value is BorderStyle;
58
+ /** Vrai si la valeur est un côté de bordure du contrat (`between` compris). */
59
+ export declare function isBorderSide(value: unknown): value is BorderSide;
60
+ /** Vrai si l'objet est une `BlockBorder` complète et valide. */
61
+ export declare function isBlockBorder(value: unknown): value is BlockBorder;
62
+ /** Ne garde que les bordures valides d'une valeur d'attribut, `null` s'il n'en reste aucune. */
63
+ export declare function sanitizeBorders(value: unknown): BlockBorder[] | null;
64
+ /** Valeur CSS d'une bordure : `1pt solid #000000`. */
65
+ export declare function formatBorderValue(border: BlockBorder): string;
66
+ /**
67
+ * Lit une valeur de bordure CSS (`1pt solid #000000`, `solid 1px red`, ordre libre).
68
+ * `none` ou `hidden` donnent `null`. Épaisseur par défaut 1pt, style `solid`, couleur noire,
69
+ * pour accepter un `border-bottom: solid` minimaliste.
70
+ */
71
+ export declare function parseBorderValue(side: BorderSide, value: string | null | undefined): BlockBorder | null;
72
+ /**
73
+ * Lit les bordures d'un élément depuis son `style` : `border` (raccourci, quatre côtés)
74
+ * puis `border-<côté>` qui l'emporte côté par côté. Ordre de sortie : top, right, bottom,
75
+ * left. `null` sans bordure.
76
+ */
77
+ export declare function parseSideBorders(declarations: Map<string, string>): BlockBorder[];
78
+ /**
79
+ * Déclarations `border-<côté>` d'une liste de bordures, dans l'ordre top, right, bottom,
80
+ * left ; la dernière bordure d'un même côté l'emporte. `between` est ignoré ici (il n'a
81
+ * pas d'équivalent CSS, le paragraphe le porte en `data-border-between`).
82
+ */
83
+ export declare function borderDeclarations(borders: readonly BlockBorder[]): string[];
84
+ /** Bordure `between` d'une liste, la dernière s'il y en a plusieurs, sinon `null`. */
85
+ export declare function betweenBorder(borders: readonly BlockBorder[]): BlockBorder | null;
86
+ /** Assemble des déclarations en un attribut `style` (`a: 1; b: 2`), `null` si aucune. */
87
+ export declare function joinDeclarations(declarations: readonly string[]): string | null;
88
+ //# sourceMappingURL=layout-css.d.ts.map