Skip to content

Commit b23d97d

Browse files
committed
docs: the canvas is the primary rendering, external renderers are the optional second one
1 parent e109e7a commit b23d97d

36 files changed

Lines changed: 80 additions & 38 deletions

‎README.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ Select several objects with Shift-click or a lasso. Position and size changes ap
7878

7979
### 4. Print or export
8080

81-
The **ZPL** panel at the bottom shows the generated ZPL, **Copy** puts it on the clipboard. The canvas shows the label as you design it. **Preview** adds an alternative rendering from the connected printer (desktop) or, with consent, from the third-party service [Labelary](https://labelary.com/).
81+
The **ZPL** panel at the bottom shows the generated ZPL, **Copy** puts it on the clipboard. The canvas is ZPLab's rendering of the label. A second rendering comes from the preview renderer under **File → Settings… → App → Preview**: the connected printer (desktop) or, with consent, the third-party service [Labelary](https://labelary.com/). **Preview** shows it for comparison.
8282

8383
- **File → Export ZPL:** saves a `.zpl` file, or `.prn` where the save dialog offers file types
8484
- **File → Send to Zebra Printer:** opens the send dialog. It sends over the network, through the Zebra Browser Print agent in the browser, or through the system spooler or USB on desktop.
85-
- **File → Export PDF:** saves one PDF page per label page, rendered by the preview renderer. With the renderer off it holds the current page only. A batch PDF holds one page per data row.
86-
- **File → Print as Image (browser):** opens the rendered label, then the browser print dialog
85+
- **File → Export PDF:** saves one PDF page per label page, rendered by the preview renderer. With the renderer off, ZPLab captures the canvas, so the PDF holds the current page only. A batch PDF needs the renderer and holds one page per data row.
86+
- **File → Print as Image (browser):** renders the current page with the same renderer, then opens the browser print dialog
8787

8888
### 5. Save the design
8989

@@ -97,7 +97,7 @@ The **ZPL** panel highlights syntax and collapses long blocks of image data. Sel
9797

9898
The **command list** left of the code filters as you search. The **ZPL reference** on the right follows the cursor. Click a command to pin its details. The details also show the syntax, a parameter table and an example where the reference has them. A double-click or the right-click menu inserts the command at the cursor. A chevron folds each pane to a rail. Click the rail to bring it back.
9999

100-
While you edit, the canvas shows a live preview. Canvas editing and the **Properties** tab are disabled. Page switching stays enabled. The editor refuses source that is too large or has mismatched `^XA`/`^XZ` commands, and marks the mismatches. Click a mark to insert the missing command.
100+
While you edit, the canvas renders the source. Canvas editing and the **Properties** tab are disabled. Page switching stays enabled. The editor refuses source that is too large or has mismatched `^XA`/`^XZ` commands, and marks the mismatches. Click a mark to insert the missing command.
101101

102102
- **Apply** or leaving the panel commits your changes.
103103
- `Esc` or **Cancel** discards them.

‎src-tauri/packaging/linux/de.u8array.zplab.metainfo.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<li>Typed payloads for QR Code, Data Matrix and Aztec: URLs, Wi-Fi, contacts, email, phone, SMS and coordinates, plus GS1 Digital Links</li>
3535
<li>Batch printing: map label variables to CSV, Excel or database columns and print one label per row</li>
3636
<li>Printing over raw TCP, the system print queue, or USB</li>
37-
<li>Previews rendered through Labelary, or by the connected printer's own firmware</li>
37+
<li>An optional second rendering of the label, from Labelary or from the connected printer's own firmware, to compare against the canvas</li>
3838
<li>An MCP server that lets a local AI assistant read, build and validate labels, and edit the open design directly</li>
3939
<li>32 interface languages, light and dark theme</li>
4040
<li>MIT-licensed, with no account and no backend</li>

‎src/components/PrinterSettings/PreviewSettingsTab.test.tsx‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ describe("PreviewSettingsTab", () => {
2424
expect(useLabelStore.getState().previewProvider).toBe("none");
2525
expect(r.getByLabelText(loc.labelaryConsent)).toBeTruthy();
2626
expect(r.queryByText(loc.apiHeading)).toBeNull();
27+
expect(r.getByText(loc.labelaryIdleHint, { exact: false })).toBeTruthy();
28+
expect(r.queryByText(en.output.previewNoticeBody, { exact: false })).toBeNull();
29+
});
30+
31+
it("keeps the notice when a stored printer way falls back to Labelary on the web", () => {
32+
act(() => useLabelStore.setState({ previewProvider: "printer" }));
33+
const r = render(<PreviewSettingsTab />);
34+
expect(r.getByText(en.output.previewNoticeBody, { exact: false })).toBeTruthy();
35+
expect(r.queryByText(loc.labelaryIdleHint, { exact: false })).toBeNull();
2736
});
2837

2938
it("shows the stored choice and says a build without Labelary has no renderer", () => {

‎src/components/PrinterSettings/PreviewSettingsTab.tsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ export function PreviewSettingsTab() {
186186
<p className="text-[10px] text-muted leading-relaxed max-w-md">
187187
{publicHost ? (
188188
<>
189-
{t.output.previewNoticeBody}{" "}
189+
{/* The notice must stand wherever Labelary renders or is about to: a stored printer choice degrades to it on the web. */}
190+
{chosen === "labelary" || provider === "labelary" ? t.output.previewNoticeBody : loc.labelaryIdleHint}{" "}
190191
{/* The plans/retention link is about the public service; a
191192
custom endpoint is the operator's own, so omit it there. */}
192193
<a

‎src/locales/ar.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,11 +835,12 @@ const ar = {
835835
providerPrinterHint: 'تعرض الطابعة الملصق باستخدام برنامجها الثابت الخاص؛ لا يتم طباعة أي شيء.',
836836
providerPrinterDesktopOnly: 'يتطلب تطبيق سطح المكتب.',
837837
providerNone: 'إيقاف',
838-
providerNoneHint: 'لا توجد معاينة مُصيَّرة. تبقى اللوحة هي العرض الوحيد.',
838+
providerNoneHint: 'يُخفي المعاينة. يستخدم تصدير PDF والطباعة كصورة اللوحة.',
839839
providerInUseFmt: 'نشط حاليًا: {provider}',
840840
printerTargetHint: 'يتم ضبط الطابعة ضمن التطبيق، الطابعة.',
841841
privacyHeading: 'الخصوصية',
842842
labelaryConsent: 'معاينة Labelary',
843+
labelaryIdleHint: 'يُستخدم Labelary فقط عندما يكون العارض المحدد. تظل الموافقة سارية حتى تسحبها.',
843844
labelaryHint: 'يرسل ZPL الخاص بك إلى خادم Labelary المُهيَّأ للتصيير.',
844845
apiHeading: 'Labelary API',
845846
apiHost: 'عنوان URL للخادم',

‎src/locales/bg.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,11 +835,12 @@ const bg = {
835835
providerPrinterHint: 'Принтерът рендира етикета със собствения си фърмуер; нищо не се отпечатва.',
836836
providerPrinterDesktopOnly: 'Изисква настолното приложение.',
837837
providerNone: 'Изключено',
838-
providerNoneHint: 'Няма изобразена визуализация. Платното остава единственият изглед.',
838+
providerNoneHint: 'Скрива прегледа. Експортът на PDF и печатът като изображение използват платното.',
839839
providerInUseFmt: 'В момента активен: {provider}',
840840
printerTargetHint: 'Принтерът се задава под Приложение, Принтер.',
841841
privacyHeading: 'Поверителност',
842842
labelaryConsent: 'Labelary преглед',
843+
labelaryIdleHint: 'Labelary се използва само докато е избраният визуализатор. Съгласието остава валидно, докато не го оттеглите.',
843844
labelaryHint: 'Изпраща вашия ZPL до конфигурирания Labelary сървър за рендиране.',
844845
apiHeading: 'Labelary API',
845846
apiHost: 'URL на сървъра',

‎src/locales/cs.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,11 +835,12 @@ const cs = {
835835
providerPrinterHint: 'Tiskárna vykreslí štítek pomocí vlastního firmwaru; nic se netiskne.',
836836
providerPrinterDesktopOnly: 'Vyžaduje desktopovou aplikaci.',
837837
providerNone: 'Vypnuto',
838-
providerNoneHint: 'Žádný vykreslený náhled. Plátno zůstává jediným zobrazením.',
838+
providerNoneHint: 'Skryje náhled. Export PDF a tisk jako obrázek používají plátno.',
839839
providerInUseFmt: 'Aktuálně aktivní: {provider}',
840840
printerTargetHint: 'Tiskárna se nastavuje pod Aplikace, Tiskárna.',
841841
privacyHeading: 'Soukromí',
842842
labelaryConsent: 'Náhled Labelary',
843+
labelaryIdleHint: 'Labelary se používá pouze tehdy, když je vybraným vykreslovačem. Souhlas platí, dokud ho neodvoláte.',
843844
labelaryHint: 'Odesílá váš ZPL na nakonfigurovaný Labelary server pro vykreslení.',
844845
apiHeading: 'Labelary API',
845846
apiHost: 'URL serveru',

‎src/locales/da.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,11 +835,12 @@ const da = {
835835
providerPrinterHint: 'Printeren gengiver etiketten med sin egen firmware; der udskrives ikke noget.',
836836
providerPrinterDesktopOnly: 'Kræver desktopappen.',
837837
providerNone: 'Fra',
838-
providerNoneHint: 'Ingen gengivet forhåndsvisning. Lærredet forbliver den eneste visning.',
838+
providerNoneHint: 'Skjuler forhåndsvisningen. PDF-eksport og udskrift som billede bruger lærredet.',
839839
providerInUseFmt: 'Aktiv nu: {provider}',
840840
printerTargetHint: 'Printeren indstilles under App, Printer.',
841841
privacyHeading: 'Privatliv',
842842
labelaryConsent: 'Labelary-forhåndsvisning',
843+
labelaryIdleHint: 'Labelary bruges kun, når det er den valgte renderer. Samtykket gælder, indtil du tilbagekalder det.',
843844
labelaryHint: 'Sender dit ZPL til den konfigurerede Labelary-server til gengivelse.',
844845
apiHeading: 'Labelary API',
845846
apiHost: 'Server-URL',

‎src/locales/de.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,11 +835,12 @@ const de = {
835835
providerPrinterHint: 'Der Drucker rendert das Label mit seiner eigenen Firmware; es wird nichts gedruckt.',
836836
providerPrinterDesktopOnly: 'Nur in der Desktop-App verfügbar.',
837837
providerNone: 'Aus',
838-
providerNoneHint: 'Keine gerenderte Vorschau. Der Canvas bleibt die einzige Ansicht.',
838+
providerNoneHint: 'Blendet die Vorschau aus. PDF-Export und Bilddruck nutzen den Canvas.',
839839
providerInUseFmt: 'Gerade aktiv: {provider}',
840840
printerTargetHint: 'Der Drucker wird unter App, Drucker eingestellt.',
841841
privacyHeading: 'Datenschutz',
842842
labelaryConsent: 'Labelary-Vorschau',
843+
labelaryIdleHint: 'Labelary wird nur verwendet, während es als Renderer ausgewählt ist. Die Zustimmung bleibt gültig, bis du sie widerrufst.',
843844
labelaryHint: 'Sendet dein ZPL zum konfigurierten Labelary-Server zum Rendern.',
844845
apiHeading: 'Labelary API',
845846
apiHost: 'Server-URL',

‎src/locales/el.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,11 +835,12 @@ const el = {
835835
providerPrinterHint: 'Ο εκτυπωτής αποδίδει την ετικέτα με το δικό του firmware· δεν εκτυπώνεται τίποτα.',
836836
providerPrinterDesktopOnly: 'Απαιτεί την εφαρμογή υπολογιστή.',
837837
providerNone: 'Ανενεργό',
838-
providerNoneHint: 'Καμία αποδοσμένη προεπισκόπηση. Ο καμβάς παραμένει η μόνη προβολή.',
838+
providerNoneHint: 'Αποκρύπτει την προεπισκόπηση. Η εξαγωγή PDF και η εκτύπωση ως εικόνα χρησιμοποιούν τον καμβά.',
839839
providerInUseFmt: 'Ενεργό αυτήν τη στιγμή: {provider}',
840840
printerTargetHint: 'Ο εκτυπωτής ρυθμίζεται στην Εφαρμογή, Εκτυπωτής.',
841841
privacyHeading: 'Απόρρητο',
842842
labelaryConsent: 'Προεπισκόπηση Labelary',
843+
labelaryIdleHint: 'Το Labelary χρησιμοποιείται μόνο όσο είναι η επιλεγμένη μηχανή απόδοσης. Η συναίνεση παραμένει έγκυρη έως ότου την ανακαλέσετε.',
843844
labelaryHint: 'Στέλνει το ZPL σας στον διαμορφωμένο διακομιστή Labelary για απόδοση.',
844845
apiHeading: 'Labelary API',
845846
apiHost: 'URL διακομιστή',

0 commit comments

Comments
 (0)