pi-kiosk-shared 2.2.86 → 2.2.88
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/README.md +3 -3
- package/dist/analytics/tenantCommandCenter.d.ts +6 -1
- package/dist/analytics/tenantCommandCenter.d.ts.map +1 -1
- package/dist/analyticsEventDescriptions.js +10 -10
- package/dist/analyticsEventLabels.js +3 -3
- package/dist/auditEventDescriptions.js +10 -10
- package/dist/auditEventLabels.js +6 -6
- package/dist/branding/consumerSquareLogo.d.ts +6 -1
- package/dist/branding/consumerSquareLogo.d.ts.map +1 -1
- package/dist/branding/consumerSquareLogo.js +10 -0
- package/dist/branding/consumerSquareLogo.js.map +1 -1
- package/dist/branding/logoChipRim.d.ts +35 -0
- package/dist/branding/logoChipRim.d.ts.map +1 -0
- package/dist/branding/logoChipRim.js +58 -0
- package/dist/branding/logoChipRim.js.map +1 -0
- package/dist/branding/signedMediaUrlStability.d.ts +17 -0
- package/dist/branding/signedMediaUrlStability.d.ts.map +1 -0
- package/dist/branding/signedMediaUrlStability.js +60 -0
- package/dist/branding/signedMediaUrlStability.js.map +1 -0
- package/dist/catalogMediaPatch.d.ts +21 -0
- package/dist/catalogMediaPatch.d.ts.map +1 -1
- package/dist/catalogMediaPatch.js +64 -0
- package/dist/catalogMediaPatch.js.map +1 -1
- package/dist/directoryMonogram.d.ts +12 -0
- package/dist/directoryMonogram.d.ts.map +1 -1
- package/dist/directoryMonogram.js +27 -0
- package/dist/directoryMonogram.js.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/hooks/useBarcodeScanner.d.ts +5 -0
- package/dist/hooks/useBarcodeScanner.d.ts.map +1 -1
- package/dist/hooks/useBarcodeScanner.js +50 -7
- package/dist/hooks/useBarcodeScanner.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/order/fulfillmentContracts.d.ts +2 -0
- package/dist/order/fulfillmentContracts.d.ts.map +1 -1
- package/dist/permissions/permissionLabels.js +4 -4
- package/dist/tenant-entitlements/adminMfaEntitlement.d.ts +1 -1
- package/dist/tenant-entitlements/adminMfaEntitlement.d.ts.map +1 -1
- package/dist/tenant-entitlements/adminMfaEntitlement.js +5 -1
- package/dist/tenant-entitlements/adminMfaEntitlement.js.map +1 -1
- package/dist/tenant-entitlements/applyTenantScopeToSimpleStates.d.ts.map +1 -1
- package/dist/tenant-entitlements/applyTenantScopeToSimpleStates.js +3 -0
- package/dist/tenant-entitlements/applyTenantScopeToSimpleStates.js.map +1 -1
- package/dist/tenant-entitlements/capabilityEntitlementRequirements.d.ts +65 -0
- package/dist/tenant-entitlements/capabilityEntitlementRequirements.d.ts.map +1 -0
- package/dist/tenant-entitlements/capabilityEntitlementRequirements.js +1154 -0
- package/dist/tenant-entitlements/capabilityEntitlementRequirements.js.map +1 -0
- package/dist/tenant-entitlements/catalog.d.ts +1 -1
- package/dist/tenant-entitlements/catalog.d.ts.map +1 -1
- package/dist/tenant-entitlements/catalog.js +12 -4
- package/dist/tenant-entitlements/catalog.js.map +1 -1
- package/dist/tenant-entitlements/index.d.ts +3 -0
- package/dist/tenant-entitlements/index.d.ts.map +1 -1
- package/dist/tenant-entitlements/index.js +2 -0
- package/dist/tenant-entitlements/index.js.map +1 -1
- package/dist/tenant-entitlements/tenantBrandKitEntitlement.d.ts +2 -0
- package/dist/tenant-entitlements/tenantBrandKitEntitlement.d.ts.map +1 -0
- package/dist/tenant-entitlements/tenantBrandKitEntitlement.js +2 -0
- package/dist/tenant-entitlements/tenantBrandKitEntitlement.js.map +1 -0
- package/dist/tenant-entitlements/types.d.ts +4 -4
- package/dist/tenant-entitlements/types.d.ts.map +1 -1
- package/dist/tenant-entitlements/types.js +3 -2
- package/dist/tenant-entitlements/types.js.map +1 -1
- package/dist/ui/Dialog/Dialog.d.ts +3 -1
- package/dist/ui/Dialog/Dialog.d.ts.map +1 -1
- package/dist/ui/Dialog/Dialog.js +4 -3
- package/dist/ui/Dialog/Dialog.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Shared types, API contracts, and error classes for the Pi Kiosk system.
|
|
|
9
9
|
|
|
10
10
|
## Temporary retention
|
|
11
11
|
|
|
12
|
-
`up-backend` keeps production `react` / `react-dom` until cold/start paths consume a Node-safe published or overlaid main barrel. Do **not** drop those deps until that consume path is proven on the version actually installed (registry
|
|
12
|
+
`up-backend` keeps production `react` / `react-dom` until cold/start paths consume a Node-safe published or overlaid main barrel. Do **not** drop those deps until that consume path is proven on the version actually installed (registry tarball from `npm view`, or monorepo overlay of sibling `../shared` **2.2.86**). Same caveat as `up-backend/docs/DEPLOYMENT/DEPLOY_SEPARATE_REPOS.md`.
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
@@ -74,7 +74,7 @@ Frontends import React modules from `/ui`. The **target** main barrel (local ove
|
|
|
74
74
|
|
|
75
75
|
## Local monorepo overlay
|
|
76
76
|
|
|
77
|
-
**Honesty (SSOT):** All five monorepo consumers (`up-backend`, `admin-app`, `rpapp-kiosk`, `rpapp-customer`, `rpapp-pickup`)
|
|
77
|
+
**Honesty (SSOT):** All five monorepo consumers (`up-backend`, `admin-app`, `rpapp-kiosk`, `rpapp-customer`, `rpapp-pickup`) pin `"pi-kiosk-shared": "^2.2.86"` matching `shared/package.json` **2.2.86**. Sibling overlay still runs when `../shared` exists. Separate-repo pin should match that. Confirm registry with `npm view pi-kiosk-shared version` at deploy time — this README does not claim a publish.
|
|
78
78
|
|
|
79
79
|
**Documented cold path (monorepo):** `npm ci` / `npm install` in each app runs lifecycle hooks → `scripts/overlaySharedIfPresent.mjs` → `shared/scripts/ensureDist.mjs` when sibling `../shared` exists:
|
|
80
80
|
|
|
@@ -111,7 +111,7 @@ npm run gate:main-barrel-node-safe
|
|
|
111
111
|
|
|
112
112
|
From `shared/`, prove the documented cold path:
|
|
113
113
|
|
|
114
|
-
1. **DIAGNOSTIC** — `npm pack` registry
|
|
114
|
+
1. **DIAGNOSTIC** — `npm pack` a known Node-safe registry tarball (`COLD_VERSION` in `prove-pi-kiosk-shared-cold-overlay.mjs`, currently `2.2.82`) in a temp dir and assert COLD_BAD markers (never installs into a consumer with `--ignore-scripts`). Live monorepo source is `shared/package.json` **2.2.86**.
|
|
115
115
|
2. **PASS** — wipe that consumer’s `node_modules/pi-kiosk-shared`, then `npm install` with **scripts on** (no package args) so `prepare` / `postinstall` overlays during install; assert Node-safe barrel + `NODE_IMPORT_OK`.
|
|
116
116
|
|
|
117
117
|
```bash
|
|
@@ -65,7 +65,12 @@ export interface TenantCommandCenterIncident {
|
|
|
65
65
|
readonly severity: TenantCommandCenterIncidentSeverity;
|
|
66
66
|
readonly title: string;
|
|
67
67
|
readonly ageLabel: string;
|
|
68
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Deep link into commercial Události (`/:tenant/success-incident-centre/...`).
|
|
70
|
+
* Omitted when `incident_centre_ui` is not entitled (default OFF) so operators
|
|
71
|
+
* are not sent into a dead route — platform DEV uses `/dev/success-incident-centre`.
|
|
72
|
+
*/
|
|
73
|
+
readonly href?: string;
|
|
69
74
|
}
|
|
70
75
|
export interface TenantCommandCenterTopKiosk {
|
|
71
76
|
readonly rank: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenantCommandCenter.d.ts","sourceRoot":"","sources":["../../src/analytics/tenantCommandCenter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAEvE,oEAAoE;AACpE,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,MAAM,GACN,SAAS,GACT,gBAAgB,GAChB,UAAU,CAAC;AAEf,sCAAsC;AACtC,MAAM,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAE/C,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D,MAAM,MAAM,+BAA+B,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAElF,MAAM,MAAM,mCAAmC,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE5E,MAAM,MAAM,+BAA+B,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErF,MAAM,MAAM,kCAAkC,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzE,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,yBAAyB;AACzB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;CACxC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,EAAE,yBAAyB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,mCAAmC,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"tenantCommandCenter.d.ts","sourceRoot":"","sources":["../../src/analytics/tenantCommandCenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ANALYTICS_ACCOUNT_EVENTS, ANALYTICS_DONATION_EVENTS, ANALYTICS_EVENT_NA
|
|
|
3
3
|
const UNIVERSAL_DESCRIPTIONS = {
|
|
4
4
|
[ANALYTICS_UNIVERSAL_EVENTS.SESSION_STARTED]: {
|
|
5
5
|
en: 'Counts when a new customer visit starts on the sales point or phone app. One count per new visit — doing the same thing again in the same visit does not add another. This is not the same as the “sessions started” number on some charts, which is calculated differently.',
|
|
6
|
-
cs: 'Počítá se, když u
|
|
6
|
+
cs: 'Počítá se, když u prodejního místa nebo v aplikaci začne nová návštěva zákazníka. Jednou za každou novou návštěvu — opakování ve stejné návštěvě nepřidá další. Není totéž jako číslo „zahájených relací“ na některých grafech, které se počítá jinak.',
|
|
7
7
|
sk: 'Počíta sa, keď pri platobnom mieste alebo v aplikácii začne nová návšteva zákazníka. Raz za každú novú návštevu — opakovanie v rovnakej návšteve nepridá ďalšiu. Nie je to isté ako číslo „začatých relácií“ na niektorých grafoch, ktoré sa počíta inak.',
|
|
8
8
|
},
|
|
9
9
|
[ANALYTICS_UNIVERSAL_EVENTS.SESSION_COMPLETED]: {
|
|
@@ -13,7 +13,7 @@ const UNIVERSAL_DESCRIPTIONS = {
|
|
|
13
13
|
},
|
|
14
14
|
[ANALYTICS_UNIVERSAL_EVENTS.SESSION_ABANDONED]: {
|
|
15
15
|
en: 'Counts when someone leaves without finishing — closed tab, walked away, timed out, or cancelled in a way that ends the visit. One count per time that happens for a visit. Not the same as “payment failed” when they only cancel a payment step.',
|
|
16
|
-
cs: 'Počítá se, když někdo odejde bez dokončení — zavře stránku, odejde od
|
|
16
|
+
cs: 'Počítá se, když někdo odejde bez dokončení — zavře stránku, odejde od prodejního místa, vyprší čas, nebo zruší tak, že návštěva skončí. Jednou za každý takový konec návštěvy. Není totéž jako „platba selhala“, když zruší jen krok platby.',
|
|
17
17
|
sk: 'Počíta sa, keď niekto odíde bez dokončenia — zatvorí stránku, odíde od platobného miesta, vyprší čas, alebo zruší tak, že návšteva skončí. Raz za každý takýto koniec návštevy. Nie je to isté ako „platba zlyhala“, keď zruší len krok platby.',
|
|
18
18
|
},
|
|
19
19
|
[ANALYTICS_UNIVERSAL_EVENTS.SESSION_RECOVERED]: {
|
|
@@ -23,7 +23,7 @@ const UNIVERSAL_DESCRIPTIONS = {
|
|
|
23
23
|
},
|
|
24
24
|
[ANALYTICS_UNIVERSAL_EVENTS.SCREEN_VIEWED]: {
|
|
25
25
|
en: 'Counts each time a screen is shown on the sales point or customer app — home, cart, payment, and so on. Every time they open or return to a screen adds one. Not a new visit, not a payment result.',
|
|
26
|
-
cs: 'Počítá se pokaždé, když se u
|
|
26
|
+
cs: 'Počítá se pokaždé, když se u prodejního místa nebo v aplikaci zobrazí obrazovka — úvod, košík, platba atd. Každé otevření nebo návrat na obrazovku přidá jednu. Není nová návštěva ani výsledek platby.',
|
|
27
27
|
sk: 'Počíta sa vždy, keď sa pri platobnom mieste alebo v aplikácii zobrazí obrazovka — úvod, košík, platba atď. Každé otvorenie alebo návrat na obrazovku pridá jednu. Nie je to nová návšteva ani výsledok platby.',
|
|
28
28
|
},
|
|
29
29
|
[ANALYTICS_UNIVERSAL_EVENTS.CTA_CLICKED]: {
|
|
@@ -252,7 +252,7 @@ const RETAIL_DESCRIPTIONS = {
|
|
|
252
252
|
},
|
|
253
253
|
[ANALYTICS_RETAIL_EVENTS.RETAIL_TICKET_CREATED]: {
|
|
254
254
|
en: 'Counts when a sales-point collect-later ticket is created before payment. One count per ticket row.',
|
|
255
|
-
cs: 'Počítá se při vytvoření lístku
|
|
255
|
+
cs: 'Počítá se při vytvoření lístku prodejního místa pro vyzvednutí později před zaplacením. Jednou za každý lístek.',
|
|
256
256
|
sk: 'Počíta sa pri vytvorení lístka platobného miesta na vyzdvihnutie neskôr pred zaplatením. Raz za každý lístok.',
|
|
257
257
|
},
|
|
258
258
|
[ANALYTICS_RETAIL_EVENTS.RETAIL_PICKUP_SCHEDULED]: {
|
|
@@ -312,7 +312,7 @@ const RETAIL_DESCRIPTIONS = {
|
|
|
312
312
|
},
|
|
313
313
|
[ANALYTICS_RETAIL_EVENTS.PICKUP_QR_SCANNED]: {
|
|
314
314
|
en: 'Counts when staff or sales point scans a pickup QR or short code to resolve an order. One count per scan.',
|
|
315
|
-
cs: 'Počítá se, když personál nebo
|
|
315
|
+
cs: 'Počítá se, když personál nebo prodejní místo naskenuje QR nebo krátký kód pro dohledání objednávky. Jednou za sken.',
|
|
316
316
|
sk: 'Počíta sa, keď personál alebo platobné miesto naskenuje QR alebo krátky kód na dohľadanie objednávky. Raz za sken.',
|
|
317
317
|
},
|
|
318
318
|
[ANALYTICS_RETAIL_EVENTS.PICKUP_STAFF_MARK_PAID]: {
|
|
@@ -342,7 +342,7 @@ const RETAIL_DESCRIPTIONS = {
|
|
|
342
342
|
},
|
|
343
343
|
[ANALYTICS_RETAIL_EVENTS.KIOSK_CASH_COMPLETE]: {
|
|
344
344
|
en: 'Counts when a sales point cash checkout completes successfully. One count per completed cash sale.',
|
|
345
|
-
cs: 'Počítá se při úspěšném dokončení hotovostní pokladny u
|
|
345
|
+
cs: 'Počítá se při úspěšném dokončení hotovostní pokladny u prodejního místa. Jednou za hotovostní prodej.',
|
|
346
346
|
sk: 'Počíta sa pri úspešnom dokončení hotovostnej pokladne pri platobnom mieste. Raz za hotovostný predaj.',
|
|
347
347
|
},
|
|
348
348
|
[ANALYTICS_RETAIL_EVENTS.CHECKOUT_COLLECT_CONFIGURED]: {
|
|
@@ -352,7 +352,7 @@ const RETAIL_DESCRIPTIONS = {
|
|
|
352
352
|
},
|
|
353
353
|
[ANALYTICS_RETAIL_EVENTS.SLUG_LEGACY_REDIRECT]: {
|
|
354
354
|
en: 'Counts when a legacy kioskId shop URL redirects to a slug-based sales point URL. One count per redirect.',
|
|
355
|
-
cs: 'Počítá se při přesměrování staré URL s kioskId na URL s identifikátorem
|
|
355
|
+
cs: 'Počítá se při přesměrování staré URL s kioskId na URL s identifikátorem prodejního místa. Jednou za přesměrování.',
|
|
356
356
|
sk: 'Počíta sa pri presmerovaní starej URL s kioskId na URL s identifikátorom platobného miesta. Raz za presmerovanie.',
|
|
357
357
|
},
|
|
358
358
|
[ANALYTICS_RETAIL_EVENTS.TENANT_SWITCHED]: {
|
|
@@ -411,12 +411,12 @@ const DONATION_DESCRIPTIONS = {
|
|
|
411
411
|
const KIOSK_DESCRIPTIONS = {
|
|
412
412
|
[ANALYTICS_KIOSK_EVENTS.KIOSK_WAKEUP]: {
|
|
413
413
|
en: 'Counts when the sales point wakes up from the idle attract screen because someone touched it or it starts up. One count per wake-up. Starting a full customer visit may be counted separately.',
|
|
414
|
-
cs: 'Počítá se, když se
|
|
414
|
+
cs: 'Počítá se, když se prodejní místo probudí z úvodní obrazovky po dotyku nebo při startu. Jednou za probuzení. Zahájení celé návštěvy zákazníka se může počítat zvlášť.',
|
|
415
415
|
sk: 'Počíta sa, keď sa platobné miesto prebudí z úvodnej obrazovky po dotyku alebo pri štarte. Raz za prebudenie. Začatie celej návštevy zákazníka sa môže počítať osobitne.',
|
|
416
416
|
},
|
|
417
417
|
[ANALYTICS_KIOSK_EVENTS.KIOSK_TIMEOUT]: {
|
|
418
418
|
en: 'Counts when the sales point sits unused too long and returns to the attract screen by itself. One count per timeout. Someone walking away mid-order may also count as visit abandoned.',
|
|
419
|
-
cs: 'Počítá se, když
|
|
419
|
+
cs: 'Počítá se, když prodejní místo dlouho nikdo nepoužívá a sám se vrátí na úvodní obrazovku. Jednou za vypršení času. Odejití uprostřed objednávky může být také „návštěva opuštěna“.',
|
|
420
420
|
sk: 'Počíta sa, keď platobné miesto dlho nikto nepoužíva a samo sa vráti na úvodnú obrazovku. Raz za vypršanie času. Odchod uprostred objednávky môže byť aj „návšteva opustená“.',
|
|
421
421
|
},
|
|
422
422
|
};
|
|
@@ -495,7 +495,7 @@ const SERVER_OPS_DESCRIPTIONS = {
|
|
|
495
495
|
},
|
|
496
496
|
[ANALYTICS_SERVER_OPS_EVENTS.PHYSICAL_CARD_REVOKED]: {
|
|
497
497
|
en: 'Counts when a physical loyalty card is revoked and can no longer be scanned at a sales point. Emitted server-side after admin revoke.',
|
|
498
|
-
cs: 'Počítá se, když je fyzická věrnostní karta zneplatněna a nelze ji již naskenovat na
|
|
498
|
+
cs: 'Počítá se, když je fyzická věrnostní karta zneplatněna a nelze ji již naskenovat na prodejním místě. Emituje server po zneplatnění administrátorem.',
|
|
499
499
|
sk: 'Počíta sa, keď je fyzická vernostná karta zneplatnená a už ju nemožno naskenovať na platobnom mieste. Emituje server po zneplatnení administrátorom.',
|
|
500
500
|
},
|
|
501
501
|
[ANALYTICS_SERVER_OPS_EVENTS.RECURRING_PAYMENT_MISSED]: {
|
|
@@ -222,7 +222,7 @@ const ANALYTICS_LABEL_OVERRIDES = {
|
|
|
222
222
|
},
|
|
223
223
|
kiosk_cash_complete: {
|
|
224
224
|
en: 'Sales point cash checkout complete',
|
|
225
|
-
cs: 'Hotovostní pokladna na
|
|
225
|
+
cs: 'Hotovostní pokladna na prodejním místě dokončena',
|
|
226
226
|
sk: 'Hotovostná pokladňa na platobnom mieste dokončená',
|
|
227
227
|
},
|
|
228
228
|
checkout_collect_configured: {
|
|
@@ -275,12 +275,12 @@ const ANALYTICS_LABEL_OVERRIDES = {
|
|
|
275
275
|
donation_abandoned: { en: 'Donation abandoned', cs: 'Darování opuštěno', sk: 'Darovanie opustené' },
|
|
276
276
|
kiosk_wakeup: {
|
|
277
277
|
en: 'Sales point woken up',
|
|
278
|
-
cs: '
|
|
278
|
+
cs: 'Prodejní místo probuzeno',
|
|
279
279
|
sk: 'Platobné miesto prebudené',
|
|
280
280
|
},
|
|
281
281
|
kiosk_timeout: {
|
|
282
282
|
en: 'Sales point timed out',
|
|
283
|
-
cs: '
|
|
283
|
+
cs: 'Prodejní místo — vypršení nečinnosti',
|
|
284
284
|
sk: 'Platobné miesto — vypršanie nečinnosti',
|
|
285
285
|
},
|
|
286
286
|
product_barcode_assigned: {
|
|
@@ -367,17 +367,17 @@ export const AUDIT_EVENT_DESCRIPTIONS = {
|
|
|
367
367
|
},
|
|
368
368
|
'admin.salesPoint.deactivated': {
|
|
369
369
|
en: 'Recorded when a sales point is turned off for customers. One line per sales point. Payments already in progress are handled separately.',
|
|
370
|
-
cs: 'Zapíše se, když je
|
|
370
|
+
cs: 'Zapíše se, když je prodejní místo vypnuté pro zákazníky. Jeden řádek za prodejní místo. Platby už rozjeté se řeší zvlášť.',
|
|
371
371
|
sk: 'Zapíše sa, keď je platobné miesto vypnuté pre zákazníkov. Jeden riadok za platobné miesto. Platby už rozbehnuté sa riešia osobitne.',
|
|
372
372
|
},
|
|
373
373
|
'admin.salesPoint.reactivated': {
|
|
374
374
|
en: 'Recorded when a turned-off sales point is enabled again. One line per sales point.',
|
|
375
|
-
cs: 'Zapíše se, když je vypnuté
|
|
375
|
+
cs: 'Zapíše se, když je vypnuté prodejní místo znovu zapnuté. Jeden řádek za prodejní místo.',
|
|
376
376
|
sk: 'Zapíše sa, keď je vypnuté platobné miesto znova zapnuté. Jeden riadok za platobné miesto.',
|
|
377
377
|
},
|
|
378
378
|
'admin.salesPoint.permanently_deleted': {
|
|
379
379
|
en: 'Recorded when a sales point is removed from the system for good. One line per sales point. Old payment and audit records stay for compliance.',
|
|
380
|
-
cs: 'Zapíše se, když je
|
|
380
|
+
cs: 'Zapíše se, když je prodejní místo trvale odstraněno ze systému. Jeden řádek za prodejní místo. Staré platby a audit zůstávají kvůli evidenci.',
|
|
381
381
|
sk: 'Zapíše sa, keď je platobné miesto trvale odstránené zo systému. Jeden riadok za platobné miesto. Staré platby a audit zostávajú kvôli evidencii.',
|
|
382
382
|
},
|
|
383
383
|
'admin.tenant.deactivated': {
|
|
@@ -487,12 +487,12 @@ export const AUDIT_EVENT_DESCRIPTIONS = {
|
|
|
487
487
|
},
|
|
488
488
|
'admin.salesPoint.donation_projects.updated': {
|
|
489
489
|
en: 'Recorded when which charity projects appear on a sales point is saved. One line per save. Project names are not all listed in the audit line.',
|
|
490
|
-
cs: 'Zapíše se při uložení toho, které dárkové projekty se na
|
|
490
|
+
cs: 'Zapíše se při uložení toho, které dárkové projekty se na prodejním místě zobrazují. Jeden řádek za uložení. Názvy všech projektů nejsou v řádku auditu.',
|
|
491
491
|
sk: 'Zapíše sa pri uložení toho, ktoré darčekové projekty sa na platobnom mieste zobrazujú. Jeden riadok za uloženie. Názvy všetkých projektov nie sú v riadku auditu.',
|
|
492
492
|
},
|
|
493
493
|
'admin.salesPoint.donation_amounts.updated': {
|
|
494
494
|
en: 'Recorded when donation amount presets linked to a sales point are updated. One line per save.',
|
|
495
|
-
cs: 'Zapíše se při aktualizaci přednastavených částek daru navázaných na
|
|
495
|
+
cs: 'Zapíše se při aktualizaci přednastavených částek daru navázaných na prodejní místo. Jeden řádek za uložení.',
|
|
496
496
|
sk: 'Zapíše sa pri aktualizácii prednastavených čiastok daru naviazaných na platobné miesto. Jeden riadok za uloženie.',
|
|
497
497
|
},
|
|
498
498
|
'admin.product.media_saved': {
|
|
@@ -512,12 +512,12 @@ export const AUDIT_EVENT_DESCRIPTIONS = {
|
|
|
512
512
|
},
|
|
513
513
|
'admin.loyalty.physical_card_issued': {
|
|
514
514
|
en: 'Recorded when an administrator issues a new physical loyalty card for sales point scanning. The full card payload is never stored in this log.',
|
|
515
|
-
cs: 'Zapíše se, když administrátor vydá novou fyzickou věrnostní kartu pro skenování na
|
|
515
|
+
cs: 'Zapíše se, když administrátor vydá novou fyzickou věrnostní kartu pro skenování na prodejním místě. Plná hodnota karty se v záznamu neukládá.',
|
|
516
516
|
sk: 'Zapíše sa, keď administrátor vydá novú fyzickú vernostnú kartu na skenovanie na platobnom mieste. Plná hodnota karty sa v zázname neukladá.',
|
|
517
517
|
},
|
|
518
518
|
'admin.loyalty.physical_card_revoked': {
|
|
519
519
|
en: 'Recorded when a physical loyalty card is revoked and can no longer be used at a sales point. One line per revoked card.',
|
|
520
|
-
cs: 'Zapíše se, když je fyzická věrnostní karta zneplatněna a nelze ji již použít na
|
|
520
|
+
cs: 'Zapíše se, když je fyzická věrnostní karta zneplatněna a nelze ji již použít na prodejním místě. Jeden řádek za zneplatněnou kartu.',
|
|
521
521
|
sk: 'Zapíše sa, keď je fyzická vernostná karta zneplatnená a už ju nie je možné použiť na platobnom mieste. Jeden riadok za zneplatnenú kartu.',
|
|
522
522
|
},
|
|
523
523
|
'admin.promo.event.created': {
|
|
@@ -747,12 +747,12 @@ export const AUDIT_EVENT_DESCRIPTIONS = {
|
|
|
747
747
|
},
|
|
748
748
|
'payment.cash_checkout.self_confirm': {
|
|
749
749
|
en: 'Recorded when a customer self-confirms sales point cash checkout (ADR-PICKUP-CASH).',
|
|
750
|
-
cs: 'Zapíše se po vlastním potvrzení hotovostní platby zákazníkem u
|
|
750
|
+
cs: 'Zapíše se po vlastním potvrzení hotovostní platby zákazníkem u prodejního místa (ADR-PICKUP-CASH).',
|
|
751
751
|
sk: 'Zapíše sa po vlastnom potvrdení hotovostnej platby zákazníkom pri platobnom mieste (ADR-PICKUP-CASH).',
|
|
752
752
|
},
|
|
753
753
|
'payment.cash_shift.opened': {
|
|
754
754
|
en: 'Recorded when a cash drawer shift is opened at a sales point.',
|
|
755
|
-
cs: 'Zapíše se při otevření hotovostní směny u
|
|
755
|
+
cs: 'Zapíše se při otevření hotovostní směny u prodejního místa.',
|
|
756
756
|
sk: 'Zapíše sa pri otvorení hotovostnej zmeny pri platobnom mieste.',
|
|
757
757
|
},
|
|
758
758
|
'payment.cash_shift.closed': {
|
|
@@ -762,7 +762,7 @@ export const AUDIT_EVENT_DESCRIPTIONS = {
|
|
|
762
762
|
},
|
|
763
763
|
'payment.cash_drawer.open_signal': {
|
|
764
764
|
en: 'Recorded when the sales point signals a physical drawer open after cash payment completion.',
|
|
765
|
-
cs: 'Zapíše se, když
|
|
765
|
+
cs: 'Zapíše se, když prodejní místo po dokončení hotovostní platby signalizuje otevření zásuvky.',
|
|
766
766
|
sk: 'Zapíše sa, keď platobné miesto po dokončení hotovostnej platby signalizuje otvorenie zásuvky.',
|
|
767
767
|
},
|
|
768
768
|
'export.analytics.explore.exported': {
|
package/dist/auditEventLabels.js
CHANGED
|
@@ -368,17 +368,17 @@ const AUDIT_LABEL_OVERRIDES = {
|
|
|
368
368
|
},
|
|
369
369
|
'admin.salesPoint.deactivated': {
|
|
370
370
|
en: 'Sales point deactivated',
|
|
371
|
-
cs: '
|
|
371
|
+
cs: 'Prodejní místo deaktivováno',
|
|
372
372
|
sk: 'Platobné miesto deaktivované',
|
|
373
373
|
},
|
|
374
374
|
'admin.salesPoint.reactivated': {
|
|
375
375
|
en: 'Sales point reactivated',
|
|
376
|
-
cs: '
|
|
376
|
+
cs: 'Prodejní místo znovu aktivováno',
|
|
377
377
|
sk: 'Platobné miesto znova aktivované',
|
|
378
378
|
},
|
|
379
379
|
'admin.salesPoint.permanently_deleted': {
|
|
380
380
|
en: 'Sales point permanently deleted',
|
|
381
|
-
cs: '
|
|
381
|
+
cs: 'Prodejní místo trvale smazáno',
|
|
382
382
|
sk: 'Platobné miesto trvalo zmazané',
|
|
383
383
|
},
|
|
384
384
|
'admin.tenant.deactivated': {
|
|
@@ -488,12 +488,12 @@ const AUDIT_LABEL_OVERRIDES = {
|
|
|
488
488
|
},
|
|
489
489
|
'admin.salesPoint.donation_projects.updated': {
|
|
490
490
|
en: 'Sales point donation projects updated',
|
|
491
|
-
cs: 'Projekty daru na
|
|
491
|
+
cs: 'Projekty daru na prodejním místě upraveny',
|
|
492
492
|
sk: 'Projekty daru na platobnom mieste upravené',
|
|
493
493
|
},
|
|
494
494
|
'admin.salesPoint.donation_amounts.updated': {
|
|
495
495
|
en: 'Sales point donation amounts updated',
|
|
496
|
-
cs: 'Částky daru na
|
|
496
|
+
cs: 'Částky daru na prodejním místě upraveny',
|
|
497
497
|
sk: 'Čiastky daru na platobnom mieste upravené',
|
|
498
498
|
},
|
|
499
499
|
'admin.product.media_saved': {
|
|
@@ -748,7 +748,7 @@ const AUDIT_LABEL_OVERRIDES = {
|
|
|
748
748
|
},
|
|
749
749
|
'payment.cash_checkout.self_confirm': {
|
|
750
750
|
en: 'sales point cash checkout self-confirmed',
|
|
751
|
-
cs: 'Hotovostní platba u
|
|
751
|
+
cs: 'Hotovostní platba u prodejního místa potvrzena zákazníkem',
|
|
752
752
|
sk: 'Hotovostná platba pri platobnom mieste potvrdená zákazníkom',
|
|
753
753
|
},
|
|
754
754
|
'payment.cash_shift.opened': {
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
* Backend may send additive `wordmarkUrl` on customer-tenants / memberships DTOs;
|
|
5
5
|
* live directory thumbs and tenant chips must ignore it. `applyToCustomerPwa`
|
|
6
6
|
* gating is server-side (null `logoUrl` / `tenantLogoUrl` when flag off).
|
|
7
|
+
*
|
|
8
|
+
* Logo chip rim: see `logoChipRim.ts` — wire may omit rim fields; normalize
|
|
9
|
+
* always fills the four required slots (defaults when absent/invalid).
|
|
7
10
|
*/
|
|
11
|
+
import { type LogoChipRimSettings } from './logoChipRim.js';
|
|
8
12
|
/** Normalize a square logo stream URL for consumer thumbs/chips; null when absent/blank. */
|
|
9
13
|
export declare function resolveConsumerSquareLogoUrl(value: unknown): string | null;
|
|
10
|
-
export interface ConsumerPublicTenantRow {
|
|
14
|
+
export interface ConsumerPublicTenantRow extends LogoChipRimSettings {
|
|
11
15
|
readonly tenantId: number;
|
|
12
16
|
readonly code: string;
|
|
13
17
|
readonly name: string;
|
|
@@ -17,6 +21,7 @@ export interface ConsumerPublicTenantRow {
|
|
|
17
21
|
/**
|
|
18
22
|
* Pick public tenant-directory fields from a wire row.
|
|
19
23
|
* Ignores additive `wordmarkUrl` even when present on the payload.
|
|
24
|
+
* Preserves logo-chip rim fields (coerce invalid → defaults; never strip).
|
|
20
25
|
*/
|
|
21
26
|
export declare function normalizeConsumerPublicTenantRow(raw: unknown): ConsumerPublicTenantRow | null;
|
|
22
27
|
//# sourceMappingURL=consumerSquareLogo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumerSquareLogo.d.ts","sourceRoot":"","sources":["../../src/branding/consumerSquareLogo.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"consumerSquareLogo.d.ts","sourceRoot":"","sources":["../../src/branding/consumerSquareLogo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,4FAA4F;AAC5F,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM1E;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAoB7F"}
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
* Backend may send additive `wordmarkUrl` on customer-tenants / memberships DTOs;
|
|
5
5
|
* live directory thumbs and tenant chips must ignore it. `applyToCustomerPwa`
|
|
6
6
|
* gating is server-side (null `logoUrl` / `tenantLogoUrl` when flag off).
|
|
7
|
+
*
|
|
8
|
+
* Logo chip rim: see `logoChipRim.ts` — wire may omit rim fields; normalize
|
|
9
|
+
* always fills the four required slots (defaults when absent/invalid).
|
|
7
10
|
*/
|
|
11
|
+
import { normalizeLogoChipRimSettings, } from './logoChipRim.js';
|
|
8
12
|
/** Normalize a square logo stream URL for consumer thumbs/chips; null when absent/blank. */
|
|
9
13
|
export function resolveConsumerSquareLogoUrl(value) {
|
|
10
14
|
if (typeof value !== 'string') {
|
|
@@ -16,6 +20,7 @@ export function resolveConsumerSquareLogoUrl(value) {
|
|
|
16
20
|
/**
|
|
17
21
|
* Pick public tenant-directory fields from a wire row.
|
|
18
22
|
* Ignores additive `wordmarkUrl` even when present on the payload.
|
|
23
|
+
* Preserves logo-chip rim fields (coerce invalid → defaults; never strip).
|
|
19
24
|
*/
|
|
20
25
|
export function normalizeConsumerPublicTenantRow(raw) {
|
|
21
26
|
if (raw === null || typeof raw !== 'object') {
|
|
@@ -26,11 +31,16 @@ export function normalizeConsumerPublicTenantRow(raw) {
|
|
|
26
31
|
if (typeof tenantId !== 'number' || typeof code !== 'string' || typeof name !== 'string') {
|
|
27
32
|
return null;
|
|
28
33
|
}
|
|
34
|
+
const rim = normalizeLogoChipRimSettings(row);
|
|
29
35
|
return {
|
|
30
36
|
tenantId,
|
|
31
37
|
code,
|
|
32
38
|
name,
|
|
33
39
|
logoUrl: resolveConsumerSquareLogoUrl(row.logoUrl),
|
|
40
|
+
showLogoChipRimLight: rim.showLogoChipRimLight,
|
|
41
|
+
showLogoChipRimDark: rim.showLogoChipRimDark,
|
|
42
|
+
logoChipRimColorLight: rim.logoChipRimColorLight,
|
|
43
|
+
logoChipRimColorDark: rim.logoChipRimColorDark,
|
|
34
44
|
};
|
|
35
45
|
}
|
|
36
46
|
//# sourceMappingURL=consumerSquareLogo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumerSquareLogo.js","sourceRoot":"","sources":["../../src/branding/consumerSquareLogo.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"consumerSquareLogo.js","sourceRoot":"","sources":["../../src/branding/consumerSquareLogo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,4BAA4B,GAE7B,MAAM,kBAAkB,CAAC;AAE1B,4FAA4F;AAC5F,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAY;IAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC;QAClD,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;QAC9C,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,qBAAqB,EAAE,GAAG,CAAC,qBAAqB;QAChD,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logo chip rim (thin border around square tenant marks).
|
|
3
|
+
*
|
|
4
|
+
* Consumers apply the active theme via CSS custom property `--logo-chip-rim`:
|
|
5
|
+
* set to `color` when `show` is true; omit/unset when hide.
|
|
6
|
+
*/
|
|
7
|
+
export interface LogoChipRimSettings {
|
|
8
|
+
readonly showLogoChipRimLight: boolean;
|
|
9
|
+
readonly showLogoChipRimDark: boolean;
|
|
10
|
+
readonly logoChipRimColorLight: string;
|
|
11
|
+
readonly logoChipRimColorDark: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const DEFAULT_LOGO_CHIP_RIM_COLOR_LIGHT = "#737373";
|
|
14
|
+
export declare const DEFAULT_LOGO_CHIP_RIM_COLOR_DARK = "#a3a3a3";
|
|
15
|
+
export declare const DEFAULT_LOGO_CHIP_RIM_SETTINGS: LogoChipRimSettings;
|
|
16
|
+
export type LogoChipRimTheme = 'light' | 'dark';
|
|
17
|
+
/** True when value is a `#RRGGBB` (case-insensitive hex digits). */
|
|
18
|
+
export declare function isLogoChipRimColor(value: unknown): value is string;
|
|
19
|
+
/**
|
|
20
|
+
* Coerce wire/partial rim fields to a full {@link LogoChipRimSettings}.
|
|
21
|
+
* Invalid or absent values become {@link DEFAULT_LOGO_CHIP_RIM_SETTINGS} slots —
|
|
22
|
+
* fields are never stripped.
|
|
23
|
+
*/
|
|
24
|
+
export declare function normalizeLogoChipRimSettings(raw: unknown): LogoChipRimSettings;
|
|
25
|
+
/**
|
|
26
|
+
* Returns `{ show, color }` for the active theme.
|
|
27
|
+
*
|
|
28
|
+
* Consumers: when `show` is true, set CSS `--logo-chip-rim` to `color`;
|
|
29
|
+
* when hide, omit/unset `--logo-chip-rim`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveLogoChipRimForTheme(settings: LogoChipRimSettings, theme: LogoChipRimTheme): {
|
|
32
|
+
readonly show: boolean;
|
|
33
|
+
readonly color: string;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=logoChipRim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logoChipRim.d.ts","sourceRoot":"","sources":["../../src/branding/logoChipRim.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,eAAO,MAAM,iCAAiC,YAAY,CAAC;AAC3D,eAAO,MAAM,gCAAgC,YAAY,CAAC;AAE1D,eAAO,MAAM,8BAA8B,EAAE,mBAK5C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAIhD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAElE;AAUD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAqB9E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,gBAAgB,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAWpD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logo chip rim (thin border around square tenant marks).
|
|
3
|
+
*
|
|
4
|
+
* Consumers apply the active theme via CSS custom property `--logo-chip-rim`:
|
|
5
|
+
* set to `color` when `show` is true; omit/unset when hide.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_LOGO_CHIP_RIM_COLOR_LIGHT = '#737373';
|
|
8
|
+
export const DEFAULT_LOGO_CHIP_RIM_COLOR_DARK = '#a3a3a3';
|
|
9
|
+
export const DEFAULT_LOGO_CHIP_RIM_SETTINGS = {
|
|
10
|
+
showLogoChipRimLight: false,
|
|
11
|
+
showLogoChipRimDark: false,
|
|
12
|
+
logoChipRimColorLight: DEFAULT_LOGO_CHIP_RIM_COLOR_LIGHT,
|
|
13
|
+
logoChipRimColorDark: DEFAULT_LOGO_CHIP_RIM_COLOR_DARK,
|
|
14
|
+
};
|
|
15
|
+
const HEX_RRGGBB = /^#[0-9A-Fa-f]{6}$/;
|
|
16
|
+
/** True when value is a `#RRGGBB` (case-insensitive hex digits). */
|
|
17
|
+
export function isLogoChipRimColor(value) {
|
|
18
|
+
return typeof value === 'string' && HEX_RRGGBB.test(value);
|
|
19
|
+
}
|
|
20
|
+
function coerceRimShow(value, fallback) {
|
|
21
|
+
return typeof value === 'boolean' ? value : fallback;
|
|
22
|
+
}
|
|
23
|
+
function coerceRimColor(value, fallback) {
|
|
24
|
+
return isLogoChipRimColor(value) ? value : fallback;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Coerce wire/partial rim fields to a full {@link LogoChipRimSettings}.
|
|
28
|
+
* Invalid or absent values become {@link DEFAULT_LOGO_CHIP_RIM_SETTINGS} slots —
|
|
29
|
+
* fields are never stripped.
|
|
30
|
+
*/
|
|
31
|
+
export function normalizeLogoChipRimSettings(raw) {
|
|
32
|
+
const row = raw !== null && typeof raw === 'object' ? raw : {};
|
|
33
|
+
return {
|
|
34
|
+
showLogoChipRimLight: coerceRimShow(row.showLogoChipRimLight, DEFAULT_LOGO_CHIP_RIM_SETTINGS.showLogoChipRimLight),
|
|
35
|
+
showLogoChipRimDark: coerceRimShow(row.showLogoChipRimDark, DEFAULT_LOGO_CHIP_RIM_SETTINGS.showLogoChipRimDark),
|
|
36
|
+
logoChipRimColorLight: coerceRimColor(row.logoChipRimColorLight, DEFAULT_LOGO_CHIP_RIM_SETTINGS.logoChipRimColorLight),
|
|
37
|
+
logoChipRimColorDark: coerceRimColor(row.logoChipRimColorDark, DEFAULT_LOGO_CHIP_RIM_SETTINGS.logoChipRimColorDark),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns `{ show, color }` for the active theme.
|
|
42
|
+
*
|
|
43
|
+
* Consumers: when `show` is true, set CSS `--logo-chip-rim` to `color`;
|
|
44
|
+
* when hide, omit/unset `--logo-chip-rim`.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveLogoChipRimForTheme(settings, theme) {
|
|
47
|
+
if (theme === 'dark') {
|
|
48
|
+
return {
|
|
49
|
+
show: settings.showLogoChipRimDark,
|
|
50
|
+
color: settings.logoChipRimColorDark,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
show: settings.showLogoChipRimLight,
|
|
55
|
+
color: settings.logoChipRimColorLight,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=logoChipRim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logoChipRim.js","sourceRoot":"","sources":["../../src/branding/logoChipRim.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,CAAC,MAAM,iCAAiC,GAAG,SAAS,CAAC;AAC3D,MAAM,CAAC,MAAM,gCAAgC,GAAG,SAAS,CAAC;AAE1D,MAAM,CAAC,MAAM,8BAA8B,GAAwB;IACjE,oBAAoB,EAAE,KAAK;IAC3B,mBAAmB,EAAE,KAAK;IAC1B,qBAAqB,EAAE,iCAAiC;IACxD,oBAAoB,EAAE,gCAAgC;CACvD,CAAC;AAIF,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,QAAiB;IACtD,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,QAAgB;IACtD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,GAAY;IACvD,MAAM,GAAG,GACP,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,GAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,OAAO;QACL,oBAAoB,EAAE,aAAa,CACjC,GAAG,CAAC,oBAAoB,EACxB,8BAA8B,CAAC,oBAAoB,CACpD;QACD,mBAAmB,EAAE,aAAa,CAChC,GAAG,CAAC,mBAAmB,EACvB,8BAA8B,CAAC,mBAAmB,CACnD;QACD,qBAAqB,EAAE,cAAc,CACnC,GAAG,CAAC,qBAAqB,EACzB,8BAA8B,CAAC,qBAAqB,CACrD;QACD,oBAAoB,EAAE,cAAc,CAClC,GAAG,CAAC,oBAAoB,EACxB,8BAA8B,CAAC,oBAAoB,CACpD;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAA6B,EAC7B,KAAuB;IAEvB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,mBAAmB;YAClC,KAAK,EAAE,QAAQ,CAAC,oBAAoB;SACrC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,oBAAoB;QACnC,KAAK,EAAE,QAAQ,CAAC,qBAAqB;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branding stream URLs are HMAC-signed with a fresh `sig` + `exp` on every list mint.
|
|
3
|
+
* Soft-refresh / focus refetch must not treat that as a new asset — remounting `<img>`
|
|
4
|
+
* causes visible logo flicker on org pickers and login brand chrome.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Stable identity for a signed branding (or catalog) media URL — path + durable query
|
|
8
|
+
* params (`galleryVersion`, `tenantId`, …), excluding `sig` / `exp`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function brandingSignedMediaIdentity(url: string | null | undefined): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* When soft-refresh returns a newly signed URL for the same asset, keep the prior URL
|
|
13
|
+
* so browsers keep the decoded image (no blank remount). Prefer `next` when identity differs
|
|
14
|
+
* or there was no prior.
|
|
15
|
+
*/
|
|
16
|
+
export declare function preferStableBrandingMediaUrl(previous: string | null | undefined, next: string | null | undefined): string | null;
|
|
17
|
+
//# sourceMappingURL=signedMediaUrlStability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signedMediaUrlStability.d.ts","sourceRoot":"","sources":["../../src/branding/signedMediaUrlStability.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,MAAM,GAAG,IAAI,CAoBf;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,MAAM,GAAG,IAAI,CAef"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branding stream URLs are HMAC-signed with a fresh `sig` + `exp` on every list mint.
|
|
3
|
+
* Soft-refresh / focus refetch must not treat that as a new asset — remounting `<img>`
|
|
4
|
+
* causes visible logo flicker on org pickers and login brand chrome.
|
|
5
|
+
*/
|
|
6
|
+
const EPHEMERAL_QUERY_KEYS = new Set(['sig', 'exp']);
|
|
7
|
+
function trimOrNull(url) {
|
|
8
|
+
if (typeof url !== 'string') {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const trimmed = url.trim();
|
|
12
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Stable identity for a signed branding (or catalog) media URL — path + durable query
|
|
16
|
+
* params (`galleryVersion`, `tenantId`, …), excluding `sig` / `exp`.
|
|
17
|
+
*/
|
|
18
|
+
export function brandingSignedMediaIdentity(url) {
|
|
19
|
+
const trimmed = trimOrNull(url);
|
|
20
|
+
if (trimmed === null) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const parsed = new URL(trimmed, 'http://branding.local');
|
|
25
|
+
const durable = new URLSearchParams();
|
|
26
|
+
parsed.searchParams.forEach((value, key) => {
|
|
27
|
+
if (!EPHEMERAL_QUERY_KEYS.has(key)) {
|
|
28
|
+
durable.append(key, value);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
durable.sort();
|
|
32
|
+
const query = durable.toString();
|
|
33
|
+
return query.length > 0 ? `${parsed.pathname}?${query}` : parsed.pathname;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return trimmed;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* When soft-refresh returns a newly signed URL for the same asset, keep the prior URL
|
|
41
|
+
* so browsers keep the decoded image (no blank remount). Prefer `next` when identity differs
|
|
42
|
+
* or there was no prior.
|
|
43
|
+
*/
|
|
44
|
+
export function preferStableBrandingMediaUrl(previous, next) {
|
|
45
|
+
const prev = trimOrNull(previous);
|
|
46
|
+
const nxt = trimOrNull(next);
|
|
47
|
+
if (nxt === null) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if (prev === null) {
|
|
51
|
+
return nxt;
|
|
52
|
+
}
|
|
53
|
+
const prevId = brandingSignedMediaIdentity(prev);
|
|
54
|
+
const nextId = brandingSignedMediaIdentity(nxt);
|
|
55
|
+
if (prevId !== null && prevId === nextId) {
|
|
56
|
+
return prev;
|
|
57
|
+
}
|
|
58
|
+
return nxt;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=signedMediaUrlStability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signedMediaUrlStability.js","sourceRoot":"","sources":["../../src/branding/signedMediaUrlStability.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAErD,SAAS,UAAU,CAAC,GAA8B;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,GAA8B;IAE9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAmC,EACnC,IAA+B;IAE/B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import type { CatalogImageFocal, KioskProduct } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* IMG-014 metadata-only SSE patch. Clients may rewrite existing signed
|
|
4
|
+
* `imageUrl` / `thumbnailUrl` query strings with a cache-bust param (`v`) —
|
|
5
|
+
* never invent or replace signed URL paths from the broadcast (no imageUrl in payload).
|
|
6
|
+
*
|
|
7
|
+
* Contract: HMAC verify ignores `v` (not in canonical payload); stream query
|
|
8
|
+
* schemas must allow optional `v` so patched URLs still validate.
|
|
9
|
+
*
|
|
10
|
+
* Bust key preference: `catalogSequence` → `primaryImageId` → `updatedAt`.
|
|
11
|
+
* When SSE is fully unavailable, customer/kiosk fall back to ~30s catalog poll;
|
|
12
|
+
* this patch path does not run until the next successful poll/refetch.
|
|
13
|
+
*/
|
|
2
14
|
export interface CatalogProductMediaPatch extends CatalogImageFocal {
|
|
3
15
|
productId: number;
|
|
4
16
|
variantId?: number | null;
|
|
5
17
|
primaryImageId?: number | null;
|
|
18
|
+
/** Product.galleryVersion from save broadcast — preferred cache-bust key. */
|
|
19
|
+
catalogSequence?: number;
|
|
6
20
|
updatedAt?: string;
|
|
7
21
|
}
|
|
22
|
+
export declare function resolveCatalogMediaCacheBustKey(patch: Pick<CatalogProductMediaPatch, 'catalogSequence' | 'primaryImageId' | 'updatedAt'>): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Append or replace client-only `v` on an existing catalog image URL.
|
|
25
|
+
* Does not touch `sig` / `exp` / `imageId` (HMAC stays valid — verify ignores `v`;
|
|
26
|
+
* server stream schema must accept optional `v`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyCatalogMediaUrlCacheBust(url: string | null | undefined, bustKey: string): string | null | undefined;
|
|
8
29
|
export declare function patchCatalogProductMedia(products: readonly KioskProduct[], patch: CatalogProductMediaPatch): KioskProduct[];
|
|
9
30
|
//# sourceMappingURL=catalogMediaPatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogMediaPatch.d.ts","sourceRoot":"","sources":["../src/catalogMediaPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,KAAK,EAAE,wBAAwB,GAC9B,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"catalogMediaPatch.d.ts","sourceRoot":"","sources":["../src/catalogMediaPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC,GACxF,MAAM,GAAG,IAAI,CAWf;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,GAAG,SAAS,CA4B3B;AAaD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,KAAK,EAAE,wBAAwB,GAC9B,YAAY,EAAE,CAgDhB"}
|