@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.2
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 +317 -0
- package/README.de.md +11 -7
- package/README.md +509 -126
- package/dist/cjs/client/api.d.ts +7 -6
- package/dist/cjs/client/api.js +2 -2
- package/dist/cjs/client/aufrufe.d.ts +29 -5
- package/dist/cjs/client/aufrufe.js +114 -2
- package/dist/cjs/client/auth.d.ts +2 -0
- package/dist/cjs/client/auth.js +17 -1
- package/dist/cjs/client/cashregisters.d.ts +1 -1
- package/dist/cjs/client/cashregisters.js +2 -2
- package/dist/cjs/client/errors.d.ts +94 -19
- package/dist/cjs/client/errors.js +132 -28
- package/dist/cjs/client/fehlercodes.d.ts +9 -0
- package/dist/cjs/client/fehlercodes.js +36 -0
- package/dist/cjs/client/index.d.ts +5 -5
- package/dist/cjs/client/index.js +11 -3
- package/dist/cjs/client/receipts.d.ts +131 -124
- package/dist/cjs/client/receipts.js +196 -137
- package/dist/cjs/client/reports.d.ts +26 -4
- package/dist/cjs/client/reports.js +37 -4
- package/dist/cjs/client/status.d.ts +3 -3
- package/dist/cjs/client/status.js +7 -7
- package/dist/cjs/client/transport.d.ts +56 -4
- package/dist/cjs/client/transport.js +234 -25
- package/dist/cjs/enums/vat-rate.d.ts +2 -2
- package/dist/cjs/enums/vat-rate.js +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +42 -13
- package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
- package/dist/cjs/{rechnung → invoice}/api.js +6 -6
- package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
- package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
- package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
- package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
- package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
- package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/cjs/invoice/fehler.d.ts +31 -0
- package/dist/cjs/invoice/fehler.js +39 -0
- package/dist/cjs/invoice/index.d.ts +21 -0
- package/dist/cjs/invoice/index.js +86 -0
- package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
- package/dist/cjs/invoice/texte.d.ts +224 -0
- package/dist/cjs/invoice/texte.js +425 -0
- package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
- package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
- package/dist/cjs/models/cancellation.d.ts +43 -24
- package/dist/cjs/models/cancellation.js +94 -46
- package/dist/cjs/models/hobex-receipt.d.ts +3 -3
- package/dist/cjs/models/hobex-receipt.js +35 -35
- package/dist/cjs/models/index.d.ts +6 -5
- package/dist/cjs/models/index.js +22 -2
- package/dist/cjs/models/payment-errors.d.ts +32 -15
- package/dist/cjs/models/payment-errors.js +80 -32
- package/dist/cjs/models/receipt-company.d.ts +6 -5
- package/dist/cjs/models/receipt-company.js +4 -4
- package/dist/cjs/models/receipt-email.d.ts +32 -18
- package/dist/cjs/models/receipt-email.js +69 -24
- package/dist/cjs/models/receipt-errors.d.ts +39 -0
- package/dist/cjs/models/receipt-errors.js +94 -0
- package/dist/cjs/models/receipt-item.d.ts +9 -1
- package/dist/cjs/models/receipt-item.js +3 -0
- package/dist/cjs/models/receipt-summary.d.ts +10 -4
- package/dist/cjs/models/receipt-summary.js +10 -4
- package/dist/cjs/models/receipt.d.ts +31 -2
- package/dist/cjs/models/receipt.js +12 -1
- package/dist/cjs/models/voucher.d.ts +7 -6
- package/dist/cjs/models/voucher.js +2 -7
- package/dist/cjs/partner/ablauf.d.ts +10 -10
- package/dist/cjs/partner/ablauf.js +29 -29
- package/dist/cjs/partner/api.d.ts +26 -23
- package/dist/cjs/partner/api.js +11 -13
- package/dist/cjs/partner/auth.d.ts +1 -1
- package/dist/cjs/partner/auth.js +2 -2
- package/dist/cjs/partner/betrieb.d.ts +7 -7
- package/dist/cjs/partner/betrieb.js +10 -10
- package/dist/cjs/partner/endpunkte.d.ts +27 -14
- package/dist/cjs/partner/endpunkte.js +80 -39
- package/dist/cjs/partner/fehler.d.ts +60 -30
- package/dist/cjs/partner/fehler.js +99 -43
- package/dist/cjs/partner/index.d.ts +13 -12
- package/dist/cjs/partner/index.js +35 -22
- package/dist/cjs/partner/secret.d.ts +3 -3
- package/dist/cjs/partner/secret.js +6 -6
- package/dist/cjs/partner/typen.d.ts +129 -71
- package/dist/cjs/partner/typen.js +76 -3
- package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
- package/dist/cjs/partner/webhook-signatur.js +12 -12
- package/dist/cjs/partner/webhooks.d.ts +60 -32
- package/dist/cjs/partner/webhooks.js +40 -34
- package/dist/cjs/payments/hobex.d.ts +11 -3
- package/dist/cjs/payments/hobex.js +17 -5
- package/dist/cjs/payments/stripe.d.ts +5 -2
- package/dist/cjs/payments/stripe.js +10 -5
- package/dist/cjs/pos/artikel.d.ts +90 -0
- package/dist/cjs/pos/artikel.js +89 -0
- package/dist/cjs/pos/client.d.ts +27 -0
- package/dist/cjs/pos/client.js +144 -0
- package/dist/cjs/pos/drucker.d.ts +86 -0
- package/dist/cjs/pos/drucker.js +78 -0
- package/dist/cjs/pos/errors.d.ts +36 -0
- package/dist/cjs/pos/errors.js +95 -0
- package/dist/cjs/pos/index.d.ts +15 -0
- package/dist/cjs/pos/index.js +102 -0
- package/dist/cjs/pos/settings.d.ts +313 -0
- package/dist/cjs/pos/settings.js +376 -0
- package/dist/cjs/pos/texte.d.ts +883 -0
- package/dist/cjs/pos/texte.js +489 -0
- package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/cjs/printing/escpos.d.ts +29 -29
- package/dist/cjs/printing/escpos.js +61 -61
- package/dist/cjs/printing/index.d.ts +2 -2
- package/dist/cjs/printing/index.js +17 -17
- package/dist/cjs/printing/qr-groesse.d.ts +38 -38
- package/dist/cjs/printing/qr-groesse.js +47 -47
- package/dist/cjs/printing/webusb.d.ts +2 -2
- package/dist/cjs/printing/webusb.js +4 -4
- package/dist/cjs/react/index.d.ts +21 -21
- package/dist/cjs/react/index.js +40 -30
- package/dist/cjs/receipt/bild.d.ts +4 -4
- package/dist/cjs/receipt/bild.js +11 -11
- package/dist/cjs/receipt/blatt.d.ts +46 -46
- package/dist/cjs/receipt/blatt.js +59 -59
- package/dist/cjs/receipt/discount.d.ts +1 -1
- package/dist/cjs/receipt/discount.js +8 -8
- package/dist/cjs/receipt/due.d.ts +86 -0
- package/dist/cjs/receipt/due.js +261 -0
- package/dist/cjs/receipt/epos.d.ts +22 -22
- package/dist/cjs/receipt/epos.js +45 -45
- package/dist/cjs/receipt/grid.d.ts +10 -10
- package/dist/cjs/receipt/grid.js +20 -20
- package/dist/cjs/receipt/index.d.ts +9 -8
- package/dist/cjs/receipt/index.js +26 -23
- package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
- package/dist/cjs/receipt/layout-escpos.js +49 -49
- package/dist/cjs/receipt/layout.d.ts +28 -23
- package/dist/cjs/receipt/layout.js +45 -21
- package/dist/cjs/receipt/marke-daten.d.ts +8 -8
- package/dist/cjs/receipt/marke-daten.js +8 -8
- package/dist/cjs/receipt/marke.d.ts +7 -7
- package/dist/cjs/receipt/marke.js +10 -10
- package/dist/cjs/register/errors.d.ts +61 -0
- package/dist/cjs/register/errors.js +112 -0
- package/dist/cjs/register/index.d.ts +14 -1
- package/dist/cjs/register/index.js +20 -1
- package/dist/cjs/register/pairing.d.ts +55 -36
- package/dist/cjs/register/pairing.js +33 -29
- package/dist/cjs/register/session.d.ts +5 -5
- package/dist/cjs/register/session.js +7 -7
- package/dist/cjs/stored/draht.d.ts +45 -0
- package/dist/cjs/stored/draht.js +220 -0
- package/dist/cjs/stored/einstellungen.d.ts +23 -0
- package/dist/cjs/stored/einstellungen.js +200 -0
- package/dist/cjs/stored/index.d.ts +109 -0
- package/dist/cjs/stored/index.js +225 -0
- package/dist/cjs/stored/vokabular.d.ts +18 -0
- package/dist/cjs/stored/vokabular.js +389 -0
- package/dist/cjs/version.d.ts +7 -0
- package/dist/cjs/version.js +10 -0
- package/dist/cjs/vienna-time.d.ts +1 -1
- package/dist/cjs/vienna-time.js +2 -2
- package/dist/esm/client/api.d.ts +7 -6
- package/dist/esm/client/api.js +4 -4
- package/dist/esm/client/aufrufe.d.ts +29 -5
- package/dist/esm/client/aufrufe.js +111 -1
- package/dist/esm/client/auth.d.ts +2 -0
- package/dist/esm/client/auth.js +16 -1
- package/dist/esm/client/cashregisters.d.ts +1 -1
- package/dist/esm/client/cashregisters.js +2 -2
- package/dist/esm/client/errors.d.ts +94 -19
- package/dist/esm/client/errors.js +129 -27
- package/dist/esm/client/fehlercodes.d.ts +9 -0
- package/dist/esm/client/fehlercodes.js +32 -0
- package/dist/esm/client/index.d.ts +5 -5
- package/dist/esm/client/index.js +5 -5
- package/dist/esm/client/receipts.d.ts +131 -124
- package/dist/esm/client/receipts.js +195 -140
- package/dist/esm/client/reports.d.ts +26 -4
- package/dist/esm/client/reports.js +36 -4
- package/dist/esm/client/status.d.ts +3 -3
- package/dist/esm/client/status.js +7 -7
- package/dist/esm/client/transport.d.ts +56 -4
- package/dist/esm/client/transport.js +233 -24
- package/dist/esm/enums/vat-rate.d.ts +2 -2
- package/dist/esm/enums/vat-rate.js +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
- package/dist/esm/{rechnung → invoice}/api.js +6 -6
- package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
- package/dist/esm/{rechnung → invoice}/auth.js +4 -4
- package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
- package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
- package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
- package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/esm/invoice/fehler.d.ts +31 -0
- package/dist/esm/invoice/fehler.js +33 -0
- package/dist/esm/invoice/index.d.ts +21 -0
- package/dist/esm/invoice/index.js +20 -0
- package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/esm/{rechnung → invoice}/summen.js +12 -12
- package/dist/esm/invoice/texte.d.ts +224 -0
- package/dist/esm/invoice/texte.js +421 -0
- package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
- package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
- package/dist/esm/models/cancellation.d.ts +43 -24
- package/dist/esm/models/cancellation.js +90 -45
- package/dist/esm/models/hobex-receipt.d.ts +3 -3
- package/dist/esm/models/hobex-receipt.js +35 -35
- package/dist/esm/models/index.d.ts +6 -5
- package/dist/esm/models/index.js +6 -5
- package/dist/esm/models/payment-errors.d.ts +32 -15
- package/dist/esm/models/payment-errors.js +77 -32
- package/dist/esm/models/receipt-company.d.ts +6 -5
- package/dist/esm/models/receipt-company.js +4 -4
- package/dist/esm/models/receipt-email.d.ts +32 -18
- package/dist/esm/models/receipt-email.js +65 -23
- package/dist/esm/models/receipt-errors.d.ts +39 -0
- package/dist/esm/models/receipt-errors.js +87 -0
- package/dist/esm/models/receipt-item.d.ts +9 -1
- package/dist/esm/models/receipt-item.js +3 -0
- package/dist/esm/models/receipt-summary.d.ts +10 -4
- package/dist/esm/models/receipt-summary.js +9 -3
- package/dist/esm/models/receipt.d.ts +31 -2
- package/dist/esm/models/receipt.js +12 -2
- package/dist/esm/models/voucher.d.ts +7 -6
- package/dist/esm/models/voucher.js +2 -7
- package/dist/esm/partner/ablauf.d.ts +10 -10
- package/dist/esm/partner/ablauf.js +27 -27
- package/dist/esm/partner/api.d.ts +26 -23
- package/dist/esm/partner/api.js +13 -15
- package/dist/esm/partner/auth.d.ts +1 -1
- package/dist/esm/partner/auth.js +2 -2
- package/dist/esm/partner/betrieb.d.ts +7 -7
- package/dist/esm/partner/betrieb.js +8 -8
- package/dist/esm/partner/endpunkte.d.ts +27 -14
- package/dist/esm/partner/endpunkte.js +79 -39
- package/dist/esm/partner/fehler.d.ts +60 -30
- package/dist/esm/partner/fehler.js +91 -35
- package/dist/esm/partner/index.d.ts +13 -12
- package/dist/esm/partner/index.js +12 -11
- package/dist/esm/partner/secret.d.ts +3 -3
- package/dist/esm/partner/secret.js +5 -5
- package/dist/esm/partner/typen.d.ts +129 -71
- package/dist/esm/partner/typen.js +75 -2
- package/dist/esm/partner/webhook-signatur.d.ts +2 -2
- package/dist/esm/partner/webhook-signatur.js +12 -12
- package/dist/esm/partner/webhooks.d.ts +60 -32
- package/dist/esm/partner/webhooks.js +38 -32
- package/dist/esm/payments/hobex.d.ts +11 -3
- package/dist/esm/payments/hobex.js +18 -6
- package/dist/esm/payments/stripe.d.ts +5 -2
- package/dist/esm/payments/stripe.js +11 -6
- package/dist/esm/pos/artikel.d.ts +90 -0
- package/dist/esm/pos/artikel.js +79 -0
- package/dist/esm/pos/client.d.ts +27 -0
- package/dist/esm/pos/client.js +137 -0
- package/dist/esm/pos/drucker.d.ts +86 -0
- package/dist/esm/pos/drucker.js +71 -0
- package/dist/esm/pos/errors.d.ts +36 -0
- package/dist/esm/pos/errors.js +88 -0
- package/dist/esm/pos/index.d.ts +15 -0
- package/dist/esm/pos/index.js +20 -0
- package/dist/esm/pos/settings.d.ts +313 -0
- package/dist/esm/pos/settings.js +367 -0
- package/dist/esm/pos/texte.d.ts +883 -0
- package/dist/esm/pos/texte.js +481 -0
- package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/esm/printing/escpos.d.ts +29 -29
- package/dist/esm/printing/escpos.js +56 -56
- package/dist/esm/printing/index.d.ts +2 -2
- package/dist/esm/printing/index.js +2 -2
- package/dist/esm/printing/qr-groesse.d.ts +38 -38
- package/dist/esm/printing/qr-groesse.js +42 -42
- package/dist/esm/printing/webusb.d.ts +2 -2
- package/dist/esm/printing/webusb.js +4 -4
- package/dist/esm/react/index.d.ts +21 -21
- package/dist/esm/react/index.js +39 -29
- package/dist/esm/receipt/bild.d.ts +4 -4
- package/dist/esm/receipt/bild.js +11 -11
- package/dist/esm/receipt/blatt.d.ts +46 -46
- package/dist/esm/receipt/blatt.js +55 -55
- package/dist/esm/receipt/discount.d.ts +1 -1
- package/dist/esm/receipt/discount.js +7 -7
- package/dist/esm/receipt/due.d.ts +86 -0
- package/dist/esm/receipt/due.js +257 -0
- package/dist/esm/receipt/epos.d.ts +22 -22
- package/dist/esm/receipt/epos.js +47 -47
- package/dist/esm/receipt/grid.d.ts +10 -10
- package/dist/esm/receipt/grid.js +18 -18
- package/dist/esm/receipt/index.d.ts +9 -8
- package/dist/esm/receipt/index.js +9 -8
- package/dist/esm/receipt/layout-escpos.d.ts +24 -24
- package/dist/esm/receipt/layout-escpos.js +51 -51
- package/dist/esm/receipt/layout.d.ts +28 -23
- package/dist/esm/receipt/layout.js +44 -20
- package/dist/esm/receipt/marke-daten.d.ts +8 -8
- package/dist/esm/receipt/marke-daten.js +7 -7
- package/dist/esm/receipt/marke.d.ts +7 -7
- package/dist/esm/receipt/marke.js +10 -10
- package/dist/esm/register/errors.d.ts +61 -0
- package/dist/esm/register/errors.js +104 -0
- package/dist/esm/register/index.d.ts +14 -1
- package/dist/esm/register/index.js +13 -0
- package/dist/esm/register/pairing.d.ts +55 -36
- package/dist/esm/register/pairing.js +33 -29
- package/dist/esm/register/session.d.ts +5 -5
- package/dist/esm/register/session.js +7 -7
- package/dist/esm/stored/draht.d.ts +45 -0
- package/dist/esm/stored/draht.js +208 -0
- package/dist/esm/stored/einstellungen.d.ts +23 -0
- package/dist/esm/stored/einstellungen.js +196 -0
- package/dist/esm/stored/index.d.ts +109 -0
- package/dist/esm/stored/index.js +217 -0
- package/dist/esm/stored/vokabular.d.ts +18 -0
- package/dist/esm/stored/vokabular.js +386 -0
- package/dist/esm/version.d.ts +7 -0
- package/dist/esm/version.js +7 -0
- package/dist/esm/vienna-time.d.ts +1 -1
- package/dist/esm/vienna-time.js +2 -2
- package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
- package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
- package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
- package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-full.sheet32.json +218 -0
- package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
- package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
- package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
- package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
- package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
- package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
- package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
- package/fixtures/expected/card-custom.sheet32.json +158 -0
- package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
- package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
- package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
- package/fixtures/expected/card-gptom.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
- package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
- package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
- package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
- package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
- package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
- package/fixtures/expected/card-mypos.sheet32.json +254 -0
- package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
- package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
- package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
- package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
- package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
- package/fixtures/expected/card-stripe.sheet32.json +212 -0
- package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
- package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
- package/fixtures/expected/card-sumup.sheet32.json +218 -0
- package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
- package/fixtures/expected/discount-lines.sheet32.json +200 -0
- package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
- package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
- package/fixtures/expected/discount-simple.sheet32.json +182 -0
- package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
- package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
- package/fixtures/expected/discount-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
- package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
- package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
- package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
- package/fixtures/expected/long-item-name.sheet32.json +176 -0
- package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
- package/fixtures/expected/sale-card.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
- package/fixtures/expected/sale-cash.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
- package/fixtures/expected/sale-small-business.sheet32.json +182 -0
- package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
- package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
- package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
- package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
- package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
- package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
- package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
- package/fixtures/expected/split-cash-change.sheet32.json +194 -0
- package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
- package/fixtures/expected/split-long-amount.sheet32.json +266 -0
- package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
- package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
- package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
- package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
- package/fixtures/expected/split-tip-card.sheet32.json +272 -0
- package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
- package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
- package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
- package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
- package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
- package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
- package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet → expected}/training.lines.json +2 -2
- package/fixtures/expected/training.sheet32.json +236 -0
- package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
- package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
- package/fixtures/expected/zero-annual.sheet32.json +212 -0
- package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
- package/fixtures/expected/zero-final.sheet32.json +206 -0
- package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
- package/fixtures/expected/zero-manual.sheet32.json +206 -0
- package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
- package/fixtures/expected/zero-monthly.sheet32.json +206 -0
- package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
- package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
- package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
- package/fixtures/expected/zero-start.sheet32.json +206 -0
- package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
- package/fixtures/hobex-hps-codes.json +12 -12
- package/fixtures/invoice-api-examples/brands-ok.json +8 -0
- package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
- package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
- package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
- package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
- package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
- package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
- package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
- package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
- package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
- package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
- package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
- package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
- package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
- package/fixtures/invoice-texts.json +464 -0
- package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
- package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
- package/fixtures/manifest.json +252 -252
- package/fixtures/pos-message-cases.json +32 -0
- package/fixtures/pos-settings-defaults.json +149 -0
- package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
- package/fixtures/receipt-due-generated.json +1218 -0
- package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
- package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
- package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
- package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
- package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
- package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
- package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
- package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
- package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
- package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
- package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
- package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
- package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
- package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
- package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
- package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
- package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
- package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
- package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
- package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
- package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
- package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
- package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
- package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
- package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
- package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
- package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
- package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
- package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
- package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
- package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
- package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
- package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
- package/fixtures/{belege → receipts}/training.json +2 -2
- package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
- package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
- package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
- package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
- package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
- package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
- package/fixtures/renames-1.0.json +1490 -0
- package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
- package/fixtures/surface.json +877 -0
- package/fixtures/v3/README.md +125 -0
- package/fixtures/v3/antworten/belege.json +4738 -0
- package/fixtures/v3/antworten/belegmail.json +154 -0
- package/fixtures/v3/antworten/kasse-belege.json +4304 -0
- package/fixtures/v3/antworten/kasse.json +12716 -0
- package/fixtures/v3/antworten/rechnungen.json +1712 -0
- package/fixtures/v3/antworten/storno.json +737 -0
- package/fixtures/v3/stored/belege.json +502 -0
- package/fixtures/v3/stored/kasse.json +3461 -0
- package/fixtures/v3/stored/rechnungen.json +750 -0
- package/fixtures/v3/v3-vokabular.json +3375 -0
- package/fixtures/v3/zahlbetrag-faelle.json +794 -0
- package/package.json +32 -18
- package/dist/cjs/kasse/artikel.d.ts +0 -83
- package/dist/cjs/kasse/artikel.js +0 -79
- package/dist/cjs/kasse/client.d.ts +0 -10
- package/dist/cjs/kasse/client.js +0 -38
- package/dist/cjs/kasse/drucker.d.ts +0 -59
- package/dist/cjs/kasse/drucker.js +0 -50
- package/dist/cjs/kasse/index.d.ts +0 -13
- package/dist/cjs/kasse/index.js +0 -83
- package/dist/cjs/kasse/settings.d.ts +0 -229
- package/dist/cjs/kasse/settings.js +0 -172
- package/dist/cjs/kasse/texte.d.ts +0 -868
- package/dist/cjs/kasse/texte.js +0 -474
- package/dist/cjs/rechnung/fehler.d.ts +0 -21
- package/dist/cjs/rechnung/fehler.js +0 -44
- package/dist/cjs/rechnung/index.d.ts +0 -21
- package/dist/cjs/rechnung/index.js +0 -82
- package/dist/cjs/rechnung/texte.d.ts +0 -222
- package/dist/cjs/rechnung/texte.js +0 -425
- package/dist/esm/kasse/artikel.d.ts +0 -83
- package/dist/esm/kasse/artikel.js +0 -70
- package/dist/esm/kasse/client.d.ts +0 -10
- package/dist/esm/kasse/client.js +0 -33
- package/dist/esm/kasse/drucker.d.ts +0 -59
- package/dist/esm/kasse/drucker.js +0 -45
- package/dist/esm/kasse/index.d.ts +0 -13
- package/dist/esm/kasse/index.js +0 -18
- package/dist/esm/kasse/settings.d.ts +0 -229
- package/dist/esm/kasse/settings.js +0 -168
- package/dist/esm/kasse/texte.d.ts +0 -868
- package/dist/esm/kasse/texte.js +0 -466
- package/dist/esm/rechnung/fehler.d.ts +0 -21
- package/dist/esm/rechnung/fehler.js +0 -39
- package/dist/esm/rechnung/index.d.ts +0 -21
- package/dist/esm/rechnung/index.js +0 -20
- package/dist/esm/rechnung/texte.d.ts +0 -222
- package/dist/esm/rechnung/texte.js +0 -421
- package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
- package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
- package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
- package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
- package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
- package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
- package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
- package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
- package/fixtures/erwartet/null-monat.blatt32.json +0 -206
- package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
- package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
- package/fixtures/erwartet/null-start.blatt32.json +0 -206
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
- package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
- package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
- package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
- package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
- package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
- package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
- package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
- package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
- package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
- package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
- package/fixtures/erwartet/training.blatt32.json +0 -236
- package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
- package/fixtures/kasse-meldungen-faelle.json +0 -32
- package/fixtures/oberflaeche.json +0 -558
- package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
- package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
- package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
- package/fixtures/rechnung-texte.json +0 -464
- /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
- /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
- /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
- /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/** Groesste Modulgroesse in Druckpunkten, die der jeweilige Deckel zulaesst. */
|
|
2
|
-
export const
|
|
2
|
+
export const QR_MODULE_SIZE_CAP = {
|
|
3
3
|
auto: 6,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
small: 4,
|
|
5
|
+
medium: 6,
|
|
6
|
+
large: 8,
|
|
7
7
|
};
|
|
8
8
|
// --------------------------------------------------------------- Konstanten
|
|
9
9
|
/** Ruhezone je Seite, in Modulen (QR-Norm). */
|
|
10
|
-
export const
|
|
10
|
+
export const QR_QUIET_ZONE_MODULES = 4;
|
|
11
11
|
/** Untergrenze: 4 Punkte sind bei 203 dpi rund 0,5 mm je Modul. */
|
|
12
|
-
export const
|
|
13
|
-
/** Ausnahme, wenn `
|
|
14
|
-
export const
|
|
12
|
+
export const QR_MIN_MODULE_DOTS = 4;
|
|
13
|
+
/** Ausnahme, wenn `QR_MIN_MODULE_DOTS` nicht passt – gemeldet, nicht still. */
|
|
14
|
+
export const QR_EXCEPTION_MODULE_DOTS = 3;
|
|
15
15
|
/** Obergrenze des Druckbefehls in diesem Stack (`GS ( k` Funktion 167: 1..8). */
|
|
16
|
-
export const
|
|
16
|
+
export const QR_MAX_MODULE_DOTS = 8;
|
|
17
17
|
/**
|
|
18
18
|
* Druckbreite des Kopfes in Punkten (203 dpi): 58 mm = 384, 80 mm = 576 —
|
|
19
19
|
* Zwilling von `KeckPaperSize.druckPunkte`.
|
|
@@ -24,7 +24,7 @@ export const QR_HOECHST_PUNKTE = 8;
|
|
|
24
24
|
* die echte Kopfbreite — ein QR, der auch nur einen Punkt zu breit ist, wird
|
|
25
25
|
* von den meisten Geraeten gar nicht gedruckt.
|
|
26
26
|
*/
|
|
27
|
-
export const
|
|
27
|
+
export const QR_PRINT_WIDTH_DOTS = { mm58: 384, mm80: 576 };
|
|
28
28
|
/**
|
|
29
29
|
* Nutzlast in Byte, die eine QR-Version 1..40 bei Fehlerkorrektur **M** im
|
|
30
30
|
* Byte-Modus aufnimmt (ISO/IEC 18004, Tabelle 7).
|
|
@@ -41,7 +41,7 @@ const BYTE_KAPAZITAET_M = [
|
|
|
41
41
|
];
|
|
42
42
|
// ------------------------------------------------------------- oeffentlich
|
|
43
43
|
/**
|
|
44
|
-
* Modulanzahl, die `
|
|
44
|
+
* Modulanzahl, die `payload` bei Fehlerkorrektur **M** braucht.
|
|
45
45
|
*
|
|
46
46
|
* Alle Druckwege setzen den QR mit Fehlerkorrektur **M** (nativer
|
|
47
47
|
* ESC/POS-Befehl, ePOS `level_m`; das Raster fuer den Bildweg rechnet der
|
|
@@ -56,8 +56,8 @@ const BYTE_KAPAZITAET_M = [
|
|
|
56
56
|
* langem Inhalt. Ein still zurueckgegebenes "passt nicht" haette den
|
|
57
57
|
* Datenfehler als Papierfehler getarnt.
|
|
58
58
|
*/
|
|
59
|
-
export function
|
|
60
|
-
const laenge = new TextEncoder().encode(
|
|
59
|
+
export function qrModuleCount(payload) {
|
|
60
|
+
const laenge = new TextEncoder().encode(payload).length;
|
|
61
61
|
for (let i = 0; i < BYTE_KAPAZITAET_M.length; i++) {
|
|
62
62
|
if (laenge <= BYTE_KAPAZITAET_M[i])
|
|
63
63
|
return 17 + 4 * (i + 1);
|
|
@@ -65,69 +65,69 @@ export function qrModulAnzahl(nutzlast) {
|
|
|
65
65
|
throw new Error('QR-Inhalt ist zu lang');
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
|
-
* Ob `
|
|
69
|
-
* dieselbe Tabelle wie `
|
|
68
|
+
* Ob `payload` in irgendeine QR-Version 1..40 bei Fehlerkorrektur M passt --
|
|
69
|
+
* dieselbe Tabelle wie `qrModuleCount`, aber ohne zu werfen.
|
|
70
70
|
*
|
|
71
71
|
* Fuer Aufrufer, denen ein zu langer Inhalt kein Programmierfehler ist,
|
|
72
72
|
* sondern ein Datenfehler, den sie selbst behandeln (das Beleg-Blatt: ohne
|
|
73
73
|
* QR weiterbauen statt den ganzen Zeichner mitzureissen).
|
|
74
74
|
*/
|
|
75
|
-
export function
|
|
76
|
-
const laenge = new TextEncoder().encode(
|
|
75
|
+
export function qrFitsInVersion(payload) {
|
|
76
|
+
const laenge = new TextEncoder().encode(payload).length;
|
|
77
77
|
return laenge <= BYTE_KAPAZITAET_M[BYTE_KAPAZITAET_M.length - 1];
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
|
-
* Groesste Modulgroesse, mit der `
|
|
81
|
-
* `
|
|
80
|
+
* Groesste Modulgroesse, mit der `moduleCount` Module **samt Ruhezone** in
|
|
81
|
+
* `paperWidthDots` passen, gedeckelt durch `moduleSize`.
|
|
82
82
|
*
|
|
83
83
|
* Wirft bei sinnlosen Eingaben: eine Papierbreite von 0 oder ein Symbol ohne
|
|
84
84
|
* Module ist ein Programmierfehler, und ein still zurueckgegebenes "passt
|
|
85
85
|
* nicht" haette ihn als Druckerproblem getarnt.
|
|
86
86
|
*/
|
|
87
|
-
export function
|
|
88
|
-
const { papierbreitePunkte, moduleAnzahl } = options;
|
|
89
|
-
const groesse = options.
|
|
87
|
+
export function computeQrSizing(options) {
|
|
88
|
+
const { paperWidthDots: papierbreitePunkte, moduleCount: moduleAnzahl } = options;
|
|
89
|
+
const groesse = options.moduleSize ?? 'auto';
|
|
90
90
|
if (!Number.isInteger(papierbreitePunkte) || papierbreitePunkte <= 0) {
|
|
91
91
|
throw new Error('papierbreitePunkte muss eine Ganzzahl > 0 sein');
|
|
92
92
|
}
|
|
93
93
|
if (!Number.isInteger(moduleAnzahl) || moduleAnzahl <= 0) {
|
|
94
94
|
throw new Error('moduleAnzahl muss eine Ganzzahl > 0 sein');
|
|
95
95
|
}
|
|
96
|
-
const roh =
|
|
96
|
+
const roh = QR_MODULE_SIZE_CAP[groesse];
|
|
97
97
|
if (roh === undefined) {
|
|
98
98
|
throw new Error(`Unbekannte QR-Modulgroesse: ${String(groesse)}`);
|
|
99
99
|
}
|
|
100
|
-
const gesamtModule = moduleAnzahl +
|
|
100
|
+
const gesamtModule = moduleAnzahl + QR_QUIET_ZONE_MODULES * 2;
|
|
101
101
|
const passend = Math.floor(papierbreitePunkte / gesamtModule);
|
|
102
|
-
if (passend <
|
|
103
|
-
return {
|
|
102
|
+
if (passend < QR_EXCEPTION_MODULE_DOTS) {
|
|
103
|
+
return { moduleDots: null, modules: moduleAnzahl, widthDots: 0, belowMinimum: false, fits: false };
|
|
104
104
|
}
|
|
105
|
-
const deckel = Math.min(Math.max(roh,
|
|
106
|
-
const punkte = passend <
|
|
105
|
+
const deckel = Math.min(Math.max(roh, QR_EXCEPTION_MODULE_DOTS), QR_MAX_MODULE_DOTS);
|
|
106
|
+
const punkte = passend < QR_MIN_MODULE_DOTS ? QR_EXCEPTION_MODULE_DOTS : Math.min(passend, deckel);
|
|
107
107
|
return {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
moduleDots: punkte,
|
|
109
|
+
modules: moduleAnzahl,
|
|
110
|
+
widthDots: gesamtModule * punkte,
|
|
111
|
+
belowMinimum: punkte < QR_MIN_MODULE_DOTS,
|
|
112
|
+
fits: true,
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
/**
|
|
116
|
-
* Wie `
|
|
116
|
+
* Wie `computeQrSizing`, nur mit der Modulanzahl aus `payload`.
|
|
117
117
|
*
|
|
118
118
|
* Eine leere Nutzlast ergibt kein Symbol — sie "passt nicht", statt zu
|
|
119
119
|
* werfen: der Aufrufer behandelt den Fall ohnehin schon (leerer QR am Beleg
|
|
120
120
|
* ist ein Datenfehler, kein Papierfehler).
|
|
121
121
|
*/
|
|
122
|
-
export function
|
|
123
|
-
if (options.
|
|
124
|
-
return {
|
|
122
|
+
export function qrSizingFor(options) {
|
|
123
|
+
if (options.payload === '') {
|
|
124
|
+
return { moduleDots: null, modules: 0, widthDots: 0, belowMinimum: false, fits: false };
|
|
125
125
|
}
|
|
126
126
|
const weiter = {
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
paperWidthDots: options.paperWidthDots,
|
|
128
|
+
moduleCount: qrModuleCount(options.payload),
|
|
129
129
|
};
|
|
130
|
-
if (options.
|
|
131
|
-
weiter.
|
|
132
|
-
return
|
|
130
|
+
if (options.moduleSize !== undefined)
|
|
131
|
+
weiter.moduleSize = options.moduleSize;
|
|
132
|
+
return computeQrSizing(weiter);
|
|
133
133
|
}
|
|
@@ -87,9 +87,9 @@ export declare function usbFindPrinterEndpoint(d: {
|
|
|
87
87
|
*/
|
|
88
88
|
export declare class UsbTimeoutError extends Error {
|
|
89
89
|
readonly name = "UsbTimeoutError";
|
|
90
|
-
readonly
|
|
90
|
+
readonly step: string;
|
|
91
91
|
readonly timeoutMs: number;
|
|
92
|
-
constructor(
|
|
92
|
+
constructor(step: string, timeoutMs: number);
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
95
|
* Bytes blockweise an den OUT-Endpunkt; liefert die geschriebene Gesamtzahl,
|
|
@@ -47,11 +47,11 @@ export function usbFindPrinterEndpoint(d) {
|
|
|
47
47
|
*/
|
|
48
48
|
export class UsbTimeoutError extends Error {
|
|
49
49
|
name = 'UsbTimeoutError';
|
|
50
|
-
|
|
50
|
+
step;
|
|
51
51
|
timeoutMs;
|
|
52
|
-
constructor(
|
|
53
|
-
super(`USB-Drucker antwortet nicht (${
|
|
54
|
-
this.
|
|
52
|
+
constructor(step, timeoutMs) {
|
|
53
|
+
super(`USB-Drucker antwortet nicht (${step}, Zeitlimit ${timeoutMs} ms überschritten) — Kabel/Gerät prüfen.`);
|
|
54
|
+
this.step = step;
|
|
55
55
|
this.timeoutMs = timeoutMs;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import type { ReceiptLayout } from '../receipt/layout.js';
|
|
3
|
-
import { type
|
|
4
|
-
import type {
|
|
3
|
+
import { type ReceiptSheet, type SheetLogoSize } from '../receipt/blatt.js';
|
|
4
|
+
import type { QrModuleSize } from '../printing/qr-groesse.js';
|
|
5
5
|
/**
|
|
6
6
|
* React-Adapter: zeichnet ein Beleg-Layout (siehe ../receipt/layout.ts).
|
|
7
7
|
*
|
|
@@ -31,69 +31,69 @@ export interface ReceiptLayoutViewProps {
|
|
|
31
31
|
* Fuer Bildschirme, auf denen der Beleg nur zur Kontrolle steht -- der
|
|
32
32
|
* Signatur-QR gehoert dem Kunden und wird erst auf Verlangen freigegeben.
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
qrHidden?: boolean;
|
|
35
35
|
/** Text auf dem verdeckten QR (Vorgabe „Antippen zum Anzeigen“). */
|
|
36
|
-
|
|
36
|
+
qrHiddenText?: string;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* @deprecated Seit 0.14.0: [
|
|
39
|
+
* @deprecated Seit 0.14.0: [ReceiptSheetView] setzt den Beleg zeichengleich zu
|
|
40
40
|
* Bon und PDF (Raster, Logo, Marke). Diese Ansicht rechnet Spalten mit Flex
|
|
41
41
|
* und bricht darum anders um als das Papier.
|
|
42
42
|
*/
|
|
43
|
-
export declare function ReceiptLayoutView({ layout, className, renderQr, qrVerdeckt, qrVerdecktText }: ReceiptLayoutViewProps): ReactNode;
|
|
43
|
+
export declare function ReceiptLayoutView({ layout, className, renderQr, qrHidden: qrVerdeckt, qrHiddenText: qrVerdecktText }: ReceiptLayoutViewProps): ReactNode;
|
|
44
44
|
/**
|
|
45
45
|
* Verdeckter QR: weichgezeichnet und nicht scannbar, bis der Betrachter ihn
|
|
46
46
|
* antippt. Die Nutzlast bleibt trotzdem als `data-qr` am Element -- fuer Tests
|
|
47
47
|
* und Werkzeuge, nicht fuers Auge.
|
|
48
48
|
*/
|
|
49
|
-
export declare function
|
|
49
|
+
export declare function HiddenQr({ data, text, children }: {
|
|
50
50
|
data: string;
|
|
51
51
|
text?: string;
|
|
52
52
|
children: ReactNode;
|
|
53
53
|
}): ReactNode;
|
|
54
|
-
export interface
|
|
55
|
-
|
|
54
|
+
export interface ReceiptSheetLinesProps {
|
|
55
|
+
sheet: ReceiptSheet;
|
|
56
56
|
/** Adresse des Firmenlogos; ohne sie bleibt der Logo-Block leer (Platz bleibt). */
|
|
57
57
|
logoUrl?: string;
|
|
58
58
|
/**
|
|
59
|
-
* Zeichnet den QR in seinen Kasten (`
|
|
59
|
+
* Zeichnet den QR in seinen Kasten (`qrSheetWidthFraction`). Der Kasten schliesst
|
|
60
60
|
* die Ruhezone von 4 Modulen je Seite ein und setzt Fehlerkorrektur M
|
|
61
61
|
* voraus: das Symbol also mit Korrektur M und 4 Modulen Ruhezone zeichnen
|
|
62
62
|
* und den Kasten ganz ausfuellen -- dann ist ein Modul so gross wie am Bon.
|
|
63
63
|
*/
|
|
64
64
|
renderQr?: (data: string) => ReactNode;
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
qrHidden?: boolean;
|
|
66
|
+
qrHiddenText?: string;
|
|
67
67
|
className?: string;
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
70
|
* Das Blatt am Bildschirm -- Zeile fuer Zeile dieselben Zeichen wie am Bon und
|
|
71
71
|
* im PDF. Masse in `ch`: eine Zeichenbreite ist `1ch`, eine Zeile `2ch`, das
|
|
72
|
-
* Blatt `
|
|
72
|
+
* Blatt `charsPerLine`ch breit. Der Verbraucher bestimmt nur Schrift (monospace,
|
|
73
73
|
* Vorgabe ueber `--keck-blatt-schrift`) und Schriftgroesse; alles andere steht
|
|
74
74
|
* im Blatt.
|
|
75
75
|
*/
|
|
76
|
-
export declare function
|
|
77
|
-
export interface
|
|
76
|
+
export declare function ReceiptSheetLines({ sheet: blatt, logoUrl, renderQr, qrHidden: qrVerdeckt, qrHiddenText: qrVerdecktText, className }: ReceiptSheetLinesProps): ReactNode;
|
|
77
|
+
export interface ReceiptSheetViewProps extends Omit<ReceiptSheetLinesProps, 'sheet' | 'logoUrl'> {
|
|
78
78
|
layout: ReceiptLayout;
|
|
79
|
-
|
|
79
|
+
charsPerLine?: number;
|
|
80
80
|
/** Firmenlogo und Stufe (`logoSkala`); das Pixelmass liest die Ansicht selbst. */
|
|
81
81
|
logo?: {
|
|
82
82
|
url: string;
|
|
83
|
-
|
|
83
|
+
size: SheetLogoSize;
|
|
84
84
|
} | null;
|
|
85
|
-
|
|
85
|
+
brandMark?: boolean;
|
|
86
86
|
/** Geraete-Einstellung fuer die QR-Modulgroesse; Vorgabe `auto` (hoechstens 6 Punkte je Modul) — wie die Druckwege. */
|
|
87
|
-
|
|
87
|
+
qrModuleSize?: QrModuleSize;
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Laedt das Logo (fuer sein Pixelmass), baut das Blatt und zeichnet es. Bis
|
|
91
91
|
* das Bild geladen ist, fehlt der Logo-Block -- die Kasse laedt das Logo ohnehin
|
|
92
92
|
* vorab in den Browser-Cache.
|
|
93
93
|
*
|
|
94
|
-
* Ein Logo ueber [
|
|
94
|
+
* Ein Logo ueber [isLogoPixelSizeAllowed] (4096x4096px, dieselbe Grenze wie das
|
|
95
95
|
* Druck-Kit beim Rastern fuer den Bon) bleibt hier ebenso ohne Logo-Block --
|
|
96
96
|
* sonst zeigte der Bildschirm ein Logo, das nie gedruckt wird: Bildschirm und
|
|
97
97
|
* Bon zeigen dasselbe Logo.
|
|
98
98
|
*/
|
|
99
|
-
export declare function
|
|
99
|
+
export declare function ReceiptSheetView({ layout, charsPerLine: zeichen, logo, brandMark: marke, qrModuleSize: qrGroesse, ...rest }: ReceiptSheetViewProps): ReactNode;
|
package/dist/esm/react/index.js
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { receiptSheet, isLogoPixelSizeAllowed, DOTS_PER_CHAR } from '../receipt/blatt.js';
|
|
4
|
+
import { BRAND_MARK_PATHS } from '../receipt/marke-daten.js';
|
|
5
|
+
/**
|
|
6
|
+
* CSS-Klasse je Ton. Die Klassennamen bleiben die von 0.x
|
|
7
|
+
* (`keck-receipt-banner--belegart`/`--warnung`): Stylesheets der Verbraucher
|
|
8
|
+
* haengen daran, und das HTML soll durch die englischen Werte kein Byte
|
|
9
|
+
* anders werden.
|
|
10
|
+
*/
|
|
11
|
+
const BANNER_KLASSE = {
|
|
12
|
+
receipt_type: 'belegart',
|
|
13
|
+
warning: 'warnung',
|
|
14
|
+
};
|
|
5
15
|
const AUSRICHTUNG = {
|
|
6
16
|
left: 'left',
|
|
7
17
|
center: 'center',
|
|
8
18
|
right: 'right',
|
|
9
19
|
};
|
|
10
20
|
/**
|
|
11
|
-
* @deprecated Seit 0.14.0: [
|
|
21
|
+
* @deprecated Seit 0.14.0: [ReceiptSheetView] setzt den Beleg zeichengleich zu
|
|
12
22
|
* Bon und PDF (Raster, Logo, Marke). Diese Ansicht rechnet Spalten mit Flex
|
|
13
23
|
* und bricht darum anders um als das Papier.
|
|
14
24
|
*/
|
|
15
|
-
export function ReceiptLayoutView({ layout, className, renderQr, qrVerdeckt = false, qrVerdecktText }) {
|
|
25
|
+
export function ReceiptLayoutView({ layout, className, renderQr, qrHidden: qrVerdeckt = false, qrHiddenText: qrVerdecktText }) {
|
|
16
26
|
const klasse = className === undefined ? 'keck-receipt' : `keck-receipt ${className}`;
|
|
17
27
|
return (_jsx("div", { className: klasse, "data-paper-size": layout.paperSize, children: layout.lines.map((zeile, index) => (_jsx(Zeile, { zeile: zeile, renderQr: renderQr, qrVerdeckt: qrVerdeckt, qrVerdecktText: qrVerdecktText }, index))) }));
|
|
18
28
|
}
|
|
@@ -21,7 +31,7 @@ export function ReceiptLayoutView({ layout, className, renderQr, qrVerdeckt = fa
|
|
|
21
31
|
* antippt. Die Nutzlast bleibt trotzdem als `data-qr` am Element -- fuer Tests
|
|
22
32
|
* und Werkzeuge, nicht fuers Auge.
|
|
23
33
|
*/
|
|
24
|
-
export function
|
|
34
|
+
export function HiddenQr({ data, text = 'Antippen zum Anzeigen', children }) {
|
|
25
35
|
const [offen, setOffen] = useState(false);
|
|
26
36
|
return (_jsxs("button", { type: "button", className: offen ? 'keck-receipt-qr-toggle keck-receipt-qr-toggle--offen' : 'keck-receipt-qr-toggle', "aria-pressed": offen, "aria-label": offen ? 'QR-Code verdecken' : text, "data-qr": data, onClick: () => setOffen((o) => !o), style: { position: 'relative', display: 'inline-block', border: 'none', background: 'transparent', padding: 0, cursor: 'pointer' }, children: [_jsx("span", { style: { display: 'inline-block', filter: offen ? undefined : 'blur(3px)', transition: 'filter .15s ease' }, children: children }), !offen && (
|
|
27
37
|
// Tipp-Finger statt Textzeile: versteht jeder, verdeckt fast nichts.
|
|
@@ -54,47 +64,47 @@ function Zeile({ zeile, renderQr, qrVerdeckt, qrVerdecktText }) {
|
|
|
54
64
|
case 'space':
|
|
55
65
|
return _jsx("div", { className: "keck-receipt-space", style: { height: `${zeile.lines}em` } });
|
|
56
66
|
case 'banner':
|
|
57
|
-
return (_jsx("div", { className: `keck-receipt-banner keck-receipt-banner--${zeile.
|
|
67
|
+
return (_jsx("div", { className: `keck-receipt-banner keck-receipt-banner--${BANNER_KLASSE[zeile.tone] ?? String(zeile.tone)}`, role: zeile.tone === 'warning' ? 'alert' : undefined, style: { textAlign: 'center', fontWeight: 'bold', letterSpacing: '0.06em', padding: '0.2em 0.4em', border: '2px solid currentColor', margin: '0.3em 0' }, children: zeile.text }));
|
|
58
68
|
case 'qr':
|
|
59
69
|
{
|
|
60
70
|
const bild = renderQr !== undefined ? renderQr(zeile.data) : _jsx("div", { "data-qr": zeile.data, "aria-label": "RKSV-QR-Code" });
|
|
61
|
-
return (_jsx("div", { className: "keck-receipt-qr", style: { textAlign: 'center' }, children: qrVerdeckt ? _jsx(
|
|
71
|
+
return (_jsx("div", { className: "keck-receipt-qr", style: { textAlign: 'center' }, children: qrVerdeckt ? _jsx(HiddenQr, { data: zeile.data, text: qrVerdecktText, children: bild }) : bild }));
|
|
62
72
|
}
|
|
63
73
|
}
|
|
64
74
|
}
|
|
65
75
|
/**
|
|
66
76
|
* Das Blatt am Bildschirm -- Zeile fuer Zeile dieselben Zeichen wie am Bon und
|
|
67
77
|
* im PDF. Masse in `ch`: eine Zeichenbreite ist `1ch`, eine Zeile `2ch`, das
|
|
68
|
-
* Blatt `
|
|
78
|
+
* Blatt `charsPerLine`ch breit. Der Verbraucher bestimmt nur Schrift (monospace,
|
|
69
79
|
* Vorgabe ueber `--keck-blatt-schrift`) und Schriftgroesse; alles andere steht
|
|
70
80
|
* im Blatt.
|
|
71
81
|
*/
|
|
72
|
-
export function
|
|
73
|
-
const z = blatt.
|
|
82
|
+
export function ReceiptSheetLines({ sheet: blatt, logoUrl, renderQr, qrHidden: qrVerdeckt = false, qrHiddenText: qrVerdecktText, className }) {
|
|
83
|
+
const z = blatt.charsPerLine;
|
|
74
84
|
const klasse = className === undefined ? 'keck-blatt' : `keck-blatt ${className}`;
|
|
75
85
|
const blattStil = {
|
|
76
86
|
width: `${z}ch`,
|
|
77
87
|
fontFamily: 'var(--keck-blatt-schrift, "DM Mono", ui-monospace, Menlo, Consolas, monospace)',
|
|
78
88
|
fontVariantLigatures: 'none',
|
|
79
89
|
};
|
|
80
|
-
return (_jsx("div", { className: klasse, "data-zeichen": z, style: blattStil, children: blatt.
|
|
81
|
-
switch (b.
|
|
82
|
-
case '
|
|
83
|
-
return (_jsx("div", { className: "keck-blatt-zeile", style: { whiteSpace: 'pre', height: '2ch', lineHeight: '2ch', overflow: 'hidden', fontWeight: b.
|
|
90
|
+
return (_jsx("div", { className: klasse, "data-zeichen": z, style: blattStil, children: blatt.blocks.map((b, i) => {
|
|
91
|
+
switch (b.kind) {
|
|
92
|
+
case 'line':
|
|
93
|
+
return (_jsx("div", { className: "keck-blatt-zeile", style: { whiteSpace: 'pre', height: '2ch', lineHeight: '2ch', overflow: 'hidden', fontWeight: b.bold ? 'bold' : 'normal' }, children: b.text }, i));
|
|
84
94
|
case 'logo':
|
|
85
|
-
return (_jsx("div", { className: "keck-blatt-logo", style: { height: `${b.
|
|
86
|
-
case '
|
|
95
|
+
return (_jsx("div", { className: "keck-blatt-logo", style: { height: `${b.heightLines * 2}ch`, display: 'flex', justifyContent: 'center' }, children: logoUrl === undefined ? null : (_jsx("img", { src: logoUrl, alt: "", "aria-hidden": "true", style: { width: `${b.widthFraction * z}ch`, height: `${b.heightLines * 2}ch`, objectFit: 'contain' } })) }, i));
|
|
96
|
+
case 'brandMark':
|
|
87
97
|
// Kein Rasterbild wie am Bon: Dieses Paket hat bewusst keine
|
|
88
98
|
// Abhaengigkeiten, und die Pfade liegen ohnehin schon vor (PDF
|
|
89
99
|
// zeichnet dieselben). Ein SVG bleibt in jeder Aufloesung scharf.
|
|
90
|
-
return (_jsx("div", { className: "keck-blatt-marke", style: { height: `${b.
|
|
100
|
+
return (_jsx("div", { className: "keck-blatt-marke", style: { height: `${b.height / DOTS_PER_CHAR}ch`, display: 'flex', justifyContent: 'center' }, children: _jsx("svg", { viewBox: `0 0 ${BRAND_MARK_PATHS.width} ${BRAND_MARK_PATHS.height}`, width: `${b.width / DOTS_PER_CHAR}ch`, height: `${b.height / DOTS_PER_CHAR}ch`, role: "img", "aria-label": "Kasseneck", fill: "currentColor", children: BRAND_MARK_PATHS.paths.map((d, j) => _jsx("path", { d: d }, j)) }) }, i));
|
|
91
101
|
case 'qr': {
|
|
92
102
|
// Auch beim Anteil 0 (leer oder in keine Version passend) bekommt
|
|
93
103
|
// `renderQr` die Nutzlast: die Oberflaeche muss sagen koennen, dass
|
|
94
104
|
// der QR fehlt und ein Papierbeleg noetig ist. Bon und PDF lassen
|
|
95
|
-
// den QR dann weg und melden es ueber `
|
|
96
|
-
const bild = renderQr !== undefined ? renderQr(b.
|
|
97
|
-
return (_jsx("div", { className: "keck-blatt-qr", style: { display: 'flex', justifyContent: 'center' }, children: _jsx("div", { style: { width: `${b.
|
|
105
|
+
// den QR dann weg und melden es ueber `qrError`.
|
|
106
|
+
const bild = renderQr !== undefined ? renderQr(b.payload) : _jsx("div", { "data-qr": b.payload, "aria-label": "RKSV-QR-Code" });
|
|
107
|
+
return (_jsx("div", { className: "keck-blatt-qr", style: { display: 'flex', justifyContent: 'center' }, children: _jsx("div", { style: { width: `${b.widthFraction * z}ch`, aspectRatio: '1 / 1' }, children: qrVerdeckt ? _jsx(HiddenQr, { data: b.payload, text: qrVerdecktText, children: bild }) : bild }) }, i));
|
|
98
108
|
}
|
|
99
109
|
}
|
|
100
110
|
}) }));
|
|
@@ -104,12 +114,12 @@ export function BelegBlattZeilen({ blatt, logoUrl, renderQr, qrVerdeckt = false,
|
|
|
104
114
|
* das Bild geladen ist, fehlt der Logo-Block -- die Kasse laedt das Logo ohnehin
|
|
105
115
|
* vorab in den Browser-Cache.
|
|
106
116
|
*
|
|
107
|
-
* Ein Logo ueber [
|
|
117
|
+
* Ein Logo ueber [isLogoPixelSizeAllowed] (4096x4096px, dieselbe Grenze wie das
|
|
108
118
|
* Druck-Kit beim Rastern fuer den Bon) bleibt hier ebenso ohne Logo-Block --
|
|
109
119
|
* sonst zeigte der Bildschirm ein Logo, das nie gedruckt wird: Bildschirm und
|
|
110
120
|
* Bon zeigen dasselbe Logo.
|
|
111
121
|
*/
|
|
112
|
-
export function
|
|
122
|
+
export function ReceiptSheetView({ layout, charsPerLine: zeichen, logo, brandMark: marke = false, qrModuleSize: qrGroesse, ...rest }) {
|
|
113
123
|
const [mass, setMass] = useState(null);
|
|
114
124
|
const url = logo?.url;
|
|
115
125
|
useEffect(() => {
|
|
@@ -121,7 +131,7 @@ export function BelegBlattView({ layout, zeichen, logo, marke = false, qrGroesse
|
|
|
121
131
|
return undefined;
|
|
122
132
|
const bild = new Bild();
|
|
123
133
|
bild.onload = () => {
|
|
124
|
-
if (aktiv &&
|
|
134
|
+
if (aktiv && isLogoPixelSizeAllowed(bild.naturalWidth, bild.naturalHeight))
|
|
125
135
|
setMass({ url, breite: bild.naturalWidth, hoehe: bild.naturalHeight });
|
|
126
136
|
};
|
|
127
137
|
bild.src = url;
|
|
@@ -129,14 +139,14 @@ export function BelegBlattView({ layout, zeichen, logo, marke = false, qrGroesse
|
|
|
129
139
|
aktiv = false;
|
|
130
140
|
};
|
|
131
141
|
}, [url]);
|
|
132
|
-
const optionen = { marke };
|
|
142
|
+
const optionen = { brandMark: marke };
|
|
133
143
|
if (zeichen !== undefined)
|
|
134
|
-
optionen.
|
|
144
|
+
optionen.charsPerLine = zeichen;
|
|
135
145
|
if (qrGroesse !== undefined)
|
|
136
|
-
optionen.
|
|
146
|
+
optionen.qrModuleSize = qrGroesse;
|
|
137
147
|
const geladen = logo != null && mass !== null && mass.url === logo.url;
|
|
138
148
|
if (geladen)
|
|
139
|
-
optionen.logo = {
|
|
140
|
-
const blatt =
|
|
141
|
-
return geladen ? _jsx(
|
|
149
|
+
optionen.logo = { size: logo.size, pixelWidth: mass.breite, pixelHeight: mass.hoehe };
|
|
150
|
+
const blatt = receiptSheet(layout, optionen);
|
|
151
|
+
return geladen ? _jsx(ReceiptSheetLines, { sheet: blatt, logoUrl: logo.url, ...rest }) : _jsx(ReceiptSheetLines, { sheet: blatt, ...rest });
|
|
142
152
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type
|
|
1
|
+
import type { RasterImage } from '../printing/escpos.js';
|
|
2
|
+
import { type LogoDimensions } from './blatt.js';
|
|
3
3
|
/**
|
|
4
4
|
* RGBA-Pixel (wie `ImageData.data` im Browser oder ein dekodiertes PNG in
|
|
5
5
|
* Node/Dart) -> einfarbiges Rasterbild in genau der Groesse, die das Blatt
|
|
6
6
|
* dem Logo gibt.
|
|
7
7
|
*
|
|
8
8
|
* Die Rechnung ist Vertrag und hat einen Dart-Zwilling (Golden
|
|
9
|
-
* `
|
|
9
|
+
* `expected/logo-sample.raster32.txt`): Flaechenmittel je Druckpunkt,
|
|
10
10
|
* Durchsichtiges auf Papierweiss, Helligkeit nach BT.601, Floyd-Steinberg mit
|
|
11
11
|
* Schwelle 128. Die Reihenfolge der Rechenschritte nicht aendern -- beide
|
|
12
12
|
* Sprachen rechnen mit IEEE-Doubles und kommen nur so auf dieselben Punkte.
|
|
13
13
|
*/
|
|
14
|
-
export declare function
|
|
14
|
+
export declare function rasterizeLogo(rgba: ArrayLike<number>, pxWidth: number, pxHeight: number, dimensions: LogoDimensions, chars: number): RasterImage;
|
package/dist/esm/receipt/bild.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { logoRasterSize } from './blatt.js';
|
|
2
2
|
/**
|
|
3
3
|
* RGBA-Pixel (wie `ImageData.data` im Browser oder ein dekodiertes PNG in
|
|
4
4
|
* Node/Dart) -> einfarbiges Rasterbild in genau der Groesse, die das Blatt
|
|
5
5
|
* dem Logo gibt.
|
|
6
6
|
*
|
|
7
7
|
* Die Rechnung ist Vertrag und hat einen Dart-Zwilling (Golden
|
|
8
|
-
* `
|
|
8
|
+
* `expected/logo-sample.raster32.txt`): Flaechenmittel je Druckpunkt,
|
|
9
9
|
* Durchsichtiges auf Papierweiss, Helligkeit nach BT.601, Floyd-Steinberg mit
|
|
10
10
|
* Schwelle 128. Die Reihenfolge der Rechenschritte nicht aendern -- beide
|
|
11
11
|
* Sprachen rechnen mit IEEE-Doubles und kommen nur so auf dieselben Punkte.
|
|
12
12
|
*/
|
|
13
|
-
export function
|
|
14
|
-
if (!Number.isInteger(
|
|
13
|
+
export function rasterizeLogo(rgba, pxWidth, pxHeight, dimensions, chars) {
|
|
14
|
+
if (!Number.isInteger(pxWidth) || !Number.isInteger(pxHeight) || pxWidth < 1 || pxHeight < 1 || rgba.length !== pxWidth * pxHeight * 4) {
|
|
15
15
|
throw new Error('RGBA-Laenge passt nicht zum Pixelmass');
|
|
16
16
|
}
|
|
17
|
-
const { breite, hoehe } =
|
|
17
|
+
const { width: breite, height: hoehe } = logoRasterSize(dimensions, chars);
|
|
18
18
|
const grau = new Float64Array(breite * hoehe);
|
|
19
|
-
const sx =
|
|
20
|
-
const sy =
|
|
19
|
+
const sx = pxWidth / breite;
|
|
20
|
+
const sy = pxHeight / hoehe;
|
|
21
21
|
for (let y = 0; y < hoehe; y++) {
|
|
22
22
|
const y0 = Math.floor(y * sy);
|
|
23
|
-
const y1 = Math.min(
|
|
23
|
+
const y1 = Math.min(pxHeight, Math.max(y0 + 1, Math.floor((y + 1) * sy)));
|
|
24
24
|
for (let x = 0; x < breite; x++) {
|
|
25
25
|
const x0 = Math.floor(x * sx);
|
|
26
|
-
const x1 = Math.min(
|
|
26
|
+
const x1 = Math.min(pxWidth, Math.max(x0 + 1, Math.floor((x + 1) * sx)));
|
|
27
27
|
let summe = 0;
|
|
28
28
|
let anzahl = 0;
|
|
29
29
|
for (let py = y0; py < y1; py++) {
|
|
30
30
|
for (let px = x0; px < x1; px++) {
|
|
31
|
-
const i = (py *
|
|
31
|
+
const i = (py * pxWidth + px) * 4;
|
|
32
32
|
const deckung = rgba[i + 3] / 255;
|
|
33
33
|
const hell = 0.299 * rgba[i] + 0.587 * rgba[i + 1] + 0.114 * rgba[i + 2];
|
|
34
34
|
summe += hell * deckung + 255 * (1 - deckung);
|
|
@@ -58,5 +58,5 @@ export function logoRaster(rgba, pxBreite, pxHoehe, mass, zeichen) {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
return { breite, hoehe, punkte };
|
|
61
|
+
return { width: breite, height: hoehe, dots: punkte };
|
|
62
62
|
}
|