pi-kiosk-shared 2.2.61 → 2.2.63

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.
@@ -1,24 +1,26 @@
1
1
  export { createCrossTabBus, type CrossTabBus, type CrossTabPublishOptions, } from './CrossTabBus.js';
2
- /** In-memory session hand-off for same-origin tabs when no refresh cookie exists. */
3
- export interface CustomerAuthCrossTabSessionSnapshot {
4
- accessToken: string;
5
- refreshToken: string;
6
- customerId: number;
7
- tenantId: number;
8
- membershipStatus: 'ACTIVE';
9
- }
2
+ export { shouldHonorAdminAuthBusMessage, type AdminAuthHonorMessage, type ShouldHonorAdminAuthBusMessageContext, } from './shouldHonorAdminAuthBusMessage.js';
3
+ export { markSameTabExplicitAuth, hasSameTabExplicitAuth, clearSameTabExplicitAuth, } from './sameTabExplicitAuth.js';
4
+ /** Customer XT scope — `platform` always honored (admin XT-G12 parity). */
5
+ export type CustomerAuthCrossTabScope = 'platform' | 'tenant';
6
+ /**
7
+ * Logout bus scope (G8 / admin XT-G2 parity):
8
+ * - `platform` | `tenant` — default publish; honor platform always / tenant home match
9
+ * - `global` — intentional logout-all only (nuclear all shells)
10
+ */
11
+ export type CustomerAuthLogoutCrossTabScope = CustomerAuthCrossTabScope | 'global';
10
12
  export type CustomerAuthCrossTabMessage = {
11
13
  type: 'login';
12
14
  tenantCode: string;
13
- /** Present when login did not persist an HttpOnly refresh cookie. */
14
- session?: CustomerAuthCrossTabSessionSnapshot;
15
+ scope?: CustomerAuthCrossTabScope;
15
16
  } | {
16
17
  type: 'logout';
17
18
  tenantCode: string;
18
- scope?: 'global';
19
+ scope?: CustomerAuthLogoutCrossTabScope;
19
20
  } | {
20
21
  type: 'session-refreshed';
21
22
  tenantCode: string;
23
+ scope?: CustomerAuthCrossTabScope;
22
24
  };
