@sametalmdr/word-editor 0.2.0-alpha → 0.3.0-alpha

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 (82) hide show
  1. package/CHANGELOG.md +108 -70
  2. package/LICENSE +21 -21
  3. package/README.md +286 -247
  4. package/dist/canvas/box-clipboard.js +238 -238
  5. package/dist/canvas/box-selection.js +80 -80
  6. package/dist/canvas/canvas-editor.js +502 -502
  7. package/dist/canvas/controller.js +717 -717
  8. package/dist/canvas/geometry.js +131 -131
  9. package/dist/canvas/gesture.d.ts +0 -1
  10. package/dist/canvas/gesture.js +289 -289
  11. package/dist/canvas/handles.js +212 -212
  12. package/dist/canvas/menu.js +82 -82
  13. package/dist/canvas/mode-controller.js +81 -81
  14. package/dist/canvas/nudge.js +108 -108
  15. package/dist/canvas/overlay.js +149 -149
  16. package/dist/canvas/snap.js +132 -132
  17. package/dist/canvas/viewport.js +112 -112
  18. package/dist/canvas/z-order.js +171 -171
  19. package/dist/commands/alignment.js +150 -150
  20. package/dist/commands/box.js +272 -272
  21. package/dist/commands/clipboard.js +93 -93
  22. package/dist/commands/graphemes.js +112 -112
  23. package/dist/commands/marks.js +153 -153
  24. package/dist/commands/paragraph-props.js +176 -176
  25. package/dist/commands/size.js +368 -368
  26. package/dist/commands/text.js +291 -291
  27. package/dist/docx.d.ts +1 -0
  28. package/dist/docx.js +15 -13
  29. package/dist/editor/editing-host.js +434 -434
  30. package/dist/element.js +41 -41
  31. package/dist/fonts/OFL-Carlito.txt +94 -0
  32. package/dist/fonts/calibri-metrics.d.ts +27 -0
  33. package/dist/fonts/calibri-metrics.js +88 -0
  34. package/dist/history/history.js +433 -433
  35. package/dist/index.js +63 -63
  36. package/dist/input/beforeinput.js +224 -224
  37. package/dist/input/clipboard.js +107 -107
  38. package/dist/input/composition.js +341 -341
  39. package/dist/input/keymap.js +54 -54
  40. package/dist/io/ooxml/custgeom.js +72 -72
  41. package/dist/io/ooxml/drawingml.js +232 -232
  42. package/dist/io/ooxml/edits.js +67 -67
  43. package/dist/io/ooxml/export-splice.js +880 -880
  44. package/dist/io/ooxml/export.js +365 -365
  45. package/dist/io/ooxml/fill.d.ts +93 -8
  46. package/dist/io/ooxml/fill.js +618 -562
  47. package/dist/io/ooxml/fit.d.ts +252 -0
  48. package/dist/io/ooxml/fit.js +598 -0
  49. package/dist/io/ooxml/import-gate.js +200 -200
  50. package/dist/io/ooxml/import.js +691 -691
  51. package/dist/io/ooxml/inflate.js +126 -126
  52. package/dist/io/ooxml/media.js +87 -87
  53. package/dist/io/ooxml/ns.d.ts +2 -0
  54. package/dist/io/ooxml/ns.js +26 -21
  55. package/dist/io/ooxml/numbering.js +290 -290
  56. package/dist/io/ooxml/opc-write.js +171 -171
  57. package/dist/io/ooxml/provenance.js +93 -93
  58. package/dist/io/ooxml/recipe.js +708 -708
  59. package/dist/io/ooxml/relationships.js +59 -59
  60. package/dist/io/ooxml/run-fonts.d.ts +89 -0
  61. package/dist/io/ooxml/run-fonts.js +378 -0
  62. package/dist/io/ooxml/slots.d.ts +4 -0
  63. package/dist/io/ooxml/slots.js +582 -581
  64. package/dist/io/ooxml/styles-resolve.js +257 -257
  65. package/dist/io/ooxml/units.js +43 -43
  66. package/dist/io/ooxml/value.js +120 -120
  67. package/dist/io/ooxml/xml-scan.js +616 -616
  68. package/dist/io/ooxml/zip-container.js +228 -228
  69. package/dist/io/ooxml/zip-reject.js +106 -106
  70. package/dist/measure/placement.js +83 -83
  71. package/dist/measure/report.js +75 -75
  72. package/dist/model/ids.js +70 -70
  73. package/dist/model/normalize.js +146 -146
  74. package/dist/model/position.js +283 -283
  75. package/dist/model/transaction.js +209 -209
  76. package/dist/platform/capabilities.js +25 -25
  77. package/dist/react/index.js +21 -21
  78. package/dist/selection/controller.js +315 -315
  79. package/dist/selection/dom-map.js +334 -334
  80. package/dist/state/editor-state.js +109 -109
  81. package/dist/styles.css +66 -66
  82. package/package.json +94 -93
