@atom-forge/brickee 0.0.2 → 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 +40 -0
- package/README-AI.md +10 -7
- package/dist/Editor.svelte +691 -833
- package/dist/LinkPrompt.svelte +1 -14
- package/dist/Preview.svelte +27 -54
- package/dist/Preview.svelte.d.ts +2 -4
- package/dist/PropsBar.svelte +35 -219
- package/dist/code.js +1 -1
- 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 +2 -1
- package/dist/index.js +3 -2
- package/dist/kit/Empty.svelte +4 -15
- package/dist/kit/Frame.svelte +7 -37
- package/dist/locales/hu.js +4 -1
- package/dist/markdown.d.ts +20 -4
- 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 -256
- 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 +3 -1
- package/dist/types.d.ts +21 -3
- 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 +20 -14
- package/docs/en/editor-and-preview.md +6 -7
- package/docs/en/getting-started.md +8 -0
- package/docs/en/index.md +1 -1
- package/docs/en/recipes-and-pitfalls.md +2 -2
- package/docs/en/server-side.md +0 -17
- package/docs/en/upgrading.md +14 -0
- package/docs/en/writing-plugins.md +36 -10
- package/docs/hu/bundled-plugins.md +1 -1
- package/docs/hu/documents-and-markdown.md +20 -14
- package/docs/hu/editor-and-preview.md +6 -7
- package/docs/hu/getting-started.md +8 -0
- package/docs/hu/index.md +1 -1
- package/docs/hu/recipes-and-pitfalls.md +2 -2
- package/docs/hu/server-side.md +0 -17
- package/docs/hu/upgrading.md +14 -0
- package/docs/hu/writing-plugins.md +36 -10
- package/package.json +9 -1
|
@@ -6,11 +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
12
|
| `messages` | `Messages` | — | Felületi szövegek az alkalmazás nyelvén: angol szöveg → fordítás. |
|
|
13
|
-
| `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. |
|
|
14
14
|
| `placeholder` | `string` | `Write something, or press '/' for blocks…` | Az üres blokk tippszövege. |
|
|
15
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. |
|
|
16
16
|
|
|
@@ -23,7 +23,6 @@ Az üres dokumentum egyetlen üres bekezdésként jelenik meg, így a szerkeszt
|
|
|
23
23
|
| `blocks` | `StoredBlock[]` | — | A megjelenítendő dokumentum. |
|
|
24
24
|
| `plugins` | `BlockPlugin[]` | — | A pluginok, amelyek előnézetei a pluginblokkokat renderelik. |
|
|
25
25
|
| `messages` | `Messages` | — | Felületi szövegek az alkalmazás nyelvén. |
|
|
26
|
-
| `markGated` | `boolean` | `true` | Megjelöli a kapus blokk utáni blokkokat (lásd [Egyedi és kapus blokkok](writing-plugins.md#egyedi-és-kapus-blokkok)). |
|
|
27
26
|
| `nested` | `boolean` | `false` | A beágyazott blokkjaikat renderelő plugin-előnézetek állítják be. |
|
|
28
27
|
|
|
29
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.
|
|
@@ -72,10 +71,10 @@ A `PALETTE_ITEMS` a beépített blokkokat sorolja fel a címkéikkel, tippjeikke
|
|
|
72
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. |
|
|
73
72
|
| Behúzás | `Tab` / `Shift+Tab` (legfeljebb 6 szint). |
|
|
74
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. |
|
|
75
|
-
| 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. |
|
|
76
|
-
| Blokkok mozgatása | Húzd a fogantyút (beágyazott szerkesztőkbe be és onnan ki is),
|
|
77
|
-
| Átalakítás | Kattints egy blokk vagy egy kijelölés fogantyújára az „Átalakítás” menühöz. |
|
|
78
|
-
| 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. |
|
|
79
78
|
| Beillesztés | A többsoros szöveg markdownként értelmeződik, és blokkokká válik. |
|
|
80
79
|
| Visszavonás, újra | `Ctrl/Cmd+Z`, `Ctrl/Cmd+Shift+Z` vagy `Ctrl/Cmd+Y`. |
|
|
81
80
|
|
|
@@ -33,6 +33,14 @@ 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.
|
package/docs/hu/index.md
CHANGED
|
@@ -29,7 +29,7 @@ Maga a szerkesztő semmit sem tud az alkalmazásodról. Amire egy alkalmazásnak
|
|
|
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
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
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
|
|
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
|
|
|
@@ -82,7 +82,7 @@ import { fromMarkdown, toStored, type StoredBlock } from '@atom-forge/brickee';
|
|
|
82
82
|
export const fromText = (text: string): StoredBlock[] => fromMarkdown(text).map(toStored);
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
Egy bekezdés sorai egy blokk maradnak, köztük sortöréssel; üres sor új blokkot kezd.
|
|
86
86
|
|
|
87
87
|
## Fejlesztés helyi másolattal
|
|
88
88
|
|
|
@@ -104,6 +104,7 @@ Az alkalmazás a csomag lefordított `dist/` mappáját olvassa, ezért minden v
|
|
|
104
104
|
|
|
105
105
|
| Tünet | Ok | Megoldás |
|
|
106
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é. |
|
|
107
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. |
|
|
108
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. |
|
|
@@ -114,7 +115,6 @@ Az alkalmazás a csomag lefordított `dist/` mappáját olvassa, ezért minden v
|
|
|
114
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. |
|
|
115
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). |
|
|
116
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á. |
|
|
117
|
-
| 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. |
|
|
118
118
|
| `document is not defined` | A `toMarkdown` vagy a `toStored` SSR közben futott | Csak a böngészőben hívd őket. |
|
|
119
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. |
|
|
120
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,6 +6,20 @@ 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
|
+
## A 0.0.2-ről a 0.0.3-ra
|
|
10
|
+
|
|
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
|
+
|
|
9
23
|
## A 0.0.1-ről a 0.0.2-re
|
|
10
24
|
|
|
11
25
|
### A képek és a média már nem részei a csomagnak
|
|
@@ -21,7 +21,6 @@ Egy plugin egy `BlockPlugin` objektum és két Svelte-komponens: egy **nézet**
|
|
|
21
21
|
| `accepts` | `string[]` | Egy tároló blokk megengedett beágyazott blokkjai, palettaazonosítókként; az `'md:*'` az összes beépített blokk. Alapértelmezés: minden, amit az alkalmazás kínál. |
|
|
22
22
|
| `markdown` | `(props: P, ctx: MarkdownContext) => string` | A markdown alakja (opcionális). |
|
|
23
23
|
| `unique` | `boolean` | Dokumentumonként legfeljebb egy, csak a legfelső szinten. |
|
|
24
|
-
| `gate` | `boolean` | Az utána következő blokkok védettek; az előnézet megjelöli őket. |
|
|
25
24
|
|
|
26
25
|
A `P` a plugin props-típusa; `Record<string, unknown>`-t kiterjesztő interfészként deklaráld.
|
|
27
26
|
|
|
@@ -261,16 +260,9 @@ Hogyan működik a beágyazás:
|
|
|
261
260
|
- Blokkok tárolóba csomagolását az „Átalakítás” menüből, illetve egy tároló másikká alakítását csak akkor kínálja fel, ha a tároló minden bekerülő blokkot elfogad.
|
|
262
261
|
- A `blocksSchemaFor(plugins)` a szerveren ellenőrzi az `accepts`-et (lásd [A szerveren](server-side.md)).
|
|
263
262
|
|
|
264
|
-
## Egyedi
|
|
263
|
+
## Egyedi blokkok
|
|
265
264
|
|
|
266
|
-
|
|
267
|
-
- **`gate: true`** — az első legfelső szintű kapus blokk utáni blokkok védettek. A `Preview` egy „For supporters only” jelölésű, szaggatott vonallal elválasztott szakaszban rendereli őket; a `markGated={false}` kikapcsolja a jelölést. A beágyazott előnézetek soha nem osztódnak ketté.
|
|
268
|
-
|
|
269
|
-
Mindkettőre tipikus példa egy csak támogatóknak szóló elválasztó: dokumentumonként egy, mögötte a védett tartalommal.
|
|
270
|
-
|
|
271
|
-
> **A kapu csak jelöl**
|
|
272
|
-
>
|
|
273
|
-
> A `gate` semmit sem rejt el: az előnézet továbbra is minden blokkot renderel, és a tárolt dokumentum is mindet tartalmazza. Annak eldöntése, hogy ki olvashatja a védett részt — és hogy mindenki más elől kimaradjon az oldalról —, az alkalmazás feladata, a szerveren (lásd [Védett tartalom](server-side.md#védett-tartalom)). A `unique`-ot a séma sem kényszeríti ki.
|
|
265
|
+
**`unique: true`** — dokumentumonként legfeljebb egy, a legfelső szinten (például egy tartalomjegyzék). Amint a dokumentumban van egy, a plugin eltűnik a perjeles és az „Átalakítás” menüből, a beillesztett második példány a markdown alakjára esik vissza, és beágyazott szerkesztő soha nem kínálja. A séma nem kényszeríti ki.
|
|
274
266
|
|
|
275
267
|
## Markdown alak
|
|
276
268
|
|
|
@@ -284,6 +276,40 @@ A `markdown(props, { inner })` markdownként adja vissza a blokkot; ezt használ
|
|
|
284
276
|
| `mdJoin(...parts)` | Különálló blokkokként fűzi össze a részeket (köztük üres sorral), kihagyva az üreseket és a hamis értékűeket. |
|
|
285
277
|
| `mdQuote(md)` | Minden sor elé `> `-t tesz, idézetblokként renderelt dobozhoz. |
|
|
286
278
|
|
|
279
|
+
## Beillesztett táblázatok fogadása
|
|
280
|
+
|
|
281
|
+
Ha GFM-táblázatot tartalmazó markdownt illesztenek be a szerkesztőbe, vagy a `fromMarkdown(text, { plugins })` olvassa be, a táblázatot az első olyan plugin kapja, amelynek van `fromTable` függvénye. Megkapja a táblázatot, és visszaadja az új blokk propjait:
|
|
282
|
+
|
|
283
|
+
```ts
|
|
284
|
+
interface MarkdownTable {
|
|
285
|
+
rows: string[][]; // a cellák inline markdownként, soronként; az első sor a fejléc
|
|
286
|
+
align: ('left' | 'center' | 'right')[]; // oszloponként, az elválasztó sorból (:--, :-:, --:)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
fromTable?(table: MarkdownTable): P;
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
A beépített `table` pluginnak van ilyen (`fromTable: ({ rows, align }) => ({ rows, heads: ['top'], align })`), így egy olyan szerkesztőbe beillesztett táblázat, amely felkínálja, táblázat blokk lesz. Ilyen plugin nélkül a táblázat szöveg marad.
|
|
293
|
+
|
|
294
|
+
## Fájlok fogadása
|
|
295
|
+
|
|
296
|
+
Ha fájlokat illesztenek be a szerkesztőbe (egy kimásolt kép, egy képernyőkép), vagy az oldalon kívülről dobnak rá, a szerkesztő által felkínált pluginok közül az első, amelynek van `fromFiles` függvénye és propokat ad vissza, kap egy saját blokkot:
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
fromFiles?(files: File[]): P | null | Promise<P | null>;
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
`null`-lal a következő pluginra hagyja a fájlokat. A feltöltés és a tárolás a plugin dolga, ezért visszaadhat promise-t is – feltölt, majd a tárolt URL-lel vagy azonosítóval adja vissza a propokat. A beillesztett fájl a kurzort tartalmazó blokk után kerül (vagy egy üres blokk helyére), a bedobott oda, ahol a húzásjelző vonal mutatja.
|
|
303
|
+
|
|
304
|
+
```ts
|
|
305
|
+
fromFiles: async (files) => {
|
|
306
|
+
const file = files.find((f) => f.type.startsWith('image/'));
|
|
307
|
+
if (!file) return null;
|
|
308
|
+
const url = await uploadToMyStorage(file); // az alkalmazásod feltöltése
|
|
309
|
+
return { url, alt: file.name };
|
|
310
|
+
},
|
|
311
|
+
```
|
|
312
|
+
|
|
287
313
|
## Képek
|
|
288
314
|
|
|
289
315
|
A szerkesztő nem ismeri a kép fogalmát: nincs képmező, nincs képválasztó, nincs médialista. Hogy egy blokk a kép URL-jét vagy az alkalmazás saját médiatárában lévő kép azonosítóját tárolja, hogyan választja ki a felhasználó, és hogyan lesz a tárolt értékből cím, az az alkalmazás döntése, így a képblokk az alkalmazás egy közönséges pluginja.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atom-forge/brickee",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "Gergely Laborci",
|
|
6
6
|
"url": "https://github.com/laborci"
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"prepare": "svelte-kit sync || echo ''",
|
|
19
19
|
"prepack": "(svelte-kit sync || true) && svelte-package && publint",
|
|
20
20
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
21
|
+
"test": "vitest run",
|
|
21
22
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
22
23
|
"package": "svelte-package",
|
|
23
24
|
"prepublishOnly": "bun run prepack",
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
"ship": {
|
|
29
30
|
"verify": [
|
|
30
31
|
"bun run check",
|
|
32
|
+
"bun run test",
|
|
31
33
|
"bun run prepack",
|
|
32
34
|
"npm pack --dry-run --ignore-scripts"
|
|
33
35
|
]
|
|
@@ -94,12 +96,18 @@
|
|
|
94
96
|
"@tailwindcss/forms": "^0.5.11",
|
|
95
97
|
"@tailwindcss/typography": "^0.5.20",
|
|
96
98
|
"@tailwindcss/vite": "^4.3.5",
|
|
99
|
+
"happy-dom": "^21.0.4",
|
|
100
|
+
"pixelmatch": "^8.0.0",
|
|
101
|
+
"playwright-core": "^1.65.0",
|
|
102
|
+
"pngjs": "^7.0.0",
|
|
97
103
|
"publint": "^0.3.15",
|
|
104
|
+
"sass": "^1.108.2",
|
|
98
105
|
"svelte": "^5.57.1",
|
|
99
106
|
"svelte-check": "^4.4.2",
|
|
100
107
|
"tailwindcss": "^4.3.5",
|
|
101
108
|
"typescript": "^5.9.3",
|
|
102
109
|
"vite": "^7.3.1",
|
|
110
|
+
"vitest": "^5.1.0",
|
|
103
111
|
"zod": "^4.6.7"
|
|
104
112
|
},
|
|
105
113
|
"keywords": [
|