From b526135aaf8a4f57670fc503fd254e15a7ed9a54 Mon Sep 17 00:00:00 2001 From: u8array Date: Sat, 3 Oct 2026 13:37:28 +0200 Subject: [PATCH] feat(reference): the command list folds away and the description keeps the pane, the Insert button goes --- README.md | 2 +- .../Output/ZPLOutput.catalog.test.tsx | 10 +- .../Output/ZplCatalogPanel.test.tsx | 56 +++-- src/components/Output/ZplCatalogPanel.tsx | 197 +++++++++--------- src/locales/ar.ts | 1 + src/locales/bg.ts | 1 + src/locales/cs.ts | 1 + src/locales/da.ts | 1 + src/locales/de.ts | 1 + src/locales/el.ts | 1 + src/locales/en.ts | 1 + src/locales/es.ts | 1 + src/locales/et.ts | 1 + src/locales/fa.ts | 1 + src/locales/fi.ts | 1 + src/locales/fr.ts | 1 + src/locales/he.ts | 1 + src/locales/hr.ts | 1 + src/locales/hu.ts | 1 + src/locales/it.ts | 1 + src/locales/ja.ts | 1 + src/locales/ko.ts | 1 + src/locales/lt.ts | 1 + src/locales/lv.ts | 1 + src/locales/nl.ts | 1 + src/locales/no.ts | 1 + src/locales/pl.ts | 1 + src/locales/pt.ts | 1 + src/locales/ro.ts | 1 + src/locales/sk.ts | 1 + src/locales/sl.ts | 1 + src/locales/sr.ts | 1 + src/locales/sv.ts | 1 + src/locales/tr.ts | 1 + src/locales/zh-hans.ts | 1 + src/locales/zh-hant.ts | 1 + 36 files changed, 180 insertions(+), 117 deletions(-) diff --git a/README.md b/README.md index 0c0048ae..bde9c7b5 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ The **ZPL** panel at the bottom shows the generated ZPL, **Copy** puts it on the The **ZPL** panel highlights syntax and collapses long blocks of image data. Selecting a canvas object marks its ZPL lines. A notice above the code lists commands that change saved printer settings or control the printer. -The **ZPL reference** beside the code follows the cursor. Search to filter the list, or click a command to pin its details. **Insert** adds the command at the cursor, or before the current page's `^XZ` when the cursor is not in the code. +The **ZPL reference** beside the code follows the cursor. Search to filter the list, or click a command to pin its details. A double-click or the right-click menu inserts the command at the cursor. The chevron in the heading folds the list. 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. diff --git a/src/components/Output/ZPLOutput.catalog.test.tsx b/src/components/Output/ZPLOutput.catalog.test.tsx index 2101349b..bfa621cb 100644 --- a/src/components/Output/ZPLOutput.catalog.test.tsx +++ b/src/components/Output/ZPLOutput.catalog.test.tsx @@ -80,8 +80,8 @@ describe("reference panel wiring", () => { const view = mount(); const pos = placePointerCaret(view, "^FO"); expect(detail().getByText("field origin")).toBeTruthy(); - // The detail shows the caret's own command, so that is what the button inserts, at the caret. - fireEvent.click(detail().getByRole("button", { name: /^Insert$/ })); + fireEvent.contextMenu(screen.getByRole("option", { name: /\^FO/ }), { clientX: 10, clientY: 10 }); + fireEvent.click(within(screen.getByRole("menu")).getByRole("button", { name: /^Insert$/ })); expect(view.state.doc.toString().slice(pos, pos + 6)).toBe("^FO^FO"); }); @@ -111,12 +111,12 @@ describe("reference panel wiring", () => { expect(detail().getByText("label length")).toBeTruthy(); }); - it("refuses pointer focus for rows and the Insert button while the editor holds it, never for search or prose", () => { + it("refuses pointer focus for rows and the list toggle while the editor holds it, never for search or prose", () => { const view = mount(); placePointerCaret(view, "hello"); // fireEvent returns false when a handler called preventDefault. Here that default is the focus move. expect(fireEvent.mouseDown(screen.getByRole("option", { name: /\^LL/ }))).toBe(false); - expect(fireEvent.mouseDown(detail().getByRole("button", { name: /^Insert$/ }))).toBe(false); + expect(fireEvent.mouseDown(screen.getByRole("button", { name: "Command list" }))).toBe(false); expect(fireEvent.mouseDown(screen.getByRole("searchbox"))).toBe(true); expect(fireEvent.mouseDown(detail().getByText("field data"))).toBe(true); }); @@ -124,7 +124,7 @@ describe("reference panel wiring", () => { it("takes pointer focus as before while the editor does not hold it, or no longer holds it", () => { const view = mount(); expect(fireEvent.mouseDown(screen.getByRole("option", { name: /\^LL/ }))).toBe(true); - expect(fireEvent.mouseDown(detail().getByRole("button", { name: /^Insert$/ }))).toBe(true); + expect(fireEvent.mouseDown(screen.getByRole("button", { name: "Command list" }))).toBe(true); placePointerCaret(view, "hello"); act(() => view.contentDOM.blur()); expect(fireEvent.mouseDown(screen.getByRole("option", { name: /\^LL/ }))).toBe(true); diff --git a/src/components/Output/ZplCatalogPanel.test.tsx b/src/components/Output/ZplCatalogPanel.test.tsx index 2c9beea2..285a4394 100644 --- a/src/components/Output/ZplCatalogPanel.test.tsx +++ b/src/components/Output/ZplCatalogPanel.test.tsx @@ -5,7 +5,10 @@ import { ZplCatalogPanel } from "./ZplCatalogPanel"; import { useCatalogSelection } from "../../hooks/useCatalogSelection"; import type { CursorCommand } from "../../lib/zplLanguage"; -afterEach(cleanup); +afterEach(() => { + cleanup(); + localStorage.removeItem("zpl:section:catalog-list"); +}); /** The panel over its own selection, as the source editor mounts it. */ function Panel({ cursor, onInsert }: { cursor: CursorCommand | null; onInsert?: (text: string) => void }) { @@ -15,13 +18,38 @@ function Panel({ cursor, onInsert }: { cursor: CursorCommand | null; onInsert?: describe("ZplCatalogPanel", () => { const detail = (getByTestId: (id: string) => HTMLElement) => within(getByTestId("catalog-detail")); - it("shows the command under the caret with its description and inserts it on request", () => { - const onInsert = vi.fn(); - const { getByTestId, getByRole } = render(); + it("shows the command under the caret with its description", () => { + const { getByTestId } = render(); expect(detail(getByTestId).getByText("label length")).toBeTruthy(); expect(getByTestId("catalog-detail").querySelector("p")?.textContent).toMatch(/\w+\.$/); - fireEvent.click(getByRole("button", { name: /^Insert$/ })); - expect(onInsert).toHaveBeenCalledWith("^LL"); + }); + + it("scrolls the list on an unfold and not on a fold", () => { + const scrolled = vi.fn(); + const original = Element.prototype.scrollIntoView; + Element.prototype.scrollIntoView = scrolled; + try { + const { getByRole } = render(); + scrolled.mockClear(); + fireEvent.click(getByRole("button", { name: "Command list" })); + expect(scrolled).not.toHaveBeenCalled(); + fireEvent.click(getByRole("button", { name: "Command list" })); + expect(scrolled).toHaveBeenCalledTimes(1); + } finally { + Element.prototype.scrollIntoView = original; + } + }); + + it("folds the command list away, keeps the description and remembers the fold", () => { + const first = render(); + fireEvent.click(first.getByRole("button", { name: "Command list" })); + expect(first.queryByRole("listbox")).toBeNull(); + expect(detail(first.getByTestId).getByText("label length")).toBeTruthy(); + first.unmount(); + const second = render(); + expect(second.queryByRole("listbox")).toBeNull(); + fireEvent.click(second.getByRole("button", { name: "Command list" })); + expect(second.getByRole("listbox")).toBeTruthy(); }); it("inserts on a double-click, whose first click pins the row", () => { @@ -61,12 +89,6 @@ describe("ZplCatalogPanel", () => { expect((within(getByRole("menu")).getByRole("button", { name: /^Insert$/ }) as HTMLButtonElement).disabled).toBe(true); }); - it("marks the insert button aria-disabled when inserting is unavailable", () => { - const { getByRole } = render(); - // Pins aria-disabled: a disabled button would drop its focus to body. - expect(getByRole("button", { name: /^Insert$/ }).getAttribute("aria-disabled")).toBe("true"); - }); - it("shows the three support levels in web, desktop, lint order", () => { const levelsOf = (id: string) => { const { getByTestId, unmount } = render(); @@ -83,7 +105,8 @@ describe("ZplCatalogPanel", () => { // ~HL shares the row with ^HL but is not the same thing on the printer. const onInsert = vi.fn(); const { getByRole } = render(); - fireEvent.click(getByRole("button", { name: /^Insert$/ })); + fireEvent.contextMenu(getByRole("option", { name: /\^HL/ }), { clientX: 10, clientY: 10 }); + fireEvent.click(within(getByRole("menu")).getByRole("button", { name: /^Insert$/ })); expect(onInsert).toHaveBeenCalledWith("~HL"); }); @@ -105,7 +128,7 @@ describe("ZplCatalogPanel", () => { it("dismisses on Escape without letting focus leave the panel", () => { const { getByRole, getByTestId } = render(); - const button = getByRole("button", { name: /^Insert$/ }); + const button = getByRole("button", { name: "Command list" }); button.focus(); fireEvent.keyDown(button, { key: "Escape" }); expect(detail(getByTestId).getByText(/Reference hidden/)).toBeTruthy(); @@ -207,13 +230,13 @@ describe("ZplCatalogPanel", () => { expect(detail(getByTestId).getByText(/Reference hidden/)).toBeTruthy(); }); - it("keeps the caret's spelling for Insert after ArrowDown out of the empty state", () => { + it("inserts the caret's spelling on Enter after ArrowDown out of the empty state", () => { const onInsert = vi.fn(); const { getByRole } = render(); const list = getByRole("listbox"); fireEvent.keyDown(list, { key: "Escape" }); fireEvent.keyDown(list, { key: "ArrowDown" }); - fireEvent.click(getByRole("button", { name: /^Insert$/ })); + fireEvent.keyDown(list, { key: "Enter" }); expect(onInsert).toHaveBeenCalledWith("~HL"); }); @@ -251,7 +274,6 @@ describe("ZplCatalogPanel", () => { const after = [getByTestId("catalog-detail").textContent, queryAllByRole("option", { selected: true }).length]; expect(after).toEqual(before); expect(detail(getByTestId).getByText("^ZQ is not in the reference.")).toBeTruthy(); - expect(getByRole("button", { name: /^Insert$/ }).getAttribute("aria-disabled")).toBe("true"); }); it("keeps a pin the search hides when there is nothing shown to step back from", () => { diff --git a/src/components/Output/ZplCatalogPanel.tsx b/src/components/Output/ZplCatalogPanel.tsx index a9aaaaf9..27891336 100644 --- a/src/components/Output/ZplCatalogPanel.tsx +++ b/src/components/Output/ZplCatalogPanel.tsx @@ -1,5 +1,6 @@ import { useEffect, useId, useRef, useState } from "react"; import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"; +import { ChevronDownIcon } from "@heroicons/react/16/solid"; import { CATALOG_SECTIONS, commandId, commandLabel, type CommandSupport, type SupportLevel } from "@zplab/core/catalog"; import { useT } from "../../hooks/useT"; import { useCatalogSummaries } from "../../hooks/useCatalogSummaries"; @@ -9,6 +10,8 @@ import type { Translations } from "../../locales"; import { inputCls } from "../Properties/styles"; import { ContextMenu, type MenuSection } from "../ui/ContextMenu"; import { useContextMenu } from "../../hooks/useContextMenu"; +import { useCollapsibleState } from "../ui/useCollapsibleState"; +import { Tooltip } from "../ui/Tooltip"; type OutputKey = keyof Translations["output"]; @@ -30,7 +33,7 @@ const LEVEL: Record = { const domId = (listId: string, key: string): string => `${listId}-${key.replace(/^\^/, "c").replace(/^~/, "t").replace(/[^A-Za-z0-9]/g, "_")}`; -/** One entry: the same insert the row's button and double-click already trigger. */ +/** One entry: the insert a double-click and Enter also run. */ function buildCatalogRowMenu(label: string, run: (() => void) | undefined): MenuSection[] { return [{ id: "row", items: [{ id: "insert", label, run, disabled: run === undefined }] }]; } @@ -50,6 +53,7 @@ export function ZplCatalogPanel({ const summaries = useCatalogSummaries(); const listId = useId(); const listRef = useRef(null); + const [listOpen, setListOpen] = useCollapsibleState("catalog-list", true); // State, not a ref: the menu's container is read during render. const [panelEl, setPanelEl] = useState(null); // A row chosen under the pointer is in view already, and scrolling would close the menu that opens with it. @@ -61,7 +65,6 @@ export function ZplCatalogPanel({ (g) => g.rows.length > 0, ); const empty = ids.length === 0; - const requestInsert = onInsert && shownId ? () => onInsert(insertTextFor(shownId)) : undefined; const emptyLine = emptyReason &&

{catalogEmptyText(emptyReason, t)}

; // Only the caret-driven lines are announced. The no-cursor line would be read on every step through plain text. const announced = emptyReason?.kind !== "noCursor"; @@ -83,8 +86,8 @@ export function ZplCatalogPanel({ if (!shownId || shownId === justChosen) return; const row = listRef.current?.querySelector(`#${CSS.escape(domId(listId, shownId))}`); row?.scrollIntoView?.({ block: "nearest" }); - // `query` re-runs this when a cleared filter re-mounts the active row. - }, [shownId, listId, query]); + // `query` and `listOpen` re-run this when a cleared filter or an unfold re-mounts the active row. + }, [shownId, listId, query, listOpen]); const onListKeyDown = (e: React.KeyboardEvent): void => { if (e.key === "ArrowDown" || e.key === "ArrowUp") { @@ -120,12 +123,29 @@ export function ZplCatalogPanel({ data-session-exit-ignore className="flex flex-col basis-2/5 min-w-[14rem] max-w-[52rem] shrink border-l border-border bg-surface text-xs @container outline-none" > -

- {t.output.catalogHeading} -

-
+
+

{t.output.catalogHeading}

+ + + +
+
@@ -150,94 +170,83 @@ export function ZplCatalogPanel({ {announced && emptyLine}
{!announced && emptyLine} -
- -
-
-
- + {listOpen && ( +
+
+ +
+ {empty &&

{t.output.catalogNoMatch}

} +
- {empty &&

{t.output.catalogNoMatch}

} - -
+ )}
{/* Mounted inside the panel: the session exit reads a pointerdown outside it as leaving the edit. */} {menu && } diff --git a/src/locales/ar.ts b/src/locales/ar.ts index 0d7a4ba5..bf3a4a35 100644 --- a/src/locales/ar.ts +++ b/src/locales/ar.ts @@ -1025,6 +1025,7 @@ const ar = { output: { zplHeading: 'ZPL', catalogHeading: 'مرجع ZPL', + catalogList: 'قائمة الأوامر', catalogSearch: 'بحث عن الأوامر', catalogInsert: 'إدراج', catalogWeb: 'الويب', diff --git a/src/locales/bg.ts b/src/locales/bg.ts index 8793c96c..c9d10a0e 100644 --- a/src/locales/bg.ts +++ b/src/locales/bg.ts @@ -1025,6 +1025,7 @@ const bg = { output: { zplHeading: 'ZPL', catalogHeading: 'Справка за ZPL', + catalogList: 'Списък с команди', catalogSearch: 'Търсене на команди', catalogInsert: 'Вмъкни', catalogWeb: 'Уеб', diff --git a/src/locales/cs.ts b/src/locales/cs.ts index c94a3595..a70a0db9 100644 --- a/src/locales/cs.ts +++ b/src/locales/cs.ts @@ -1025,6 +1025,7 @@ const cs = { output: { zplHeading: 'ZPL', catalogHeading: 'Reference ZPL', + catalogList: 'Seznam příkazů', catalogSearch: 'Hledat příkazy', catalogInsert: 'Vložit', catalogWeb: 'Web', diff --git a/src/locales/da.ts b/src/locales/da.ts index b6ede505..a3476259 100644 --- a/src/locales/da.ts +++ b/src/locales/da.ts @@ -1025,6 +1025,7 @@ const da = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-reference', + catalogList: 'Kommandoliste', catalogSearch: 'Søg i kommandoer', catalogInsert: 'Indsæt', catalogWeb: 'Web', diff --git a/src/locales/de.ts b/src/locales/de.ts index 43442a69..6e76fb0d 100644 --- a/src/locales/de.ts +++ b/src/locales/de.ts @@ -1062,6 +1062,7 @@ const de = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-Referenz', + catalogList: 'Befehlsliste', catalogSearch: 'Befehle durchsuchen', catalogInsert: 'Einfügen', catalogWeb: 'Web', diff --git a/src/locales/el.ts b/src/locales/el.ts index eb782932..a0fdbf27 100644 --- a/src/locales/el.ts +++ b/src/locales/el.ts @@ -1025,6 +1025,7 @@ const el = { output: { zplHeading: 'ZPL', catalogHeading: 'Αναφορά ZPL', + catalogList: 'Λίστα εντολών', catalogSearch: 'Αναζήτηση εντολών', catalogInsert: 'Εισαγωγή', catalogWeb: 'Ιστός', diff --git a/src/locales/en.ts b/src/locales/en.ts index 07c68dfa..5387c4da 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1062,6 +1062,7 @@ const en = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL reference', + catalogList: 'Command list', catalogSearch: 'Search commands', catalogInsert: 'Insert', catalogWeb: 'Web', diff --git a/src/locales/es.ts b/src/locales/es.ts index 5511ceb5..cf55d3f2 100644 --- a/src/locales/es.ts +++ b/src/locales/es.ts @@ -1025,6 +1025,7 @@ const es = { output: { zplHeading: 'ZPL', catalogHeading: 'Referencia de ZPL', + catalogList: 'Lista de comandos', catalogSearch: 'Buscar comandos', catalogInsert: 'Insertar', catalogWeb: 'Web', diff --git a/src/locales/et.ts b/src/locales/et.ts index 22f154e6..f6374fc2 100644 --- a/src/locales/et.ts +++ b/src/locales/et.ts @@ -1025,6 +1025,7 @@ const et = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-i teatmik', + catalogList: 'Käskude loend', catalogSearch: 'Otsi käske', catalogInsert: 'Lisa', catalogWeb: 'Veeb', diff --git a/src/locales/fa.ts b/src/locales/fa.ts index 1e5fa4e8..8693e061 100644 --- a/src/locales/fa.ts +++ b/src/locales/fa.ts @@ -1025,6 +1025,7 @@ const fa = { output: { zplHeading: 'ZPL', catalogHeading: 'مرجع ZPL', + catalogList: 'فهرست دستورها', catalogSearch: 'جستجوی دستورها', catalogInsert: 'درج', catalogWeb: 'وب', diff --git a/src/locales/fi.ts b/src/locales/fi.ts index ddb8e706..e64086ad 100644 --- a/src/locales/fi.ts +++ b/src/locales/fi.ts @@ -1025,6 +1025,7 @@ const fi = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-viiteopas', + catalogList: 'Komentolista', catalogSearch: 'Hae komentoja', catalogInsert: 'Lisää', catalogWeb: 'Web', diff --git a/src/locales/fr.ts b/src/locales/fr.ts index d5185a72..bf4e4e8d 100644 --- a/src/locales/fr.ts +++ b/src/locales/fr.ts @@ -1025,6 +1025,7 @@ const fr = { output: { zplHeading: 'ZPL', catalogHeading: 'Référence ZPL', + catalogList: 'Liste des commandes', catalogSearch: 'Rechercher des commandes', catalogInsert: 'Insérer', catalogWeb: 'Web', diff --git a/src/locales/he.ts b/src/locales/he.ts index b5fd3ff7..5afa5e70 100644 --- a/src/locales/he.ts +++ b/src/locales/he.ts @@ -1025,6 +1025,7 @@ const he = { output: { zplHeading: 'ZPL', catalogHeading: 'מדריך ZPL', + catalogList: 'רשימת פקודות', catalogSearch: 'חיפוש פקודות', catalogInsert: 'הוסף', catalogWeb: 'אינטרנט', diff --git a/src/locales/hr.ts b/src/locales/hr.ts index 2d4a4492..0cf3ae9b 100644 --- a/src/locales/hr.ts +++ b/src/locales/hr.ts @@ -1025,6 +1025,7 @@ const hr = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL referenca', + catalogList: 'Popis naredbi', catalogSearch: 'Pretraži naredbe', catalogInsert: 'Umetni', catalogWeb: 'Web', diff --git a/src/locales/hu.ts b/src/locales/hu.ts index b92c6639..00ce65dd 100644 --- a/src/locales/hu.ts +++ b/src/locales/hu.ts @@ -1025,6 +1025,7 @@ const hu = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-referencia', + catalogList: 'Parancslista', catalogSearch: 'Parancsok keresése', catalogInsert: 'Beszúrás', catalogWeb: 'Web', diff --git a/src/locales/it.ts b/src/locales/it.ts index 14597c9d..6563f9df 100644 --- a/src/locales/it.ts +++ b/src/locales/it.ts @@ -1025,6 +1025,7 @@ const it = { output: { zplHeading: 'ZPL', catalogHeading: 'Riferimento ZPL', + catalogList: 'Elenco comandi', catalogSearch: 'Cerca comandi', catalogInsert: 'Inserisci', catalogWeb: 'Web', diff --git a/src/locales/ja.ts b/src/locales/ja.ts index aaedcb96..d3765869 100644 --- a/src/locales/ja.ts +++ b/src/locales/ja.ts @@ -1025,6 +1025,7 @@ const ja = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPLリファレンス', + catalogList: 'コマンド一覧', catalogSearch: 'コマンドを検索', catalogInsert: '挿入', catalogWeb: 'Web', diff --git a/src/locales/ko.ts b/src/locales/ko.ts index 8dfee573..af5b2b4a 100644 --- a/src/locales/ko.ts +++ b/src/locales/ko.ts @@ -1025,6 +1025,7 @@ const ko = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL 참조', + catalogList: '명령어 목록', catalogSearch: '명령어 검색', catalogInsert: '삽입', catalogWeb: '웹', diff --git a/src/locales/lt.ts b/src/locales/lt.ts index 3a33bd71..c7d289af 100644 --- a/src/locales/lt.ts +++ b/src/locales/lt.ts @@ -1025,6 +1025,7 @@ const lt = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL žinynas', + catalogList: 'Komandų sąrašas', catalogSearch: 'Ieškoti komandų', catalogInsert: 'Įterpti', catalogWeb: 'Žiniatinklis', diff --git a/src/locales/lv.ts b/src/locales/lv.ts index 0f95188e..de7e233b 100644 --- a/src/locales/lv.ts +++ b/src/locales/lv.ts @@ -1025,6 +1025,7 @@ const lv = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL uzziņas', + catalogList: 'Komandu saraksts', catalogSearch: 'Meklēt komandas', catalogInsert: 'Ievietot', catalogWeb: 'Tīmeklis', diff --git a/src/locales/nl.ts b/src/locales/nl.ts index 55b21f51..b3da8e48 100644 --- a/src/locales/nl.ts +++ b/src/locales/nl.ts @@ -1025,6 +1025,7 @@ const nl = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-referentie', + catalogList: 'Opdrachtenlijst', catalogSearch: 'Opdrachten zoeken', catalogInsert: 'Invoegen', catalogWeb: 'Web', diff --git a/src/locales/no.ts b/src/locales/no.ts index 0604726a..04daa7fb 100644 --- a/src/locales/no.ts +++ b/src/locales/no.ts @@ -1025,6 +1025,7 @@ const no = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-referanse', + catalogList: 'Kommandoliste', catalogSearch: 'Søk i kommandoer', catalogInsert: 'Sett inn', catalogWeb: 'Web', diff --git a/src/locales/pl.ts b/src/locales/pl.ts index e2f0b11a..a788f834 100644 --- a/src/locales/pl.ts +++ b/src/locales/pl.ts @@ -1025,6 +1025,7 @@ const pl = { output: { zplHeading: 'ZPL', catalogHeading: 'Dokumentacja ZPL', + catalogList: 'Lista poleceń', catalogSearch: 'Szukaj poleceń', catalogInsert: 'Wstaw', catalogWeb: 'Web', diff --git a/src/locales/pt.ts b/src/locales/pt.ts index c1eb74c1..3bb48032 100644 --- a/src/locales/pt.ts +++ b/src/locales/pt.ts @@ -1025,6 +1025,7 @@ const pt = { output: { zplHeading: 'ZPL', catalogHeading: 'Referência ZPL', + catalogList: 'Lista de comandos', catalogSearch: 'Pesquisar comandos', catalogInsert: 'Inserir', catalogWeb: 'Web', diff --git a/src/locales/ro.ts b/src/locales/ro.ts index 10c5d366..cbb0f7a9 100644 --- a/src/locales/ro.ts +++ b/src/locales/ro.ts @@ -1025,6 +1025,7 @@ const ro = { output: { zplHeading: 'ZPL', catalogHeading: 'Referință ZPL', + catalogList: 'Lista de comenzi', catalogSearch: 'Căutare comenzi', catalogInsert: 'Inserați', catalogWeb: 'Web', diff --git a/src/locales/sk.ts b/src/locales/sk.ts index 3c716a8d..47e2995d 100644 --- a/src/locales/sk.ts +++ b/src/locales/sk.ts @@ -1025,6 +1025,7 @@ const sk = { output: { zplHeading: 'ZPL', catalogHeading: 'Referencia ZPL', + catalogList: 'Zoznam príkazov', catalogSearch: 'Hľadať príkazy', catalogInsert: 'Vložiť', catalogWeb: 'Web', diff --git a/src/locales/sl.ts b/src/locales/sl.ts index 8657e5b6..d9e8308d 100644 --- a/src/locales/sl.ts +++ b/src/locales/sl.ts @@ -1025,6 +1025,7 @@ const sl = { output: { zplHeading: 'ZPL', catalogHeading: 'Referenca ZPL', + catalogList: 'Seznam ukazov', catalogSearch: 'Iskanje ukazov', catalogInsert: 'Vstavi', catalogWeb: 'Splet', diff --git a/src/locales/sr.ts b/src/locales/sr.ts index 2ccae7fd..e7dfc6ce 100644 --- a/src/locales/sr.ts +++ b/src/locales/sr.ts @@ -1025,6 +1025,7 @@ const sr = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL referenca', + catalogList: 'Lista komandi', catalogSearch: 'Pretraga komandi', catalogInsert: 'Umetni', catalogWeb: 'Веб', diff --git a/src/locales/sv.ts b/src/locales/sv.ts index d93a2acf..4cb0d33f 100644 --- a/src/locales/sv.ts +++ b/src/locales/sv.ts @@ -1025,6 +1025,7 @@ const sv = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL-referens', + catalogList: 'Kommandolista', catalogSearch: 'Sök kommandon', catalogInsert: 'Infoga', catalogWeb: 'Webb', diff --git a/src/locales/tr.ts b/src/locales/tr.ts index e38b9f52..8255dd9e 100644 --- a/src/locales/tr.ts +++ b/src/locales/tr.ts @@ -1025,6 +1025,7 @@ const tr = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL referansı', + catalogList: 'Komut listesi', catalogSearch: 'Komut ara', catalogInsert: 'Ekle', catalogWeb: 'Web', diff --git a/src/locales/zh-hans.ts b/src/locales/zh-hans.ts index eb93b6d9..8eb15639 100644 --- a/src/locales/zh-hans.ts +++ b/src/locales/zh-hans.ts @@ -1025,6 +1025,7 @@ const zhHans = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL 参考', + catalogList: '命令列表', catalogSearch: '搜索命令', catalogInsert: '插入', catalogWeb: '网页', diff --git a/src/locales/zh-hant.ts b/src/locales/zh-hant.ts index de16a523..439b5f47 100644 --- a/src/locales/zh-hant.ts +++ b/src/locales/zh-hant.ts @@ -1025,6 +1025,7 @@ const zhHant = { output: { zplHeading: 'ZPL', catalogHeading: 'ZPL 參考', + catalogList: '命令清單', catalogSearch: '搜尋命令', catalogInsert: '插入', catalogWeb: '網頁',