package/CHANGELOG.md CHANGED
@@ -1,70 +1,108 @@
1
- # Değişiklik günlüğü
2
-
3
- ## 0.2.0-alpha — 2026-10-26 (yayını sahip yapar)
4
-
5
- ### Eklenenler
6
-
7
- - **Çok satırlı değer** ([ADR-0039](./docs/adr/0039-multi-line-values.md)) —
8
- `fillTemplate(bytes, data, {expectedTags?, multiline?})` ve
9
- `validateTemplate(bytes, {expectedTags, multiline?})`. `multiline`'ın adlandırdığı etikette LF bir
10
- satır sonudur: satırlar etiketin kendi run'ında, aralarında `w:br`; run'ın biçimi her satırda.
11
- Okuma-geri `w:t` + `w:br` dizisini karşılaştırır. Şablonda olmayan ad `UNKNOWN_MULTILINE_TAG`.
12
- Word'de (masaüstü 16) KR09'un iki uzun kutusunda ölçüldü: Calibri 8,5 pt'de 3 ve 2 satır sığıyor,
13
- fazlası kırpılıyor.
14
-
15
- ### Değişenler
16
-
17
- - Satır sonu kuralı: tek satırlı etikette LF de, her etikette CR, CRLF, U+2028 ve U+2029 eskisi gibi
18
- `VALUE_LINE_BREAK`. Motor değeri normalleştirmez.
19
-
20
- ### Bilinen sınırlar
21
-
22
- - `importDocx` `w:br`'yi okumuyor: çok satırlı bir değer editörde tek satıra birleşir; düzenlenip
23
- export edilirse satır sonları kaybolur (FR4).
24
- - Kutuya sığmayan değer Word'de sessizce kırpılır; sığma denetimi bugün çağıranın işi (FR4).
25
-
26
- Paketin dışında (repo içi, `files`'a girmez): şablon tarifleri, bağlama manifesti ve alan kaydı v0
27
- (`templates/`, ADR-0040/0041) — PeriKont'un KR09 şablonu bunlarla üretilir. Şablonun kendisi
28
- `templates/kr09/KR09-template.docx`'te commit'li.
29
-
30
- ## 0.1.0-alpha — 2026-10-17 (yayını sahip yapar)
31
-
32
- İlk açık alfa. Editörün kendi yüzeyi (`.`, `./element`, `./react`) değişmedi ve 1.0
33
- öncesi.
34
-
35
- ### Eklenenler
36
-
37
- - **`/docx` alt yolu** — DOM'suz; Node'da ve Deno'da (ör. Supabase Edge Functions) sınandı,
38
- tarayıcı için de yazıldı (Chrome 152'de yalnız incelendi). Hiçbir ağ isteği atmaz.
39
- - `fillTemplate(bytes, data, {expectedTags?})` — bir `.docx` şablonunun `{etiket}`lerini
40
- doldurur. `{bytes, documentXml, report}` döndürür.
41
- - `inspectTemplate(bytes)` — şablondaki etiketler (kutunun `wp:docPr` kimliği ve sayfasıyla),
42
- doldurmayı durduracak sorunlar ve uyarılar. Şablon sorununda atmaz.
43
- - `validateTemplate(bytes, {expectedTags})` — bağlama listesini tam küme olarak denetler.
44
- - `TemplateError` — `problems` dizisi; her sorunun `code`'u sözleşmedir.
45
- - `ENGINE_VERSION`.
46
- - `importDocx`, `exportDocx` — editörün kendi IO'su; şekilleri alfa boyunca kararsız.
47
-
48
- ### Doldurma kuralları (ADR-0037, ADR-0038)
49
-
50
- - Etiket bir `w:t`'nin metninin tamamıdır: `{firma_adi}`, ad `[a-z][a-z0-9_]*`.
51
- - Etiketler yalnız metin kutularında (`mc:AlternateContent`). Kutunun iki kopyası
52
- (`mc:Choice` ve `mc:Fallback`) birlikte yazılır; önceden yapısal olarak eşit değillerse
53
- reddedilir, sonra eşitlikleri yeniden denetlenir.
54
- - Eksik anahtar doldurmayı durdurur; eksiklerin hepsi tek hatada raporlanır. `null`, `""` ve
55
- yalnız boşluktan oluşan değer **boştur**: serbesttir, `report.empty`'de listelenir.
56
- - Değer string olmalı. Satır sonu, sekme ve XML'in kabul etmediği karakterler reddedilir.
57
- - Rapor, sorunlar ve hata mesajları hiçbir değeri taşımaz.
58
- - Yalnız `word/document.xml` yeniden yazılır; başka her parçanın baytları aynen kopyalanır.
59
-
60
- ### Bilinen sınırlar
61
-
62
- - Yalnız ana belge doldurulur. Üst/alt bilgi, dipnot, son not, yorum, grafik ya da
63
- `docProps` metnindeki bir parantez hata verir.
64
- - Döngü (`{#…}`), koşul, görsel (`{%…}`), bölünmüş etiket, gövde paragrafındaki etiket yok.
65
- - Çok satırlı değer yok (satır sonu reddedilir); politika FR3'te.
66
- - Sıkıştırılmış `.docx` baytları çalışma ortamına göre değişir; ortamlar arasında
67
- karşılaştırmayı `documentXml`'in özetiyle yapın.
68
- - Gereken platform API'leri: `TextEncoder`/`TextDecoder` ve
69
- `CompressionStream`/`DecompressionStream("deflate-raw")` — Node 20.12+ ya da 21.2+, Deno,
70
- güncel tarayıcılar. Sınanan: Node 24.13.1, Deno 2.1.4.
1
+ # Değişiklik günlüğü
2
+
3
+ ## 0.3.0-alpha — 2026-10-26 (yayını sahip yapar)
4
+
5
+ ### Eklenenler
6
+
7
+ - **`checkFit(bytes, data, {expectedTags?, multiline?, capacity?})`** — `/docx`'ten
8
+ ([ADR-0042](./docs/adr/0042-dom-free-fit-check.md)).
9
+ - **Ne yapar:** doldurmadan önce her değerin satırını şablonun kendi kutusuyla karşılaştırır. Tarayıcı
10
+ gerekmez.
11
+ - **Durumlar:** `fits`, `overflows`, `unknown` ya da `empty`; en dar satırın genişliği, yeri ve payı (pt).
12
+ `unknown`'ın nedeni kapalı bir listeden gelir.
13
+ - **Doğrulama:** `fillTemplate`'in reddettiğini aynı `TemplateError` ile reddeder; hiçbir şey yazmaz.
14
+ Rapor değer taşımaz.
15
+ - **Çok satırlı değer** `capacity` ister. Bağlama manifesti onu `fit` bloğunda taşır:
16
+ `checkFit(b, d, {...m.options, ...m.fit})`.
17
+ - **Word'e karşı:** masaüstü 16'da ön kayıtlı kapıyla sınandı (FR4-WORD-FIT2). 210 satırın hepsi
18
+ `checkFit`'in dediği gibi dizildi: KR09'un bütün kutuları bandın iki yanında, ayrıca 14 kalibrasyon dalı.
19
+ - **Calibri genişlik tablosu** — `dist/fonts/calibri-metrics.js`.
20
+ - Carlito 1.104'ten (SIL OFL-1.1, ayrılmış ad "Carlito"); lisans metni yanında
21
+ (`dist/fonts/OFL-Carlito.txt`).
22
+ - Yalnız Calibri 6.23 ile eşit olduğu 344 kod noktası, dört kesim. Tabloda olmayan karakter `unknown`
23
+ (örneğin ₺).
24
+
25
+ ### Değişenler
26
+
27
+ - Bağlama manifesti (repo içi, `templates/`) `fit: {capacity}` kazandı. `fillTemplate` ve `validateTemplate`
28
+ `capacity`'yi bilinmeyen seçenek saymayı sürdürür.
29
+
30
+ ### Bilinen sınırlar
31
+
32
+ - **Yalnız Calibri** (tablo) ve yalnız sınanan kutu ve paragraf biçimleri ölçülür; geri kalanı `unknown`.
33
+ Başka Calibri yapıları (Mac, Word web) ve `compatibilityMode` 15 doğrulanmadı (ADR-0042 DOĞRULANMALI).
34
+ - **Çok satırlı değerde** taşan bir satırın kaç satır alacağını tarayıcı söyler (FR4b). Kapasitenin
35
+ sığabileceği durumda sonuç `unknown(WRAPS)`.
36
+ - **Word'de sınanmayan dallar `unknown`:** sondaki boşlukların belirlediği satır (`TRAILING_SPACE`, U+0020
37
+ dahil), iç boşluklu kutuda ya da sola dayalı olmayan satırda sekme (`TAB_INSET`, `TAB_ALIGNMENT`), şablonda
38
+ olmayan paragraf stili (`STYLE_MISSING`), `xml:space` korunmayan kenar boşluğu (`WHITESPACE_UNPRESERVED`).
39
+ KR09'un örneklerinde hiçbiri yok (0 `unknown`).
40
+
41
+ ## 0.2.0-alpha — 2026-10-26 (yayınlandı)
42
+
43
+ ### Eklenenler
44
+
45
+ - **Çok satırlı değer** ([ADR-0039](./docs/adr/0039-multi-line-values.md)) —
46
+ `fillTemplate(bytes, data, {expectedTags?, multiline?})` ve
47
+ `validateTemplate(bytes, {expectedTags, multiline?})`. `multiline`'ın adlandırdığı etikette LF bir
48
+ satır sonudur: satırlar etiketin kendi run'ında, aralarında `w:br`; run'ın biçimi her satırda.
49
+ Okuma-geri `w:t` + `w:br` dizisini karşılaştırır. Şablonda olmayan ad `UNKNOWN_MULTILINE_TAG`.
50
+ Word'de (masaüstü 16) KR09'un iki uzun kutusunda ölçüldü: Calibri 8,5 pt'de 3 ve 2 satır sığıyor,
51
+ fazlası kırpılıyor.
52
+
53
+ ### Değişenler
54
+
55
+ - Satır sonu kuralı: tek satırlı etikette LF de, her etikette CR, CRLF, U+2028 ve U+2029 eskisi gibi
56
+ `VALUE_LINE_BREAK`. Motor değeri normalleştirmez.
57
+
58
+ ### Bilinen sınırlar
59
+
60
+ - `importDocx` `w:br`'yi okumuyor: çok satırlı bir değer editörde tek satıra birleşir; düzenlenip
61
+ export edilirse satır sonları kaybolur (FR4).
62
+ - Kutuya sığmayan değer Word'de sessizce kırpılır; sığma denetimi bugün çağıranın işi (FR4).
63
+
64
+ Paketin dışında (repo içi, `files`'a girmez): şablon tarifleri, bağlama manifesti ve alan kaydı v0
65
+ (`templates/`, ADR-0040/0041) — PeriKont'un KR09 şablonu bunlarla üretilir. Şablonun kendisi
66
+ `templates/kr09/KR09-template.docx`'te commit'li.
67
+
68
+ ## 0.1.0-alpha — 2026-10-17 (yayını sahip yapar)
69
+
70
+ İlk açık alfa. Editörün kendi yüzeyi (`.`, `./element`, `./react`) değişmedi ve 1.0
71
+ öncesi.
72
+
73
+ ### Eklenenler
74
+
75
+ - **`/docx` alt yolu** — DOM'suz; Node'da ve Deno'da (ör. Supabase Edge Functions) sınandı,
76
+ tarayıcı için de yazıldı (Chrome 152'de yalnız incelendi). Hiçbir ağ isteği atmaz.
77
+ - `fillTemplate(bytes, data, {expectedTags?})` — bir `.docx` şablonunun `{etiket}`lerini
78
+ doldurur. `{bytes, documentXml, report}` döndürür.
79
+ - `inspectTemplate(bytes)` — şablondaki etiketler (kutunun `wp:docPr` kimliği ve sayfasıyla),
80
+ doldurmayı durduracak sorunlar ve uyarılar. Şablon sorununda atmaz.
81
+ - `validateTemplate(bytes, {expectedTags})` — bağlama listesini tam küme olarak denetler.
82
+ - `TemplateError` — `problems` dizisi; her sorunun `code`'u sözleşmedir.
83
+ - `ENGINE_VERSION`.
84
+ - `importDocx`, `exportDocx` — editörün kendi IO'su; şekilleri alfa boyunca kararsız.
85
+
86
+ ### Doldurma kuralları (ADR-0037, ADR-0038)
87
+
88
+ - Etiket bir `w:t`'nin metninin tamamıdır: `{firma_adi}`, ad `[a-z][a-z0-9_]*`.
89
+ - Etiketler yalnız metin kutularında (`mc:AlternateContent`). Kutunun iki kopyası
90
+ (`mc:Choice` ve `mc:Fallback`) birlikte yazılır; önceden yapısal olarak eşit değillerse
91
+ reddedilir, sonra eşitlikleri yeniden denetlenir.
92
+ - Eksik anahtar doldurmayı durdurur; eksiklerin hepsi tek hatada raporlanır. `null`, `""` ve
93
+ yalnız boşluktan oluşan değer **boştur**: serbesttir, `report.empty`'de listelenir.
94
+ - Değer string olmalı. Satır sonu, sekme ve XML'in kabul etmediği karakterler reddedilir.
95
+ - Rapor, sorunlar ve hata mesajları hiçbir değeri taşımaz.
96
+ - Yalnız `word/document.xml` yeniden yazılır; başka her parçanın baytları aynen kopyalanır.
97
+
98
+ ### Bilinen sınırlar
99
+
100
+ - Yalnız ana belge doldurulur. Üst/alt bilgi, dipnot, son not, yorum, grafik ya da
101
+ `docProps` metnindeki bir parantez hata verir.
102
+ - Döngü (`{#…}`), koşul, görsel (`{%…}`), bölünmüş etiket, gövde paragrafındaki etiket yok.
103
+ - Çok satırlı değer yok (satır sonu reddedilir); politika FR3'te.
104
+ - Sıkıştırılmış `.docx` baytları çalışma ortamına göre değişir; ortamlar arasında
105
+ karşılaştırmayı `documentXml`'in özetiyle yapın.
106
+ - Gereken platform API'leri: `TextEncoder`/`TextDecoder` ve
107
+ `CompressionStream`/`DecompressionStream("deflate-raw")` — Node 20.12+ ya da 21.2+, Deno,
108
+ güncel tarayıcılar. Sınanan: Node 24.13.1, Deno 2.1.4.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Samet Alemdaroğlu
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Samet Alemdaroğlu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.