23
25
  export type CustomerConsentCrossTabMessage = {
24
26
  type: 'consent-updated';
@@ -38,19 +40,25 @@ export type KioskTabCrossTabMessage = {
38
40
  } | {
39
41
  type: 'staff-logout';
40
42
  };
43
+ /** XT-G12 — optional bus scope; `platform` always honored by `shouldHonorAdminAuthBusMessage`. */
44
+ export type AdminAuthCrossTabScope = 'platform' | 'tenant';
41
45
  export type AdminAuthCrossTabMessage = {
42
46
  type: 'login';
43
47
  tenantCode: string;
48
+ scope?: AdminAuthCrossTabScope;
44
49
  } | {
45
50
  type: 'logout';
46
51
  tenantCode: string;
52
+ scope?: AdminAuthCrossTabScope;
47
53
  } | {
48
54
  type: 'session-refreshed';
49
55
  tenantCode: string;
56
+ scope?: AdminAuthCrossTabScope;
50
57
  } | {
51
58
  type: 'tenant-changed';
52
59
  tenantCode: string;
53
60
  previousTenantCode?: string;
61
+ scope?: AdminAuthCrossTabScope;
54
62
  };
55
63
  export type PickupStaffAuthCrossTabMessage = {
56
64
  type: 'login';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crossTab/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC;AAE1B,qFAAqF;AACrF,MAAM,WAAW,mCAAmC;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,QAAQ,CAAC;CAC5B;AAED,MAAM,MAAM,2BAA2B,GACnC;IACE,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,mCAAmC,CAAC;CAC/C,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,iBAAiB,CAAC;IACxB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAC9B,iFAAiF;IACjF,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,gCAAgC,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAE7B,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACjD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEN,MAAM,MAAM,8BAA8B,GACtC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,0BAA0B,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAExF,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AACjE,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AACnD,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AACzD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAEnE,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,8BAA8B,iCAAiC,CAAC;AAE7E,MAAM,MAAM,mCAAmC,GAAG;IAChD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crossTab/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export { createCrossTabBus, } from './CrossTabBus.js';
2
+ export { shouldHonorAdminAuthBusMessage, } from './shouldHonorAdminAuthBusMessage.js';
3
+ export { markSameTabExplicitAuth, hasSameTabExplicitAuth, clearSameTabExplicitAuth, } from './sameTabExplicitAuth.js';
2
4
  export const CUSTOMER_AUTH_CHANNEL = 'rpapp-customer-auth';
3
5
  export const CUSTOMER_CONSENT_CHANNEL = 'rpapp-customer-consent';
4
6
  export const KIOSK_TAB_CHANNEL = 'rpapp-kiosk-tab';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crossTab/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAGlB,MAAM,kBAAkB,CAAC;AA8D1B,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAS3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crossTab/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAGlB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,8BAA8B,GAG/B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAsElC,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAS3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Same-tab login / establish marker that survives provider remount.
3
+ *
4
+ * Port of customer `sameTabExplicitAuth` for admin (and other) auth buses.
5
+ * Login tabs publish auth-bus messages with notifyLocalSubscribers:false, but
6
+ * remount races can still re-enter the bus subscriber as if this were a peer tab.
7
+ * The TTL latch skips same-tab login bus re-entry so a fresh session is not
8
+ * force-hydrated away. Logout must not self-echo — publishers use
9
+ * notifyLocalSubscribers:false (CrossTabBus).
10
+ *
11
+ * Never put JWTs on the bus; this module only tracks a wall-clock TTL.
12
+ */
13
+ export declare function markSameTabExplicitAuth(nowMs?: number): void;
14
+ export declare function hasSameTabExplicitAuth(nowMs?: number): boolean;
15
+ export declare function clearSameTabExplicitAuth(): void;
16
+ //# sourceMappingURL=sameTabExplicitAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sameTabExplicitAuth.d.ts","sourceRoot":"","sources":["../../src/crossTab/sameTabExplicitAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,wBAAgB,uBAAuB,CAAC,KAAK,GAAE,MAAmB,GAAG,IAAI,CAExE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,MAAmB,GAAG,OAAO,CAE1E;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Same-tab login / establish marker that survives provider remount.
3
+ *
4
+ * Port of customer `sameTabExplicitAuth` for admin (and other) auth buses.
5
+ * Login tabs publish auth-bus messages with notifyLocalSubscribers:false, but
6
+ * remount races can still re-enter the bus subscriber as if this were a peer tab.
7
+ * The TTL latch skips same-tab login bus re-entry so a fresh session is not
8
+ * force-hydrated away. Logout must not self-echo — publishers use
9
+ * notifyLocalSubscribers:false (CrossTabBus).
10
+ *
11
+ * Never put JWTs on the bus; this module only tracks a wall-clock TTL.
12
+ */
13
+ const SAME_TAB_EXPLICIT_AUTH_TTL_MS = 8_000;
14
+ let sameTabExplicitAuthUntilMs = 0;
15
+ export function markSameTabExplicitAuth(nowMs = Date.now()) {
16
+ sameTabExplicitAuthUntilMs = nowMs + SAME_TAB_EXPLICIT_AUTH_TTL_MS;
17
+ }
18
+ export function hasSameTabExplicitAuth(nowMs = Date.now()) {
19
+ return nowMs < sameTabExplicitAuthUntilMs;
20
+ }
21
+ export function clearSameTabExplicitAuth() {
22
+ sameTabExplicitAuthUntilMs = 0;
23
+ }
24
+ //# sourceMappingURL=sameTabExplicitAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sameTabExplicitAuth.js","sourceRoot":"","sources":["../../src/crossTab/sameTabExplicitAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C,IAAI,0BAA0B,GAAG,CAAC,CAAC;AAEnC,MAAM,UAAU,uBAAuB,CAAC,QAAgB,IAAI,CAAC,GAAG,EAAE;IAChE,0BAA0B,GAAG,KAAK,GAAG,6BAA6B,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,IAAI,CAAC,GAAG,EAAE;IAC/D,OAAO,KAAK,GAAG,0BAA0B,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,0BAA0B,GAAG,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Structural admin auth-bus message shape for honor filtering (G21 / XT-G12).
3
+ * Kept local so this module does not circular-import `./index.js`.
4
+ * Compatible with `AdminAuthCrossTabMessage`.
5
+ */
6
+ export type AdminAuthHonorMessage = {
7
+ readonly type: string;
8
+ readonly tenantCode: string;
9
+ readonly scope?: 'platform' | 'tenant';
10
+ };
11
+ /**
12
+ * Session context for admin auth-bus filtering (G21 / XT-G12).
13
+ * Pure inputs — callers supply session state; no JWT/cookie reads here
14
+ * and bus payloads must never carry JWTs.
15
+ */
16
+ export interface ShouldHonorAdminAuthBusMessageContext {
17
+ /** True when this tab has an authenticated admin session. */
18
+ readonly hasSession: boolean;
19
+ /**
20
+ * Home / scoped tenant code when known.
21
+ * `null` while authenticated but home is still pending (write race).
22
+ */
23
+ readonly homeTenantCode: string | null;
24
+ }
25
+ /**
26
+ * G21 — admin auth-bus filter (port of customer `shouldHonorAuthBusMessage`):
27
+ * - `scope: 'platform'` always honored (not dropped by stale tenant filter)
28
+ * - pending (session + homeTenantCode missing): honor login/session-refreshed
29
+ * for URL tenant; ignore other tenant-scoped messages
30
+ * - home set: honor only messages whose tenantCode === homeTenantCode
31
+ * - guest (no session): honor messages for the URL tenant
32
+ */
33
+ export declare function shouldHonorAdminAuthBusMessage(message: AdminAuthHonorMessage, urlTenantCode: string, context: ShouldHonorAdminAuthBusMessageContext): boolean;
34
+ //# sourceMappingURL=shouldHonorAdminAuthBusMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shouldHonorAdminAuthBusMessage.d.ts","sourceRoot":"","sources":["../../src/crossTab/shouldHonorAdminAuthBusMessage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACxC,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,qCAAqC;IACpD,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAgBT"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * G21 — admin auth-bus filter (port of customer `shouldHonorAuthBusMessage`):
3
+ * - `scope: 'platform'` always honored (not dropped by stale tenant filter)
4
+ * - pending (session + homeTenantCode missing): honor login/session-refreshed
5
+ * for URL tenant; ignore other tenant-scoped messages
6
+ * - home set: honor only messages whose tenantCode === homeTenantCode
7
+ * - guest (no session): honor messages for the URL tenant
8
+ */
9
+ export function shouldHonorAdminAuthBusMessage(message, urlTenantCode, context) {
10
+ if (message.scope === 'platform') {
11
+ return true;
12
+ }
13
+ const { hasSession, homeTenantCode } = context;
14
+ if (hasSession && homeTenantCode === null) {
15
+ if (message.type === 'login' || message.type === 'session-refreshed') {
16
+ return message.tenantCode === urlTenantCode;
17
+ }
18
+ return false;
19
+ }
20
+ const scopeTenant = homeTenantCode ?? urlTenantCode;
21
+ return message.tenantCode === scopeTenant;
22
+ }
23
+ //# sourceMappingURL=shouldHonorAdminAuthBusMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shouldHonorAdminAuthBusMessage.js","sourceRoot":"","sources":["../../src/crossTab/shouldHonorAdminAuthBusMessage.ts"],"names":[],"mappings":"AA0BA;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAA8B,EAC9B,aAAqB,EACrB,OAA8C;IAE9C,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAE/C,IAAI,UAAU,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACrE,OAAO,OAAO,CAAC,UAAU,KAAK,aAAa,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,IAAI,aAAa,CAAC;IACpD,OAAO,OAAO,CAAC,UAAU,KAAK,WAAW,CAAC;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAQ5C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9E,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAgBD;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAmB,EACnB,SAAS,EACT,YAAwB,EACxB,SAAS,EACT,MAAgB,EAChB,IAAW,EACX,OAAe,EACf,GAAG,IAAI,EACR,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,CAqC1B"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAQ5C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9E,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAiBD;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAmB,EACnB,SAAS,EACT,YAAwB,EACxB,SAAS,EACT,MAAgB,EAChB,IAAW,EACX,OAAe,EACf,GAAG,IAAI,EACR,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,CAqC1B"}
@@ -2,10 +2,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { OVERLAY_MOTION_ENTERED, OVERLAY_MOTION_EXITED, OVERLAY_MOTION_TRANSITION, useOverlayPresence, } from '../overlay/overlayMotion.js';
3
3
  const VARIANT_CLASS = {
4
4
  default: 'border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-on-surface)]',
5
- success: 'border-[var(--color-success,var(--color-an-success))] bg-[color-mix(in_oklab,var(--color-success,var(--color-an-success))_12%,transparent)] text-[var(--color-success,var(--color-an-success))]',
6
- warn: 'border-[var(--color-warning,var(--color-an-warn))] bg-[color-mix(in_oklab,var(--color-warning,var(--color-an-warn))_12%,transparent)] text-[var(--color-warning,var(--color-an-warn))]',
7
- danger: 'border-[var(--color-danger,var(--color-an-danger))] bg-[color-mix(in_oklab,var(--color-danger,var(--color-an-danger))_12%,transparent)] text-[var(--color-danger,var(--color-an-danger))]',
8
- info: 'border-[var(--color-info,#0ea5e9)] bg-[color-mix(in_oklab,var(--color-info,#0ea5e9)_12%,transparent)] text-[var(--color-info,#0ea5e9)]',
5
+ // Mix tint into opaque surface (not transparent) so page text never bleeds through.
6
+ success: 'border-[var(--color-success,var(--color-an-success))] bg-[color-mix(in_oklab,var(--color-success,var(--color-an-success))_12%,var(--color-surface-elevated,var(--color-surface)))] text-[var(--color-success,var(--color-an-success))]',
7
+ warn: 'border-[var(--color-warning,var(--color-an-warn))] bg-[color-mix(in_oklab,var(--color-warning,var(--color-an-warn))_12%,var(--color-surface-elevated,var(--color-surface)))] text-[var(--color-warning,var(--color-an-warn))]',
8
+ danger: 'border-[var(--color-danger,var(--color-an-danger))] bg-[color-mix(in_oklab,var(--color-danger,var(--color-an-danger))_12%,var(--color-surface-elevated,var(--color-surface)))] text-[var(--color-danger,var(--color-an-danger))]',
9
+ info: 'border-[var(--color-info,#0ea5e9)] bg-[color-mix(in_oklab,var(--color-info,#0ea5e9)_12%,var(--color-surface-elevated,var(--color-surface)))] text-[var(--color-info,#0ea5e9)]',
9
10
  };
10
11
  function toastAriaLive(variant) {
11
12
  return variant === 'danger' || variant === 'warn' ? 'assertive' : 'polite';
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAmBrC,MAAM,aAAa,GAAiC;IAClD,OAAO,EAAE,uFAAuF;IAChG,OAAO,EACL,iMAAiM;IACnM,IAAI,EAAE,wLAAwL;IAC9L,MAAM,EACJ,2LAA2L;IAC7L,IAAI,EAAE,wIAAwI;CAC/I,CAAC;AAEF,SAAS,aAAa,CAAC,OAAqB;IAC1C,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,GAAG,SAAS,EACnB,SAAS,EACT,YAAY,GAAG,SAAS,EACxB,SAAS,EACT,MAAM,GAAG,OAAO,EAChB,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,EACf,GAAG,IAAI,EACI;IACX,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACvE,OAAO,CACL,eACE,IAAI,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,eACxC,QAAQ,iBACP,MAAM,EAClB,SAAS,EAAE;YACT,sEAAsE;YACtE,aAAa,CAAC,OAAO,CAAC;YACtB,yBAAyB;YACzB,WAAW;YACX,SAAS;SACV;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,iBACC,MAAM,kBACL,OAAO,KACjB,IAAI,aAER,YAAG,SAAS,EAAC,YAAY,YAAE,OAAO,GAAK,EACtC,SAAS,CAAC,CAAC,CAAC,CACX,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0CAA0C,gBACxC,YAAY,EACxB,OAAO,EAAE,SAAS,iBACL,GAAG,MAAM,UAAU,YAE/B,YAAY,GACN,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAmBrC,MAAM,aAAa,GAAiC;IAClD,OAAO,EAAE,uFAAuF;IAChG,oFAAoF;IACpF,OAAO,EACL,wOAAwO;IAC1O,IAAI,EAAE,+NAA+N;IACrO,MAAM,EACJ,kOAAkO;IACpO,IAAI,EAAE,+KAA+K;CACtL,CAAC;AAEF,SAAS,aAAa,CAAC,OAAqB;IAC1C,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,GAAG,SAAS,EACnB,SAAS,EACT,YAAY,GAAG,SAAS,EACxB,SAAS,EACT,MAAM,GAAG,OAAO,EAChB,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,EACf,GAAG,IAAI,EACI;IACX,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACvE,OAAO,CACL,eACE,IAAI,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,eACxC,QAAQ,iBACP,MAAM,EAClB,SAAS,EAAE;YACT,sEAAsE;YACtE,aAAa,CAAC,OAAO,CAAC;YACtB,yBAAyB;YACzB,WAAW;YACX,SAAS;SACV;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,iBACC,MAAM,kBACL,OAAO,KACjB,IAAI,aAER,YAAG,SAAS,EAAC,YAAY,YAAE,OAAO,GAAK,EACtC,SAAS,CAAC,CAAC,CAAC,CACX,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0CAA0C,gBACxC,YAAY,EACxB,OAAO,EAAE,SAAS,iBACL,GAAG,MAAM,UAAU,YAE/B,YAAY,GACN,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-kiosk-shared",
3
- "version": "2.2.61",
3
+ "version": "2.2.63",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Shared types, API contracts, and error classes for Pi Kiosk system",
@@ -299,6 +299,7 @@
299
299
  "dev": "tsc --watch",
300
300
  "type-check": "tsc --noEmit",
301
301
  "lint": "npm run type-check",
302
+ "lint:paths": "npm run type-check",
302
303
  "test": "jest --config jest.config.cjs --passWithNoTests",
303
304
  "test:workspace": "npm run test:workspace:package --prefix .. -- shared",
304
305
  "postinstall": "node scripts/applyMonorepoPatches.mjs",