@atom-forge/brickee 0.0.1 → 0.0.3
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/CHANGELOG.md +59 -1
- package/README-AI.md +34 -28
- package/dist/Editor.svelte +713 -867
- package/dist/Editor.svelte.d.ts +0 -3
- package/dist/LinkPrompt.svelte +1 -14
- package/dist/Preview.svelte +27 -58
- package/dist/Preview.svelte.d.ts +2 -7
- package/dist/PropsBar.svelte +75 -249
- package/dist/PropsBar.svelte.d.ts +0 -3
- package/dist/code.d.ts +12 -0
- package/dist/code.js +15 -0
- package/dist/dom.d.ts +8 -0
- package/dist/dom.js +9 -0
- package/dist/editor/BlockMenu.svelte +102 -0
- package/dist/editor/BlockMenu.svelte.d.ts +32 -0
- package/dist/editor/FormatBar.svelte +41 -0
- package/dist/editor/FormatBar.svelte.d.ts +16 -0
- package/dist/editor/drag.svelte.d.ts +63 -0
- package/dist/editor/drag.svelte.js +95 -0
- package/dist/editor/history.d.ts +24 -0
- package/dist/editor/history.js +86 -0
- package/dist/editor/sweep.svelte.d.ts +21 -0
- package/dist/editor/sweep.svelte.js +56 -0
- package/dist/html.d.ts +12 -0
- package/dist/html.js +206 -0
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +4 -3
- package/dist/kit/Empty.svelte +4 -15
- package/dist/kit/Frame.svelte +7 -37
- package/dist/locales/hu.js +6 -8
- package/dist/markdown.d.ts +20 -6
- package/dist/markdown.js +380 -85
- package/dist/model.js +2 -3
- package/dist/plugins/Gap.svelte +5 -8
- package/dist/plugins/GapPreview.svelte +4 -6
- package/dist/plugins/Map.svelte +2 -17
- package/dist/plugins/MapPreview.svelte +8 -10
- package/dist/plugins/Table.svelte +233 -282
- package/dist/plugins/TablePreview.svelte +28 -28
- package/dist/plugins/YouTube.svelte +3 -31
- package/dist/plugins/YouTubePreview.svelte +45 -43
- package/dist/plugins/index.js +15 -2
- package/dist/schema.js +1 -1
- package/dist/types.d.ts +27 -10
- package/dist/types.js +8 -1
- package/dist/view.js +1 -1
- package/docs/en/bundled-plugins.md +1 -1
- package/docs/en/documents-and-markdown.md +24 -19
- package/docs/en/editor-and-preview.md +7 -10
- package/docs/en/getting-started.md +14 -2
- package/docs/en/host-contexts.md +26 -132
- package/docs/en/index.md +5 -5
- package/docs/en/recipes-and-pitfalls.md +12 -11
- package/docs/en/server-side.md +0 -17
- package/docs/en/upgrading.md +34 -4
- package/docs/en/writing-plugins.md +147 -21
- package/docs/hu/bundled-plugins.md +1 -1
- package/docs/hu/documents-and-markdown.md +24 -19
- package/docs/hu/editor-and-preview.md +7 -10
- package/docs/hu/getting-started.md +14 -2
- package/docs/hu/host-contexts.md +26 -132
- package/docs/hu/index.md +5 -5
- package/docs/hu/recipes-and-pitfalls.md +12 -11
- package/docs/hu/server-side.md +0 -17
- package/docs/hu/upgrading.md +34 -4
- package/docs/hu/writing-plugins.md +147 -21
- package/package.json +14 -2
- package/dist/ImagePicker.svelte +0 -131
- package/dist/ImagePicker.svelte.d.ts +0 -13
- package/dist/media.d.ts +0 -17
- package/dist/media.js +0 -12
|
@@ -46,13 +46,13 @@ Egy rövid dokumentum egy bekezdéssel, egy listával, egy videóval és egy dob
|
|
|
46
46
|
| `md:p` | inline markdown | — | maga a szöveg |
|
|
47
47
|
| `md:h1` … `md:h6` | inline markdown | — | `#` … `######` |
|
|
48
48
|
| `md:ul` | inline markdown | — | `- item` |
|
|
49
|
-
| `md:ol` | inline markdown |
|
|
49
|
+
| `md:ol` | inline markdown | `{ start?: number }` a lista első elemén | `1. item` (sorozatonként és behúzási szintenként számozva, megadott `start`-tól) |
|
|
50
50
|
| `md:todo` | inline markdown | `{ checked: boolean }` | `- [x] item` |
|
|
51
51
|
| `md:quote` | inline markdown | — | `> quote` |
|
|
52
52
|
| `md:code` | nyers szöveg | `{ lang?: string }` | kerített blokk a nyelvvel |
|
|
53
53
|
| `md:hr` | — | — | `---` |
|
|
54
54
|
|
|
55
|
-
Az `indent` egymásba ágyazza a listaelemeket (az egymást követő lista-blokkokból az előnézetben helyesen egymásba ágyazott `ul`/`ol` elemek lesznek), a bekezdéseket és az idézeteket pedig
|
|
55
|
+
Az `indent` egymásba ágyazza a listaelemeket (az egymást követő lista-blokkokból az előnézetben helyesen egymásba ágyazott `ul`/`ol` elemek lesznek), a bekezdéseket és a kódblokkokat egy listaelem alá teszi, az idézeteket pedig egymásba ágyazza (`> > …`). A címsorok és az elválasztók figyelmen kívül hagyják.
|
|
56
56
|
|
|
57
57
|
### Inline markdown
|
|
58
58
|
|
|
@@ -60,15 +60,15 @@ A beépített blokkok szövege a markdown egy kicsi, biztonságos részhalmaza:
|
|
|
60
60
|
|
|
61
61
|
| Jelölés | Tárolt alak |
|
|
62
62
|
|---|---|
|
|
63
|
-
| félkövér | `**text**` |
|
|
64
|
-
| dőlt | `*text*` |
|
|
63
|
+
| félkövér | `**text**` (beolvasva a `__text__` is) |
|
|
64
|
+
| dőlt | `*text*` (beolvasva a `_text_` is, szón belül nem) |
|
|
65
65
|
| aláhúzott, alsó index, felső index | `<u>text</u>`, `<sub>text</sub>`, `<sup>text</sup>` |
|
|
66
66
|
| áthúzott | `~~text~~` |
|
|
67
|
-
| kód | `` `text` `` |
|
|
68
|
-
| hivatkozás | `[text](url)` – csak a `http:`, `https:`, `mailto:`, `tel:` és a webhelyen belüli `/…` célok lesznek hivatkozások |
|
|
69
|
-
| sortörés | egy újsor karakter |
|
|
67
|
+
| kód | `` `text` `` (hosszabb backtick-sorozattal, ha a kód backticket tartalmaz: ``` `` a`b `` ```) |
|
|
68
|
+
| hivatkozás | `[text](url)` – csak a `http:`, `https:`, `mailto:`, `tel:` és a webhelyen belüli `/…` célok lesznek hivatkozások; a célban a zárójeleknek párosnak kell lenniük. Beolvasva a cím (elhagyva), a `<https://…>` autolink és a kép (``) hivatkozásként is |
|
|
69
|
+
| sortörés | egy újsor karakter (markdown-kimenetben: visszaperjel a sor végén) |
|
|
70
70
|
|
|
71
|
-
Az egyszerű szövegben a speciális karakterek visszaperjeles escape-elést kapnak, így soha nem válnak jelöléss
|
|
71
|
+
Az egyszerű szövegben a speciális karakterek visszaperjeles escape-elést kapnak, így soha nem válnak jelöléssé; bármely ASCII írásjel escape-elhető. A beolvasás bármilyen bemeneten lineáris időben fut, ezekkel a korlátokkal: egy jelölt szakasz legfeljebb 2000 karakter, egy link címkéjében nem lehet saját szögletes zárójel, és legfeljebb 1000 karakter, egy link célja legfeljebb 2000. Beolvasáskor az inline HTML a jelölésekre képeződik le (`<strong>`, `<em>`, `<del>`, `<br>`…), a többi tag elmarad (a szövege megmarad), a `[^1]` lábjegyzet-hivatkozásból pedig felső index lesz. Az `inline(md)` az inline markdownt HTML-lé alakítja: előbb escape-eli a szöveget, és csak utána teszi hozzá a fenti tageket, így a kimenete biztonságosan megjeleníthető `{@html}`-lel – az előnézet is így tesz.
|
|
72
72
|
|
|
73
73
|
## Markdown be és ki
|
|
74
74
|
|
|
@@ -78,19 +78,19 @@ A markdown teljes értékű formátum: a vágólap ezt hordozza, és a befogadó
|
|
|
78
78
|
|---|---|---|
|
|
79
79
|
| `fromStored(block)` | `StoredBlock` → `Block` | bárhol |
|
|
80
80
|
| `toStored(block)` | `Block` → `StoredBlock` | csak böngészőben |
|
|
81
|
-
| `fromMarkdown(text)` | markdown → `Block[]` | bárhol |
|
|
82
|
-
| `
|
|
81
|
+
| `fromMarkdown(text, { plugins })` | markdown → `Block[]` | bárhol |
|
|
82
|
+
| `fromHtml(html, { plugins })` | HTML (formázott beillesztés, egy oldal) → `Block[]` | csak böngészőben |
|
|
83
|
+
| `toMarkdown(blocks, { plugins })` | `Block[]` → markdown | csak böngészőben |
|
|
83
84
|
| `inline(md)` | inline markdown → inline HTML | bárhol |
|
|
84
85
|
|
|
85
86
|
A markdown-függvények a szerkesztő alakján (`Block[]`) dolgoznak, ezért a tárolt dokumentumok a `fromStored` és a `toStored` függvényen mennek át:
|
|
86
87
|
|
|
87
88
|
```ts
|
|
88
|
-
import { fromMarkdown, fromStored, toMarkdown, toStored, type
|
|
89
|
+
import { fromMarkdown, fromStored, toMarkdown, toStored, type StoredBlock } from '@atom-forge/brickee';
|
|
89
90
|
import { PLUGINS } from '@atom-forge/brickee/plugins';
|
|
90
91
|
|
|
91
92
|
// Tárolt dokumentum -> markdown (csak böngészőben).
|
|
92
|
-
export const exportMarkdown = (doc: StoredBlock[],
|
|
93
|
-
toMarkdown(doc.map(fromStored), { plugins: PLUGINS, media });
|
|
93
|
+
export const exportMarkdown = (doc: StoredBlock[]) => toMarkdown(doc.map(fromStored), { plugins: PLUGINS });
|
|
94
94
|
|
|
95
95
|
// Markdown -> tárolt dokumentum (csak böngészőben).
|
|
96
96
|
export const importMarkdown = (text: string): StoredBlock[] => fromMarkdown(text).map(toStored);
|
|
@@ -102,14 +102,19 @@ export const importMarkdown = (text: string): StoredBlock[] => fromMarkdown(text
|
|
|
102
102
|
|
|
103
103
|
Amit a `fromMarkdown` beolvas:
|
|
104
104
|
|
|
105
|
-
- címsorok, felsorolás-, számozott és teendő-elemek, idézetek, kerített
|
|
106
|
-
- a sor
|
|
107
|
-
-
|
|
105
|
+
- címsorok (setext alakban is: `===`-vel vagy `---`-val aláhúzott sor, és záró `#`-ekkel), felsorolás-, számozott (a kezdőszámukkal) és teendő-elemek, idézetek (a beágyazottak egy szinttel mélyebben), kerített kód (backtick vagy tilde, tetszőleges hosszal, legalább ugyanilyen hosszú kerítés zárja) és behúzott kód, elválasztók és a fenti inline jelölések;
|
|
106
|
+
- a listák egymásba ágyazását az elemek jelölői szerint: az a sor, amely beljebb kezdődik egy elem jelölőjénél, az elemen belül van (így a `1. ` elemek alá két, három vagy négy szóközzel is lehet ágyazni);
|
|
107
|
+
- egy bekezdés, listaelem vagy idézet sorait egy blokként, köztük sortöréssel; üres sor, idézetben a magában álló `>` új blokkot kezd;
|
|
108
|
+
- a hivatkozásos linkeket (`[text][id]` és `[id]: url`) feloldva, a lábjegyzet-definíciókat a számuk utáni bekezdésként;
|
|
109
|
+
- a GFM-táblázatot a `plugins` közül az első olyan plugin blokkjaként, amelyik fogad táblázatot (`fromTable`, lásd [Pluginok írása](writing-plugins.md#beillesztett-táblázatok-fogadása); a beépített `table` ilyen), különben szövegként. A szerkesztő átadja a felkínált pluginjait, így egy beillesztett táblázatból táblázat blokk lesz.
|
|
110
|
+
|
|
111
|
+
Amit a `fromHtml` beolvas – a szerkesztő ezt használja weboldalról, Google Docsból vagy Wordből érkező formázott beillesztéshez: címsorok, bekezdések, listák (beágyazva, a számozottak a kezdőszámukkal, a teendők a jelölőnégyzetekből), idézetek, kód (`pre`, `language-…` osztállyal), elválasztók, táblázatok (egy azt fogadó pluginnak) és az inline jelölések – a Google Docs félkövér, dőlt és áthúzott spanjei is. A képekből link lesz (a csomagban nincs képfogalom), a scriptek, stílusok és űrlapelemek kimaradnak. A HTML-t csak olvassa: markdownon és ugyanazon a biztonságos megjelenítésen megy át, mint minden más.
|
|
108
112
|
|
|
109
113
|
Amit a `toMarkdown` kiír:
|
|
110
114
|
|
|
111
|
-
- az egymást követő listaelemeket egymást követő sorokba, minden más blokkot üres sorral elválasztva;
|
|
112
|
-
- a
|
|
113
|
-
- a
|
|
115
|
+
- az egymást követő listaelemeket egymást követő sorokba, az egymást követő idézeteket egyetlen idézetként (bekezdéseik között `>`), minden más blokkot üres sorral elválasztva;
|
|
116
|
+
- a beágyazott elemeket, valamint egy elem alatti bekezdéseket és kódot az elem tartalmáig behúzva (`- ` alatt két, `1. ` alatt három, `10. ` alatt négy szóközzel);
|
|
117
|
+
- a kódot minden benne lévő backtick-sorozatnál hosszabb kerítésben, az egyszerű szöveget pedig ott escape-elve, ahol a markdown jelölésnek olvasná (`\_`, sor elején `1\.`…);
|
|
118
|
+
- a plugin-blokkot a pluginja `markdown(props, { inner })` függvényével, ahol az `inner` a már átalakított beágyazott blokkjai; a markdown alak nélküli plugin, illetve az, amelyik `''`-t ad vissza, kimarad.
|
|
114
119
|
|
|
115
120
|
Saját pluginod markdown alakjának megírásáról a [Pluginok írása](writing-plugins.md#markdown-alak) fejezet szól.
|
|
@@ -6,12 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
| Prop | Típus | Alapérték | Jelentés |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| `value` | `StoredBlock[]` (bindable) | `[]` | A dokumentum. Minden változáskor visszaíródik; a kívülről lecserélt dokumentum újra betöltődik. |
|
|
9
|
+
| `value` | `StoredBlock[]` (bindable) | `[]` | A dokumentum. Minden változáskor visszaíródik (a változatlan blokkok megtartják az objektumukat); a kívülről lecserélt dokumentum – új tömb, nem helyben módosított – újra betöltődik, hacsak nem egyezik a mostanival. |
|
|
10
10
|
| `plugins` | `BlockPlugin[]` | `[]` | A pluginblokkok, amelyeket ez a szerkesztő megjeleníthet és felkínálhat. |
|
|
11
11
|
| `palette` | `string[]` | minden beépített blokk, utána minden plugin | A perjeles menü által felkínált blokktípusok, ebben a sorrendben (lásd lent). |
|
|
12
|
-
| `media` | `MediaItem[]` | — | A képek, amelyek közül a blokkok választhatnak (lásd [Az alkalmazás kontextusai](host-contexts.md)). |
|
|
13
12
|
| `messages` | `Messages` | — | Felületi szövegek az alkalmazás nyelvén: angol szöveg → fordítás. |
|
|
14
|
-
| `readonly` | `boolean` | `false` | Szerkesztés nélkül mutatja a dokumentumot; a pluginmezők rejtve vannak. |
|
|
13
|
+
| `readonly` | `boolean` | `false` | Szerkesztés nélkül mutatja a dokumentumot; a pluginmezők rejtve vannak. Az írásvédett szerkesztő soha nem írja a `value`-t. |
|
|
15
14
|
| `placeholder` | `string` | `Write something, or press '/' for blocks…` | Az üres blokk tippszövege. |
|
|
16
15
|
| `nested` | `boolean` | `false` | A beágyazott blokkokat tartalmazó pluginok állítják be a belső szerkesztőjükön; a befogadó alkalmazás soha nem állítja be. |
|
|
17
16
|
|
|
@@ -23,16 +22,14 @@ Az üres dokumentum egyetlen üres bekezdésként jelenik meg, így a szerkeszt
|
|
|
23
22
|
|---|---|---|---|
|
|
24
23
|
| `blocks` | `StoredBlock[]` | — | A megjelenítendő dokumentum. |
|
|
25
24
|
| `plugins` | `BlockPlugin[]` | — | A pluginok, amelyek előnézetei a pluginblokkokat renderelik. |
|
|
26
|
-
| `media` | `MediaItem[]` | — | A képek, amelyekre a blokkok azonosítóval hivatkoznak. |
|
|
27
25
|
| `messages` | `Messages` | — | Felületi szövegek az alkalmazás nyelvén. |
|
|
28
|
-
| `markGated` | `boolean` | `true` | Megjelöli a kapus blokk utáni blokkokat (lásd [Egyedi és kapus blokkok](writing-plugins.md#egyedi-és-kapus-blokkok)). |
|
|
29
26
|
| `nested` | `boolean` | `false` | A beágyazott blokkjaikat renderelő plugin-előnézetek állítják be. |
|
|
30
27
|
|
|
31
28
|
Az előnézet a beépített blokkokat sima HTML-ként rendereli (`p`, `h1`…`h6`, `ul`/`ol` beágyazott elemekkel, `blockquote`, `pre > code` `language-<lang>` osztállyal, `hr`), a pluginblokkokat pedig a pluginjuk `preview` komponensével. Az a blokk, amelynek típusához nincs plugin a `plugins` listában, vagy amelynek pluginjának nincs `preview`-ja, nem renderelődik.
|
|
32
29
|
|
|
33
30
|
Hogy használod-e egyáltalán a `Preview`-t, rajtad múlik: a szerkesztő nem függ tőle. Egy saját megjelenítővel dolgozó alkalmazás maga is renderelheti a tárolt blokkokat, és a pluginjai elhagyhatják a `preview`-t.
|
|
34
31
|
|
|
35
|
-
A legfelső szintű szerkesztőnek vagy előnézetnek átadott `
|
|
32
|
+
A legfelső szintű szerkesztőnek vagy előnézetnek átadott `messages` öröklődik minden alatta lévő beágyazott szerkesztőre, beágyazott előnézetre és pluginkomponensre.
|
|
36
33
|
|
|
37
34
|
## A paletta
|
|
38
35
|
|
|
@@ -74,10 +71,10 @@ A `PALETTE_ITEMS` a beépített blokkokat sorolja fel a címkéikkel, tippjeikke
|
|
|
74
71
|
| Szövegformázás | Jelölj ki szöveget az eszköztárhoz, vagy `Ctrl/Cmd` + `B` félkövér, `I` dőlt, `U` aláhúzott, `Shift+X` áthúzott, `E` kód, `K` link, `\` formázás eltávolítása. Az alsó és a felső index az eszköztáron érhető el. |
|
|
75
72
|
| Behúzás | `Tab` / `Shift+Tab` (legfeljebb 6 szint). |
|
|
76
73
|
| Sortörés | `Shift+Enter`; kódblokkban az `Enter` töri a sort, a `Shift+Enter` vagy a `Ctrl/Cmd+Enter` pedig új blokkot kezd. |
|
|
77
|
-
| Blokkok kijelölése | Kattints egy blokk fogantyújára, nyomj `Esc`-et egy blokkban, `Shift+↑/↓` a blokk szélén túl, vagy húzz szövegkijelölést több blokkon át. Üres blokkban a `Ctrl/Cmd+A` minden blokkot kijelöl. |
|
|
78
|
-
| Blokkok mozgatása | Húzd a fogantyút (beágyazott szerkesztőkbe be és onnan ki is),
|
|
79
|
-
| Átalakítás | Kattints egy blokk vagy egy kijelölés fogantyújára az „Átalakítás” menühöz. |
|
|
80
|
-
| Másolás, kivágás | A kijelölt blokkok másolásakor a markdownjuk kerül a vágólapra (a pluginblokkok a markdown alakjukon keresztül). |
|
|
74
|
+
| Blokkok kijelölése | Kattints (vagy koppints) egy blokk fogantyújára, nyomj `Esc`-et egy blokkban, `Shift+↑/↓` a blokk szélén túl, vagy húzz szövegkijelölést több blokkon át. Üres blokkban a `Ctrl/Cmd+A` minden blokkot kijelöl. |
|
|
75
|
+
| Blokkok mozgatása | Húzd a fogantyút (beágyazott szerkesztőkbe be és onnan ki is), `Ctrl/Cmd+Shift+↑/↓`, vagy az „Átalakítás” menü *Mozgatás fel* / *Mozgatás le* pontja (húzás nélkül: érintőképernyő, billentyűzet). |
|
|
76
|
+
| Átalakítás | Kattints egy blokk vagy egy kijelölés fogantyújára az „Átalakítás” menühöz; billentyűzetről a kijelölt blokkokon `/` (vagy `Ctrl/Cmd+/`, a menübillentyű, `Shift+F10`), egy blokk szövegében `Ctrl/Cmd+/`. Érintőképernyőn a megkoppintott blokk a fogantyúja mellett mutatja a műveleteit (új blokk alá, átalakítás, törlés). |
|
|
77
|
+
| Másolás, kivágás, beillesztés | A kijelölt blokkok másolásakor a markdownjuk kerül a vágólapra (a pluginblokkok a markdown alakjukon keresztül), mellé pedig maguk a blokkok is (`application/x-brickee+json`). Máshonnan (weboldal, Google Docs, Word) érkező formázott szöveg megtartja a címsorait, listáit, táblázatait és jelöléseit (`fromHtml`); a sima szöveget markdownként olvassa. Brickee-szerkesztőbe illesztve a másolt blokkok változatlanul jönnek vissza; az a pluginblokk, amelyet az a szerkesztő nem kínál fel (vagy egy második egyedi), a markdown alakjára esik vissza. Bárhová máshová illesztve a markdown érkezik. Blokk-kijelölés közben beillesztve a blokkok a kijelölés után kerülnek. |
|
|
81
78
|
| Beillesztés | A többsoros szöveg markdownként értelmeződik, és blokkokká válik. |
|
|
82
79
|
| Visszavonás, újra | `Ctrl/Cmd+Z`, `Ctrl/Cmd+Shift+Z` vagy `Ctrl/Cmd+Y`. |
|
|
83
80
|
|
|
@@ -10,7 +10,7 @@ Minden más plugin. A plugin egy egyszerű objektum (`BlockPlugin`), amely megne
|
|
|
10
10
|
|
|
11
11
|
- egy **nézetet** — a szerkesztőben megjelenő Svelte-komponenst;
|
|
12
12
|
- egy **előnézetet** — a blokkot az oldalon megjelenítő Svelte-komponenst;
|
|
13
|
-
- **mezőket** — a blokk tetején megjelenő beállításokat (szöveg, szín, választó, csúszka
|
|
13
|
+
- **mezőket** — a blokk tetején megjelenő beállításokat (szöveg, szín, választó, csúszka…);
|
|
14
14
|
- opcionálisan egy **markdown alakot**, amelyet a dokumentum markdownként való másolásakor vagy exportálásakor használ.
|
|
15
15
|
|
|
16
16
|
A csomag négy általános plugint is tartalmaz — táblázat, YouTube-videó, térkép és térköz —, de ezek is ugyanolyan pluginok, mint bármelyik más: a magban semmi sem függ tőlük, és csak azokat adod át, amelyeket szeretnél. A képblokkokat, dobozokat és más, az oldalra jellemző blokkokat te írod meg pluginként.
|
|
@@ -24,7 +24,7 @@ bun add @atom-forge/brickee @atom-forge/ui @lucide/svelte
|
|
|
24
24
|
| Peer dependency | Miért |
|
|
25
25
|
|---|---|
|
|
26
26
|
| `svelte` `^5.0.0` | A szerkesztő, az előnézet és a pluginok Svelte 5 komponensek. |
|
|
27
|
-
| `@atom-forge/ui` `>=0.0.37` | A felugró ablakok (
|
|
27
|
+
| `@atom-forge/ui` `>=0.0.37` | A felugró ablakok (linkbekérő) és a blokkmezők űrlapvezérlői. |
|
|
28
28
|
| `@lucide/svelte` `>=1.0.0` | A blokkok ikonjai. |
|
|
29
29
|
| `zod` `^4.0.0` (opcionális) | Csak az `@atom-forge/brickee/schema` szerveroldali sémájához. |
|
|
30
30
|
|
|
@@ -33,10 +33,22 @@ bun add @atom-forge/brickee @atom-forge/ui @lucide/svelte
|
|
|
33
33
|
A blokkmezők és a felugró ablakok `@atom-forge/ui` komponensek, ezért az alkalmazást úgy kell beállítani, ahogy az `@atom-forge/ui` megköveteli:
|
|
34
34
|
|
|
35
35
|
- Tailwind CSS 4, importált `@atom-forge/ui` téma-CSS-sel, a `dist` mappáját pedig add hozzá Tailwind `@source`-ként;
|
|
36
|
+
- az `@atom-forge/brickee` `dist` mappája is legyen Tailwind `@source`: a szerkesztő Tailwind-osztályokkal és az `@atom-forge/ui` téma színeivel van stílusozva, ezért a Tailwindnek látnia kell őket:
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
@source "../node_modules/@atom-forge/ui/dist";
|
|
40
|
+
@source "../node_modules/@atom-forge/brickee/dist";
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Az előnézetnek egyik sem kell: a kevés stílusa a jelölésével együtt utazik, így Tailwind nélküli nyilvános oldal is mutathat dokumentumokat;
|
|
36
44
|
- az alkalmazás az `@atom-forge/ui` `Root` komponense alatt renderelődjön, amely a témát és az overlay-kontextusokat biztosítja.
|
|
37
45
|
|
|
38
46
|
A legfelső szintű `Editor` saját felugróablak-kezelőt hoz létre, és saját felugróablak-tárolót renderel; a pluginblokkokba ágyazott szerkesztők ezt használják közösen.
|
|
39
47
|
|
|
48
|
+
A szerkesztő a színeit az `@atom-forge/ui` téma tokenjeiből veszi (`--color-surface`, `--color-frame`, `--color-muted-contrast`…), így követi a befogadó alkalmazás világos és sötét módját. Az előnézet keretei és képaláírásai az oldal szövegszínéből számolódnak.
|
|
49
|
+
|
|
50
|
+
A blokkok fogantyúi a **szerkesztő dobozától balra**, egy kb. 22 px széles sávban jelennek meg: a szerkesztőt körülvevő elemnek legyen ennyi bal oldali paddingje, különben a fogantyúk kilógnak belőle.
|
|
51
|
+
|
|
40
52
|
> **Hiányzó téma**
|
|
41
53
|
>
|
|
42
54
|
> Az `@atom-forge/ui` téma-CSS nélkül a szerkesztő továbbra is működik, de a blokkmezők, a színválasztó, a csúszka és a felugró ablakok stílus nélkül jelennek meg.
|
package/docs/hu/host-contexts.md
CHANGED
|
@@ -2,143 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
[← Előző](writing-plugins.md) · [Tartalom](index.md) · [Következő →](server-side.md)
|
|
4
4
|
|
|
5
|
-
A szerkesztőnek nincsenek propjai az alkalmazás fogalmaihoz. Amit a befogadó alkalmazás tud —
|
|
5
|
+
A szerkesztőnek nincsenek propjai az alkalmazás fogalmaihoz. Amit a befogadó alkalmazás tud — az éppen mutatott oldalszélességet, a kiemelhető kódnyelveket, a nyelvét —, az három Svelte-kontextuson keresztül jut el a pluginokhoz. Mindegyikhez tartozik egy `provide…` függvény, amelyet a szerkesztő vagy az előnézet fölötti komponens inicializálásakor hívsz meg, és egy `use…` függvény a plugin-komponensek számára.
|
|
6
6
|
|
|
7
7
|
| Kontextus | Megadás | Olvasás | Mit hordoz |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| Média | `media` prop, vagy `provideMedia(() => list)` | `useMedia()` | A képek, amelyek közül a blokkok választhatnak. |
|
|
10
9
|
| Nézet | `provideView(() => key)` | `useView()` | A nézet, amelyet a nézetenkénti mezők szerkesztenek. |
|
|
10
|
+
| Kódnyelvek | `provideCodeLanguages(() => list)` | `useCodeLanguages()` | A nyelvek, amelyeket a kódblokk felkínál. |
|
|
11
11
|
| Szöveg | `messages` prop, vagy `provideText(() => messages)` | `useText()` | Felületi szövegek az alkalmazás nyelvén. |
|
|
12
12
|
|
|
13
13
|
A beágyazott szerkesztők és előnézetek mindhármat a szülőjüktől öröklik.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
A blokkok soha nem tárolnak kép-URL-t. A képmező egy `MediaItem` **azonosítóját** tárolja, a szerkesztő, az előnézet és a pluginok pedig a dokumentum médiájában keresik ki az elemet:
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
interface MediaItem {
|
|
21
|
-
id: string; // a blokk propsában tárolva
|
|
22
|
-
name: string; // fájlnév vagy cím, a választóban jelenik meg
|
|
23
|
-
url: string; // a kép címe
|
|
24
|
-
group?: string; // címsor a választóban (pl. a melléklet kategóriája)
|
|
25
|
-
}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
A mellékelt pluginok nem használnak képeket; a képblokkokat neked kell megírnod, mert az elrendezésük az oldalé. Egy minimális `photo` plugin — képmező, alternatív szöveg és magasságcsúszka:
|
|
29
|
-
|
|
30
|
-
```svelte
|
|
31
|
-
<!-- PhotoView.svelte -->
|
|
32
|
-
<script lang="ts" module>
|
|
33
|
-
export interface PhotoProps extends Record<string, unknown> {
|
|
34
|
-
/** Egy MediaItem azonosítója. */
|
|
35
|
-
image: string;
|
|
36
|
-
alt: string;
|
|
37
|
-
/** A magasság a szélesség %-ában (20–150), vagy beállítatlan a kép saját alakjához. */
|
|
38
|
-
ratio?: unknown;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** CSS aspect-ratio egy tárolt magasságból, vagy undefined. */
|
|
42
|
-
export const aspect = (v: unknown) => {
|
|
43
|
-
const n = Number(v);
|
|
44
|
-
return n >= 20 && n <= 150 ? `100 / ${n}` : undefined;
|
|
45
|
-
};
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<script lang="ts">
|
|
49
|
-
import { ImageIcon } from '@lucide/svelte';
|
|
50
|
-
import { Empty, findMedia, useMedia, type PluginViewProps } from '@atom-forge/brickee';
|
|
51
|
-
|
|
52
|
-
let { props = $bindable(), blocks = $bindable() }: PluginViewProps<PhotoProps> = $props();
|
|
53
|
-
const media = useMedia();
|
|
54
|
-
const item = $derived(findMedia(media(), props.image));
|
|
55
|
-
</script>
|
|
56
|
-
|
|
57
|
-
{#if item}
|
|
58
|
-
<img src={item.url} alt={props.alt} style="max-width: 100%" />
|
|
59
|
-
{:else}
|
|
60
|
-
<Empty icon={ImageIcon} text="Pick an image above" />
|
|
61
|
-
{/if}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
```svelte
|
|
65
|
-
<!-- PhotoPreview.svelte -->
|
|
66
|
-
<script lang="ts">
|
|
67
|
-
import { baseValue, findMedia, useMedia, type PluginPreviewProps } from '@atom-forge/brickee';
|
|
68
|
-
import { aspect, type PhotoProps } from './PhotoView.svelte';
|
|
69
|
-
|
|
70
|
-
let { props }: PluginPreviewProps<PhotoProps> = $props();
|
|
71
|
-
const media = useMedia();
|
|
72
|
-
const item = $derived(findMedia(media(), props.image));
|
|
73
|
-
</script>
|
|
74
|
-
|
|
75
|
-
{#if item}
|
|
76
|
-
<img src={item.url} alt={props.alt ?? ''} style:aspect-ratio={aspect(baseValue(props.ratio))} />
|
|
77
|
-
{/if}
|
|
78
|
-
|
|
79
|
-
<style>
|
|
80
|
-
img {
|
|
81
|
-
width: 100%;
|
|
82
|
-
object-fit: cover;
|
|
83
|
-
}
|
|
84
|
-
</style>
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
```ts
|
|
88
|
-
// photo.ts
|
|
89
|
-
import { ImageIcon } from '@lucide/svelte';
|
|
90
|
-
import { findMedia, mdText, type BlockPlugin } from '@atom-forge/brickee';
|
|
91
|
-
import PhotoView, { type PhotoProps } from './PhotoView.svelte';
|
|
92
|
-
import PhotoPreview from './PhotoPreview.svelte';
|
|
93
|
-
|
|
94
|
-
export const photo: BlockPlugin<PhotoProps> = {
|
|
95
|
-
type: 'photo',
|
|
96
|
-
label: 'Photo',
|
|
97
|
-
hint: 'One picked image',
|
|
98
|
-
keys: 'photo image picture',
|
|
99
|
-
icon: ImageIcon,
|
|
100
|
-
props: () => ({ image: '', alt: '' }),
|
|
101
|
-
fields: [
|
|
102
|
-
{ key: 'image', label: 'Image', kind: 'image' },
|
|
103
|
-
{ key: 'alt', label: 'Alt text', kind: 'text', placeholder: 'What the image shows' },
|
|
104
|
-
{ key: 'ratio', label: 'Height', kind: 'slider', min: 20, max: 150, unit: '%', none: 'Original' }
|
|
105
|
-
],
|
|
106
|
-
tag: () => 'photo',
|
|
107
|
-
content: 'none',
|
|
108
|
-
markdown: (p, { media }) => {
|
|
109
|
-
const url = findMedia(media, p.image)?.url;
|
|
110
|
-
return url ? `` : '';
|
|
111
|
-
},
|
|
112
|
-
view: PhotoView,
|
|
113
|
-
preview: PhotoPreview
|
|
114
|
-
};
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
A szerkesztőnek és az előnézetnek ugyanazt a médiát add:
|
|
118
|
-
|
|
119
|
-
```svelte
|
|
120
|
-
<script lang="ts">
|
|
121
|
-
import { Editor, Preview, type MediaItem, type StoredBlock } from '@atom-forge/brickee';
|
|
122
|
-
import { photo } from './photo';
|
|
123
|
-
|
|
124
|
-
let { value = $bindable(), media }: { value: StoredBlock[]; media: MediaItem[] } = $props();
|
|
125
|
-
</script>
|
|
126
|
-
|
|
127
|
-
<Editor bind:value plugins={[photo]} {media} />
|
|
128
|
-
<Preview blocks={value} plugins={[photo]} {media} />
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Plugin-komponensben a listát a `useMedia()`-val olvasd ki — függvényt ad vissza, így a lista mindig friss marad —, egy elemet pedig a `findMedia(list, id)`-vel keress meg, ahogy a photo nézete és előnézete is teszi.
|
|
132
|
-
|
|
133
|
-
> **Bélyegképek a szerkesztőben**
|
|
134
|
-
>
|
|
135
|
-
> A szerkesztőnek csak kis képekre van szüksége. Mivel a blokkok azonosítókat tárolnak, a szerkesztőnek adhatsz egy bélyegkép-URL-ekből álló listát, az oldalon lévő előnézetnek pedig egy teljes méretű URL-ekből állót, ugyanazokkal az azonosítókkal.
|
|
136
|
-
|
|
137
|
-
Tipikus forrás egy oldal feltöltött mellékletei vagy egy médiatár. Minden képnek, amelyre egy dokumentum hivatkozik, szerepelnie kell a listában, különben a blokkja semmit sem renderel.
|
|
15
|
+
A képek nem kontextuson keresztül érkeznek: hogy egy képblokk mit tárol, és honnan veszi a képeit, azt az alkalmazás saját pluginja dönti el (lásd [Képek](writing-plugins.md#képek)).
|
|
138
16
|
|
|
139
17
|
## Nézetenkénti értékek
|
|
140
18
|
|
|
141
|
-
Egyes beállítások attól függnek, hogyan jelenik meg az oldal: egy képnek telefonon más képarány kellhet, mint széles képernyőn. A `views` beállítással rendelkező `slider` mező nézetenként tárol értéket
|
|
19
|
+
Egyes beállítások attól függnek, hogyan jelenik meg az oldal: egy képnek telefonon más képarány kellhet, mint széles képernyőn. A `views` beállítással rendelkező `slider` mező nézetenként tárol értéket. Itt ez a [Pluginok írása](writing-plugins.md#képek) fejezet `photo` pluginjának magassága és a mellékelt `gap`:
|
|
142
20
|
|
|
143
21
|
```ts
|
|
144
22
|
import type { BlockPlugin } from '@atom-forge/brickee';
|
|
@@ -184,18 +62,17 @@ Az előnézet a `viewValues(value, keys)`-szel olvassa ki őket — minden néze
|
|
|
184
62
|
|
|
185
63
|
```svelte
|
|
186
64
|
<script lang="ts">
|
|
187
|
-
import {
|
|
188
|
-
import { aspect, type PhotoProps } from './PhotoView.svelte';
|
|
65
|
+
import { viewValues, type PluginPreviewProps } from '@atom-forge/brickee';
|
|
66
|
+
import { aspect, imageSrc, type PhotoProps } from './PhotoView.svelte';
|
|
189
67
|
|
|
190
68
|
let { props }: PluginPreviewProps<PhotoProps> = $props();
|
|
191
|
-
const
|
|
192
|
-
const item = $derived(findMedia(media(), props.image));
|
|
69
|
+
const src = $derived(imageSrc(props.url));
|
|
193
70
|
// desktop, tablet, phone: mindegyikhez egy CSS aspect-ratio ('auto': a kép saját alakja)
|
|
194
71
|
const r = $derived(viewValues(props.ratio, ['desktop', 'tablet', 'phone']).map((v) => aspect(v) ?? 'auto'));
|
|
195
72
|
</script>
|
|
196
73
|
|
|
197
|
-
{#if
|
|
198
|
-
<img src
|
|
74
|
+
{#if src}
|
|
75
|
+
<img {src} alt={props.alt ?? ''} style:--r-desktop={r[0]} style:--r-tablet={r[1]} style:--r-phone={r[2]} />
|
|
199
76
|
{/if}
|
|
200
77
|
|
|
201
78
|
<style>
|
|
@@ -221,6 +98,23 @@ Az előnézet a `viewValues(value, keys)`-szel olvassa ki őket — minden néze
|
|
|
221
98
|
>
|
|
222
99
|
> A `views` a `slider` mezőkön támogatott. A többi mezőfajta figyelmen kívül hagyja.
|
|
223
100
|
|
|
101
|
+
## Kódnyelvek
|
|
102
|
+
|
|
103
|
+
A kódblokk nyelve (`props.lang`, a markdown-kerítés info-szövege) alapból szabad szöveg. Ha az alkalmazás tudja, mely nyelveket tud kiemelni az oldala, megadja a listát, és a kódblokk mezősávjában a mező legördülő lista lesz, elején a *Nincs* opcióval:
|
|
104
|
+
|
|
105
|
+
```svelte
|
|
106
|
+
<script lang="ts">
|
|
107
|
+
import { Editor, provideCodeLanguages, type StoredBlock } from '@atom-forge/brickee';
|
|
108
|
+
|
|
109
|
+
let { value = $bindable() }: { value: StoredBlock[] } = $props();
|
|
110
|
+
provideCodeLanguages(() => [{ value: 'ts', label: 'TypeScript' }, { value: 'svelte', label: 'Svelte' }, 'css', 'bash']);
|
|
111
|
+
</script>
|
|
112
|
+
|
|
113
|
+
<Editor bind:value />
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Egy elem string vagy `{ value, label? }`; a `value` kerül tárolásra. A beágyazott szerkesztők öröklik a listát. Egy tárolt nyelv, amely nincs a listában, opció marad, így egy régebbi dokumentum megnyitásakor semmi sem vész el.
|
|
117
|
+
|
|
224
118
|
## Felületi szövegek
|
|
225
119
|
|
|
226
120
|
A szerkesztő és a pluginok angolul íródtak, és az angol szöveg a fordításának kulcsa. Add át a `messages`-t — egy objektumot, amely az angol szövegeket a te nyelvedre képezi le — a legfelső szintű szerkesztőnek és előnézetnek:
|
package/docs/hu/index.md
CHANGED
|
@@ -19,7 +19,7 @@ flowchart TB
|
|
|
19
19
|
- **Mellékelt pluginok** (`@atom-forge/brickee/plugins`) — ugyanolyan pluginok, mint bármelyik más, és csak abból készültek, amit a mag exportál. Csak azokat kapcsolod be, amelyekre szükséged van.
|
|
20
20
|
- **A saját pluginjaid** — ugyanaz a `BlockPlugin` alak, az alkalmazásodban.
|
|
21
21
|
|
|
22
|
-
Maga a szerkesztő semmit sem tud az alkalmazásodról. Amire egy alkalmazásnak szüksége van —
|
|
22
|
+
Maga a szerkesztő semmit sem tud az alkalmazásodról. Amire egy alkalmazásnak szüksége van — az oldalszélességei, a kódnyelvei, a nyelve —, az **kontextusokon** (nézet, kódnyelvek, szöveg) vagy a pluginok **mezőin** keresztül jut el a pluginokhoz, soha nem külön szerkesztő-propokon át. A képek sem kivételek: a képblokk a saját pluginod, amely úgy tárolja, választja ki és oldja fel a képeit, ahogy az alkalmazásod teszi.
|
|
23
23
|
|
|
24
24
|
## Tartalom
|
|
25
25
|
|
|
@@ -27,12 +27,12 @@ Maga a szerkesztő semmit sem tud az alkalmazásodról. Amire egy alkalmazásnak
|
|
|
27
27
|
2. [A szerkesztő és az előnézet](editor-and-preview.md) — az `Editor` és a `Preview` propjai, a paletta, a szerkesztési funkciók és a görgetés-szinkron.
|
|
28
28
|
3. [Dokumentumok és markdown](documents-and-markdown.md) — a tárolt alak (`StoredBlock`), a beépített blokkok, valamint az átalakítás markdownból és markdownba.
|
|
29
29
|
4. [Mellékelt pluginok](bundled-plugins.md) — mit tartalmaz az `@atom-forge/brickee/plugins`, és hogyan írhatsz felül egy előnézetet vagy adhatsz hozzá mezőket.
|
|
30
|
-
5. [Pluginok írása](writing-plugins.md) — a `BlockPlugin` felépítése, mezők, nézetek és előnézetek, tárolók, markdown alakok és a kit.
|
|
31
|
-
6. [Az alkalmazás kontextusai](host-contexts.md) —
|
|
32
|
-
7. [A szerveren](server-side.md) — sémavalidálás, sima szöveg
|
|
30
|
+
5. [Pluginok írása](writing-plugins.md) — a `BlockPlugin` felépítése, mezők, nézetek és előnézetek, tárolók, markdown alakok, képblokkok és a kit.
|
|
31
|
+
6. [Az alkalmazás kontextusai](host-contexts.md) — nézetenkénti értékek, kódnyelvek és felületi szövegek.
|
|
32
|
+
7. [A szerveren](server-side.md) — sémavalidálás, sima szöveg.
|
|
33
33
|
8. [Receptek és buktatók](recipes-and-pitfalls.md) — teljes minták és az elkerülendő hibák.
|
|
34
34
|
9. [Frissítés](upgrading.md) — mit kell módosítanod a kódodban, amikor újabb verzióra váltasz.
|
|
35
35
|
|
|
36
36
|
A könyvben van egy AI Notes fejezet is: utasítások, amelyeket a csomagot használó projekt ágens-utasításfájljába másolhatsz.
|
|
37
37
|
|
|
38
|
-
A Svelte-példák teljes komponensek, hacsak másként nem jelzik. Az alkalmazásbeli értékek, például
|
|
38
|
+
A Svelte-példák teljes komponensek, hacsak másként nem jelzik. Az alkalmazásbeli értékek, például az aktuális oldalszélesség, azt jelölik, amit az alkalmazásod biztosít.
|
|
@@ -38,23 +38,22 @@ export const messages: Messages = { ...hu, Button: 'Gomb', 'A link as a button':
|
|
|
38
38
|
```svelte
|
|
39
39
|
<!-- lib/BlockEditor.svelte -->
|
|
40
40
|
<script lang="ts">
|
|
41
|
-
import { Editor, provideView, type
|
|
41
|
+
import { Editor, provideView, type StoredBlock } from '@atom-forge/brickee';
|
|
42
42
|
import { messages, PAGE_PALETTE, plugins } from './blocks';
|
|
43
43
|
|
|
44
44
|
let {
|
|
45
45
|
value = $bindable(),
|
|
46
|
-
media = [],
|
|
47
46
|
palette = PAGE_PALETTE,
|
|
48
47
|
view
|
|
49
|
-
}: { value: StoredBlock[];
|
|
48
|
+
}: { value: StoredBlock[]; palette?: string[]; view?: string } = $props();
|
|
50
49
|
|
|
51
50
|
provideView(() => view);
|
|
52
51
|
</script>
|
|
53
52
|
|
|
54
|
-
<Editor bind:value {plugins} {palette} {
|
|
53
|
+
<Editor bind:value {plugins} {palette} {messages} />
|
|
55
54
|
```
|
|
56
55
|
|
|
57
|
-
A közzétett oldalt a `<Preview blocks={doc} {plugins} {
|
|
56
|
+
A közzétett oldalt a `<Preview blocks={doc} {plugins} {messages} />`-val és ugyanazokkal a `plugins`-szal rendereld, így egy blokk ugyanúgy néz ki a szerkesztő előnézetében és az oldalon.
|
|
58
57
|
|
|
59
58
|
## A teljes dokumentum másolása markdownként
|
|
60
59
|
|
|
@@ -62,13 +61,13 @@ A kijelölt blokkok másolása már most is markdownt tesz a vágólapra. Egy, a
|
|
|
62
61
|
|
|
63
62
|
```svelte
|
|
64
63
|
<script lang="ts">
|
|
65
|
-
import { fromStored, toMarkdown, type
|
|
64
|
+
import { fromStored, toMarkdown, type StoredBlock } from '@atom-forge/brickee';
|
|
66
65
|
import { plugins } from './blocks';
|
|
67
66
|
|
|
68
|
-
let { doc
|
|
67
|
+
let { doc }: { doc: StoredBlock[] } = $props();
|
|
69
68
|
|
|
70
69
|
// Kattintáskezelőben fut, így a csak böngészőben működő toMarkdown itt biztonságos.
|
|
71
|
-
const copy = () => navigator.clipboard.writeText(toMarkdown(doc.map(fromStored), { plugins
|
|
70
|
+
const copy = () => navigator.clipboard.writeText(toMarkdown(doc.map(fromStored), { plugins }));
|
|
72
71
|
</script>
|
|
73
72
|
|
|
74
73
|
<button type="button" onclick={copy}>Copy as markdown</button>
|
|
@@ -83,7 +82,7 @@ import { fromMarkdown, toStored, type StoredBlock } from '@atom-forge/brickee';
|
|
|
83
82
|
export const fromText = (text: string): StoredBlock[] => fromMarkdown(text).map(toStored);
|
|
84
83
|
```
|
|
85
84
|
|
|
86
|
-
|
|
85
|
+
Egy bekezdés sorai egy blokk maradnak, köztük sortöréssel; üres sor új blokkot kezd.
|
|
87
86
|
|
|
88
87
|
## Fejlesztés helyi másolattal
|
|
89
88
|
|
|
@@ -105,15 +104,17 @@ Az alkalmazás a csomag lefordított `dist/` mappáját olvassa, ezért minden v
|
|
|
105
104
|
|
|
106
105
|
| Tünet | Ok | Megoldás |
|
|
107
106
|
|---|---|---|
|
|
107
|
+
| A szerkesztő sorai, menüi vagy táblázata stílus nélküliek vagy összezsugorodnak | Az `@atom-forge/brickee` `dist` mappája nem Tailwind `@source` | Vedd fel az `@source "../node_modules/@atom-forge/brickee/dist";` sort az `@atom-forge/ui`-é mellé. |
|
|
108
108
|
| A blokkmezők és a popupok stílus nélkülinek tűnnek | Hiányzik az `@atom-forge/ui` téma CSS-e vagy a Tailwind `@source`-a | Állítsd be az `@atom-forge/ui`-t a dokumentációja szerint, és az alkalmazást a `Root`-ja alatt rendereld. |
|
|
109
|
+
| A blokkfogantyúk balra kilógnak | A fogantyúk a szerkesztő dobozától balra jelennek meg | Adj a szerkesztőt körülvevő elemnek kb. 22 px bal oldali paddinget. |
|
|
109
110
|
| A popupok nem nyílnak meg, vagy „context not found” hibák linkelt csomaggal | A `svelte` vagy az `@atom-forge/ui` két példányban van jelen | Vedd fel őket a Vite `resolve.dedupe` listájába. |
|
|
110
111
|
| Egy plugin blokkja „Unknown block” feliratot mutat | A pluginja hiányzik a `plugins`-ból | Egy dokumentumtípus minden szerkesztőjének és előnézetének ugyanazokat a pluginokat add át. |
|
|
111
112
|
| Egy blokk hiányzik a `Preview`-ból | A pluginjának nincs `preview`-ja | Adj a pluginnak `preview`-t (a mellékelt pluginoknak van alapértelmezett), vagy rendereld a blokkot a saját megjelenítőddel. |
|
|
112
|
-
| Egy plugin blokkja hiányzik az oldalról | Az előnézet más `plugins`-t kapott
|
|
113
|
+
| Egy plugin blokkja hiányzik az oldalról | Az előnézet más `plugins`-t kapott | Ugyanazt a pluginlistát használd a szerkesztőhöz és az előnézethez. |
|
|
114
|
+
| Egy képblokk semmit sem renderel | Az előnézete elutasítja a tárolt címet, vagy az alkalmazás saját keresése nem ismeri a tárolt azonosítót | Olyan címet tárolj, amelyet az előnézet elfogad (`http(s)` vagy az oldalon belüli); az azonosítókat a szerkesztőben és az oldalon ugyanabból az adatból oldd fel. |
|
|
113
115
|
| Egy doboz nem tehető egy másik dobozba | A beágyazott szerkesztők egy szint mélyek | A tárolókat tartalomblokkok befogadására tervezd, ne más tárolókéra. |
|
|
114
116
|
| Egy blokk nem érhető el egy tárolón belül | Az `accepts` vagy az alkalmazás `palette`-je kihagyja | Vedd fel a palettaazonosítót az `accepts`-be (vagy használd az `'md:*'`-ot az összes beépítetthez). |
|
|
115
117
|
| Egy egyedi blokk kétszer jelenik meg | A séma nem kényszeríti ki a `unique`-ot | Ellenőrizd a szerveren, ha az alkalmazásod számít rá. |
|
|
116
|
-
| A védett tartalom mindenkinek látszik | A `gate` csak megjelöli a blokkokat | Renderelés előtt vágd meg a dokumentumot a szerveren. |
|
|
117
118
|
| `document is not defined` | A `toMarkdown` vagy a `toStored` SSR közben futott | Csak a böngészőben hívd őket. |
|
|
118
119
|
| Egy propsból jövő szín vagy link elrontja az oldalt | A props felhasználói bemenet | Használd a `safeColor`-t, ellenőrizd a linkeket, és propsszal soha ne használj `{@html}`-t. |
|
|
119
120
|
| Egy felülírt plugin elveszíti a blokkjait | Megváltozott a `type`-ja | Egy plugin szétterítésekor tartsd meg a `type`-ot. |
|
package/docs/hu/server-side.md
CHANGED
|
@@ -76,20 +76,3 @@ export const description = (doc: StoredBlock[]) => blocksToPlainText(doc).slice(
|
|
|
76
76
|
## Renderelés
|
|
77
77
|
|
|
78
78
|
A `Preview` hagyományos Svelte-komponens, és szerveren is renderelhető; a mag renderelője és a mellékelt előnézetek nem használnak böngésző-API-kat. Csak a markdown-export útvonalnak (`toMarkdown`, `toStored`) kell a böngésző.
|
|
79
|
-
|
|
80
|
-
## Védett tartalom
|
|
81
|
-
|
|
82
|
-
Egy kapus blokk (egy `gate: true` beállítású plugin, például egy csak támogatóknak szóló elválasztó) csak annyit tesz, hogy az előnézet megjelöli az utána következő blokkokat. Hogy a védett részt elzárd azoktól az olvasóktól, akik nem láthatják, vágd el a dokumentumot a szerveren, mielőtt az oldalhoz érne:
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
import type { StoredBlock } from '@atom-forge/brickee/model';
|
|
86
|
-
|
|
87
|
-
/** A dokumentum az első kapus blokkig, azt is beleértve, hozzáférés nélküli olvasóknak. */
|
|
88
|
-
export function publicPart(doc: StoredBlock[], gateTypes: string[], canRead: boolean): StoredBlock[] {
|
|
89
|
-
if (canRead) return doc;
|
|
90
|
-
const at = doc.findIndex((b) => gateTypes.includes(b.type));
|
|
91
|
-
return at < 0 ? doc : doc.slice(0, at + 1);
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Hívd meg a kapus pluginjaid típusaival (például `['paywall']`) és az olvasó hozzáférésével. A hozzáférés nélküli olvasók a kapus blokkig látják a tartalmat, az előzetesével együtt; a hozzáféréssel rendelkezők a teljes dokumentumot kapják, és az előnézet megjelöli számukra a védett részt.
|
package/docs/hu/upgrading.md
CHANGED
|
@@ -6,11 +6,41 @@ Ez a fejezet azokat a változásokat sorolja fel, amelyek teendőt igényelhetne
|
|
|
6
6
|
|
|
7
7
|
A tőled semmit nem igénylő változások – új exportok, javítások, dokumentációfrissítések – csak a változásnaplóban (`CHANGELOG.md`, a csomaggal együtt szállítva) szerepelnek.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
>
|
|
11
|
-
> Az `@atom-forge/brickee`-nek még nem volt olyan kiadása, amely változtatást igényelt volna az azt használó kódban. Az alábbi szakasz csak azoknak az alkalmazásoknak szól, amelyek már azelőtt használták a szerkesztőt, hogy ebből a csomagból lett volna.
|
|
9
|
+
## A 0.0.2-ről a 0.0.3-ra
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
### A szerkesztő `dist` mappájának Tailwind `@source`-nak kell lennie
|
|
12
|
+
|
|
13
|
+
A szerkesztő saját stílusai scoped CSS-ből Tailwind-osztályokba (az `@atom-forge/ui` téma színeivel) és SCSS-be kerültek. A Tailwind 4 nem néz bele a `node_modules`-ba, így a csomagra mutató `@source` nélkül a szerkesztő sorai, menüi, mezősávja és táblázata elveszítik a kinézetüket. Az előnézetet ez nem érinti: a stílusai továbbra is a jelölésével utaznak.
|
|
14
|
+
|
|
15
|
+
**Teendő:** abban a CSS-fájlban, ahol az `@atom-forge/ui`-t beállítod, vedd fel az `@source "../node_modules/@atom-forge/brickee/dist";` sort (az attól a fájltól vett útvonallal) az `@atom-forge/ui`-é mellé. A csak `Preview`-t mutató oldalakon nincs teendő.
|
|
16
|
+
|
|
17
|
+
### A kapus blokkok megszűntek
|
|
18
|
+
|
|
19
|
+
A tartalom védése (támogatói vagy fizetőfalas elválasztó) az alkalmazás fogalma, nem a szerkesztőé. Kikerült a `BlockPlugin.gate`, a `Preview` `markGated` propja, a „For supporters only” szakasza a `.supporters` és `.supporters-label` osztályokkal, valamint a magyar fordítás `For supporters only` szövege. A `Preview` mostantól minden kapott blokkot renderel. A `unique` marad.
|
|
20
|
+
|
|
21
|
+
**Teendő:** töröld a `gate: true`-t a pluginodból és a `markGated`-et az előnézeteidből. Az elválasztód közönséges (egyedi) pluginblokk marad, így a tárolt dokumentumok továbbra is betöltődnek. Ahol a védett részt megjelölve mutattad, rendereld a dokumentumot magad két részben – `const at = doc.findIndex((b) => b.type === 'divider')`, majd `doc.slice(0, at + 1)` és `doc.slice(at + 1)` két `<Preview>`-ban, a saját jelölésedben –, és a hozzáférés nélküli olvasóknak továbbra is vágd le a védett részt, mielőtt az oldalra kerül. Az általad mutatott feliratokhoz adj saját fordítást.
|
|
22
|
+
|
|
23
|
+
## A 0.0.1-ről a 0.0.2-re
|
|
24
|
+
|
|
25
|
+
### A képek és a média már nem részei a csomagnak
|
|
26
|
+
|
|
27
|
+
A csomag többé nem ismeri a kép fogalmát. Hogy egy blokk a kép URL-jét vagy egy azonosítót tárol, hogyan választja ki a felhasználó a képet, és hogyan lesz a tárolt értékből cím, azt az alkalmazás saját képpluginja dönti el (lásd [Képek](writing-plugins.md#képek)).
|
|
28
|
+
|
|
29
|
+
| Eltávolítva | Mi volt |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `kind: 'image'`, `kind: 'images'` | Mezőfajták, amelyek egy kiválasztott médiaelem azonosítóját (vagy azonosítóit) tárolták, a beépített képválasztó felugró ablakkal |
|
|
32
|
+
| Az `Editor` és a `Preview` `media` propja | A képek, amelyek közül a blokkok választhattak, és amelyekre hivatkozhattak |
|
|
33
|
+
| `provideMedia`, `useMedia`, `findMedia`, `MediaItem` | A média-kontextus, a keresője és a típusa |
|
|
34
|
+
| A `toMarkdown` `media` beállítása | A `toMarkdown(blocks, { plugins, media })` helyett most `toMarkdown(blocks, { plugins })` |
|
|
35
|
+
| `ctx.media` egy plugin `markdown(props, ctx)` függvényében | A `MarkdownContext` most `{ inner }` |
|
|
36
|
+
|
|
37
|
+
A `PropField['kind']` most `'text' | 'textarea' | 'color' | 'select' | 'slider'`. A tárolt dokumentumokat ez nem érinti: egy blokk propsa megtartja, amit tárolt, az azonosítókat is.
|
|
38
|
+
|
|
39
|
+
**Teendő:** a képpluginjaidban cseréld le az `image` és `images` mezőket saját kiválasztásra — egy gombra a plugin nézetében, amely megnyitja a médiaablakodat vagy egy feltöltést, és az eredményt a `props`-ba írja, vagy egy egyszerű `text` mezőre egy URL-hez —, és tartsd meg a prop-kulcsokat, hogy a tárolt dokumentumok továbbra is betöltődjenek. Töröld a `media` propot a szerkesztőidről és előnézeteidről, és a `media` beállítást a `toMarkdown`-hívásaidból. Ahol egy nézet, előnézet vagy `markdown` alak a `useMedia`, `findMedia` vagy `ctx.media` segítségével alakított címmé egy azonosítót, ott az alkalmazásod saját adatában keresd ki: az alkalmazásod egy moduljában, vagy egy saját Svelte-kontextusban, amelyet a szerkesztő és az előnézet fölött adsz meg (a `markdown` komponenseken kívül fut, ezért modulbeli adat kell neki). Ha továbbra is szükséged van rá, definiálj egy `MediaItem`-szerű típust az alkalmazásodban.
|
|
40
|
+
|
|
41
|
+
## A `block-editor` munkaterület-csomagról a 0.0.1-es változatra
|
|
42
|
+
|
|
43
|
+
Ez a szakasz csak azoknak az alkalmazásoknak szól, amelyek már azelőtt használták a szerkesztőt, hogy ebből a csomagból lett volna.
|
|
14
44
|
|
|
15
45
|
A szerkesztő `block-editor` néven, egy alkalmazáson belüli munkaterület-csomagként indult. Ugyanazzal a tárolt alakkal költözött ide `@atom-forge/brickee` néven, így az elmentett dokumentumokat nem kell átalakítani. Az import-azonosítók megváltoztak, a plugin-kit a pluginok belépési pontjából átkerült a magba, az oldalspecifikus pluginok pedig az alkalmazásnál maradtak.
|
|
16
46
|
|