pi-kiosk-shared 2.2.3 → 2.2.5

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.
Files changed (55) hide show
  1. package/dist/checkout/sessionMetadataV3.d.ts +2 -0
  2. package/dist/checkout/sessionMetadataV3.d.ts.map +1 -1
  3. package/dist/checkout/sessionMetadataV3.js.map +1 -1
  4. package/dist/responsive/breakpoints.d.ts +73 -0
  5. package/dist/responsive/breakpoints.d.ts.map +1 -0
  6. package/dist/responsive/breakpoints.js +40 -0
  7. package/dist/responsive/breakpoints.js.map +1 -0
  8. package/dist/responsive/index.d.ts +3 -0
  9. package/dist/responsive/index.d.ts.map +1 -0
  10. package/dist/responsive/index.js +3 -0
  11. package/dist/responsive/index.js.map +1 -0
  12. package/dist/responsive/useResponsiveTier.d.ts +6 -0
  13. package/dist/responsive/useResponsiveTier.d.ts.map +1 -0
  14. package/dist/responsive/useResponsiveTier.js +33 -0
  15. package/dist/responsive/useResponsiveTier.js.map +1 -0
  16. package/dist/theme/ThemeProvider.d.ts +5 -3
  17. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  18. package/dist/theme/ThemeProvider.js +2 -2
  19. package/dist/theme/ThemeProvider.js.map +1 -1
  20. package/dist/theme/themeContract.d.ts +5 -1
  21. package/dist/theme/themeContract.d.ts.map +1 -1
  22. package/dist/theme/themeContract.js +15 -9
  23. package/dist/theme/themeContract.js.map +1 -1
  24. package/dist/ui/Card/Card.d.ts.map +1 -1
  25. package/dist/ui/Card/Card.js +7 -4
  26. package/dist/ui/Card/Card.js.map +1 -1
  27. package/dist/ui/LanguageToggle/LanguageToggle.d.ts +8 -4
  28. package/dist/ui/LanguageToggle/LanguageToggle.d.ts.map +1 -1
  29. package/dist/ui/LanguageToggle/LanguageToggle.js +13 -135
  30. package/dist/ui/LanguageToggle/LanguageToggle.js.map +1 -1
  31. package/dist/ui/LocaleFlags/LocaleFlagToggle.d.ts +15 -0
  32. package/dist/ui/LocaleFlags/LocaleFlagToggle.d.ts.map +1 -0
  33. package/dist/ui/LocaleFlags/LocaleFlagToggle.js +140 -0
  34. package/dist/ui/LocaleFlags/LocaleFlagToggle.js.map +1 -0
  35. package/dist/ui/LocaleFlags/flagSvgs.d.ts +8 -0
  36. package/dist/ui/LocaleFlags/flagSvgs.d.ts.map +1 -0
  37. package/dist/ui/LocaleFlags/flagSvgs.js +10 -0
  38. package/dist/ui/LocaleFlags/flagSvgs.js.map +1 -0
  39. package/dist/ui/LocaleFlags/index.d.ts +4 -0
  40. package/dist/ui/LocaleFlags/index.d.ts.map +1 -0
  41. package/dist/ui/LocaleFlags/index.js +4 -0
  42. package/dist/ui/LocaleFlags/index.js.map +1 -0
  43. package/dist/ui/LocaleFlags/localeFlagRegistry.d.ts +16 -0
  44. package/dist/ui/LocaleFlags/localeFlagRegistry.d.ts.map +1 -0
  45. package/dist/ui/LocaleFlags/localeFlagRegistry.js +45 -0
  46. package/dist/ui/LocaleFlags/localeFlagRegistry.js.map +1 -0
  47. package/dist/ui/index.d.ts +2 -1
  48. package/dist/ui/index.d.ts.map +1 -1
  49. package/dist/ui/index.js +1 -0
  50. package/dist/ui/index.js.map +1 -1
  51. package/package.json +7 -1
  52. package/src/tokens/__tests__/theme-exports.test.mjs +1 -0
  53. package/src/tokens/__tests__/theme-light-override.test.mjs +13 -0
  54. package/src/tokens/responsive.css +85 -0
  55. package/src/tokens/theme.css +34 -0
@@ -9,6 +9,8 @@ export interface SessionMetadataCollect {
9
9
  promisedPickupAt?: string;
10
10
  pickupWindowEndAt?: string;
11
11
  };
12
+ /** Required when sales point is self-collect-only (Appendix D/F). */
13
+ selfCollectConfirmedAtKiosk?: boolean;
12
14
  }
13
15
  export interface SessionMetadataCheckoutMode {
14
16
  channel: CommerceChannel;
@@ -1 +1 @@
1
- {"version":3,"file":"sessionMetadataV3.d.ts","sourceRoot":"","sources":["../../src/checkout/sessionMetadataV3.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,uBAAuB,GACvB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,YAAY,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,iBAAiB,CAAC;IAChC,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,uBAAuB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,yBAAyB,CAMtF"}
1
+ {"version":3,"file":"sessionMetadataV3.d.ts","sourceRoot":"","sources":["../../src/checkout/sessionMetadataV3.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,uBAAuB,GACvB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,YAAY,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,qEAAqE;IACrE,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,iBAAiB,CAAC;IAChC,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,uBAAuB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,yBAAyB,CAMtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"sessionMetadataV3.js","sourceRoot":"","sources":["../../src/checkout/sessionMetadataV3.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAmC,CAAC,OAAO,KAAK,CAAC,CACnD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sessionMetadataV3.js","sourceRoot":"","sources":["../../src/checkout/sessionMetadataV3.ts"],"names":[],"mappings":"AAkDA,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAmC,CAAC,OAAO,KAAK,CAAC,CACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Cross-surface responsive breakpoint SSOT (Tailwind v4 Option A defaults).
3
+ * wide (1440) is test-viewport only — see TEST_VIEWPORTS.wide, not BREAKPOINTS.
4
+ */
5
+ export declare const RESPONSIVE_CONTRACT_VERSION = "1.0.0";
6
+ export declare const BREAKPOINTS: {
7
+ readonly sm: 640;
8
+ readonly md: 768;
9
+ readonly lg: 1024;
10
+ readonly xl: 1280;
11
+ readonly '2xl': 1536;
12
+ };
13
+ export type BreakpointToken = keyof typeof BREAKPOINTS;
14
+ /** Semantic density tiers — not 1:1 with Tailwind tokens. */
15
+ export declare const RESPONSIVE_TIER_BOUNDS: {
16
+ readonly compact: {
17
+ readonly maxWidth: number;
18
+ };
19
+ readonly comfortable: {
20
+ readonly minWidth: 768;
21
+ readonly maxWidth: number;
22
+ };
23
+ readonly expanded: {
24
+ readonly minWidth: 1024;
25
+ };
26
+ };
27
+ /** Alias for RESPONSIVE_TIER_BOUNDS — preferred import name in shell code. */
28
+ export declare const RESPONSIVE_TIERS: {
29
+ readonly compact: {
30
+ readonly maxWidth: number;
31
+ };
32
+ readonly comfortable: {
33
+ readonly minWidth: 768;
34
+ readonly maxWidth: number;
35
+ };
36
+ readonly expanded: {
37
+ readonly minWidth: 1024;
38
+ };
39
+ };
40
+ export type ResponsiveTier = keyof typeof RESPONSIVE_TIER_BOUNDS;
41
+ /** Playwright / acceptance matrix viewports (wide is PO mockup tier only). */
42
+ export declare const TEST_VIEWPORTS: {
43
+ readonly phoneSmall: {
44
+ readonly width: 320;
45
+ readonly height: 568;
46
+ };
47
+ readonly phone: {
48
+ readonly width: 390;
49
+ readonly height: 844;
50
+ };
51
+ readonly phoneLandscape: {
52
+ readonly width: 844;
53
+ readonly height: 390;
54
+ };
55
+ readonly tablet: {
56
+ readonly width: 768;
57
+ readonly height: 1024;
58
+ };
59
+ readonly tabletLandscape: {
60
+ readonly width: 1024;
61
+ readonly height: 768;
62
+ };
63
+ readonly desktop: {
64
+ readonly width: 1280;
65
+ readonly height: 900;
66
+ };
67
+ readonly wide: {
68
+ readonly width: 1440;
69
+ readonly height: 900;
70
+ };
71
+ };
72
+ export declare function tierFromWidth(widthPx: number): ResponsiveTier;
73
+ //# sourceMappingURL=breakpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.d.ts","sourceRoot":"","sources":["../../src/responsive/breakpoints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAU,CAAC;AAEnD,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,WAAW,CAAC;AAEvD,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB;;;;;;;;;;;CAIzB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAAyB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAEjE,8EAA8E;AAC9E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQjB,CAAC;AAEX,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAQ7D"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Cross-surface responsive breakpoint SSOT (Tailwind v4 Option A defaults).
3
+ * wide (1440) is test-viewport only — see TEST_VIEWPORTS.wide, not BREAKPOINTS.
4
+ */
5
+ export const RESPONSIVE_CONTRACT_VERSION = '1.0.0';
6
+ export const BREAKPOINTS = {
7
+ sm: 640,
8
+ md: 768,
9
+ lg: 1024,
10
+ xl: 1280,
11
+ '2xl': 1536,
12
+ };
13
+ /** Semantic density tiers — not 1:1 with Tailwind tokens. */
14
+ export const RESPONSIVE_TIER_BOUNDS = {
15
+ compact: { maxWidth: BREAKPOINTS.md - 1 },
16
+ comfortable: { minWidth: BREAKPOINTS.md, maxWidth: BREAKPOINTS.lg - 1 },
17
+ expanded: { minWidth: BREAKPOINTS.lg },
18
+ };
19
+ /** Alias for RESPONSIVE_TIER_BOUNDS — preferred import name in shell code. */
20
+ export const RESPONSIVE_TIERS = RESPONSIVE_TIER_BOUNDS;
21
+ /** Playwright / acceptance matrix viewports (wide is PO mockup tier only). */
22
+ export const TEST_VIEWPORTS = {
23
+ phoneSmall: { width: 320, height: 568 },
24
+ phone: { width: 390, height: 844 },
25
+ phoneLandscape: { width: 844, height: 390 },
26
+ tablet: { width: 768, height: 1024 },
27
+ tabletLandscape: { width: 1024, height: 768 },
28
+ desktop: { width: 1280, height: 900 },
29
+ wide: { width: 1440, height: 900 },
30
+ };
31
+ export function tierFromWidth(widthPx) {
32
+ if (widthPx >= RESPONSIVE_TIER_BOUNDS.expanded.minWidth) {
33
+ return 'expanded';
34
+ }
35
+ if (widthPx >= RESPONSIVE_TIER_BOUNDS.comfortable.minWidth) {
36
+ return 'comfortable';
37
+ }
38
+ return 'compact';
39
+ }
40
+ //# sourceMappingURL=breakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../src/responsive/breakpoints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;CACH,CAAC;AAIX,6DAA6D;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE;IACzC,WAAW,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE;IACvE,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE;CAC9B,CAAC;AAEX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAIvD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACvC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAClC,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3C,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACpC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC7C,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACrC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;CAC1B,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,IAAI,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,IAAI,sBAAsB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC3D,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { BREAKPOINTS, RESPONSIVE_CONTRACT_VERSION, RESPONSIVE_TIER_BOUNDS, RESPONSIVE_TIERS, TEST_VIEWPORTS, tierFromWidth, type BreakpointToken, type ResponsiveTier, } from './breakpoints.js';
2
+ export { useResponsiveTier } from './useResponsiveTier.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/responsive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { BREAKPOINTS, RESPONSIVE_CONTRACT_VERSION, RESPONSIVE_TIER_BOUNDS, RESPONSIVE_TIERS, TEST_VIEWPORTS, tierFromWidth, } from './breakpoints.js';
2
+ export { useResponsiveTier } from './useResponsiveTier.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/responsive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ResponsiveTier } from './breakpoints.js';
2
+ /**
3
+ * Shell-only runtime tier helper (SSR-safe). Do not branch feature layout on this.
4
+ */
5
+ export declare function useResponsiveTier(): ResponsiveTier;
6
+ //# sourceMappingURL=useResponsiveTier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResponsiveTier.d.ts","sourceRoot":"","sources":["../../src/responsive/useResponsiveTier.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAWnF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAqBlD"}
@@ -0,0 +1,33 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { BREAKPOINTS, tierFromWidth } from './breakpoints.js';
3
+ const DEFAULT_TIER = 'compact';
4
+ function readTierFromWindow() {
5
+ if (typeof window === 'undefined') {
6
+ return DEFAULT_TIER;
7
+ }
8
+ return tierFromWidth(window.innerWidth);
9
+ }
10
+ /**
11
+ * Shell-only runtime tier helper (SSR-safe). Do not branch feature layout on this.
12
+ */
13
+ export function useResponsiveTier() {
14
+ const [tier, setTier] = useState(DEFAULT_TIER);
15
+ useEffect(() => {
16
+ const update = () => {
17
+ setTier(readTierFromWindow());
18
+ };
19
+ update();
20
+ const mqMd = window.matchMedia(`(min-width: ${String(BREAKPOINTS.md)}px)`);
21
+ const mqLg = window.matchMedia(`(min-width: ${String(BREAKPOINTS.lg)}px)`);
22
+ mqMd.addEventListener('change', update);
23
+ mqLg.addEventListener('change', update);
24
+ window.addEventListener('resize', update);
25
+ return () => {
26
+ mqMd.removeEventListener('change', update);
27
+ mqLg.removeEventListener('change', update);
28
+ window.removeEventListener('resize', update);
29
+ };
30
+ }, []);
31
+ return tier;
32
+ }
33
+ //# sourceMappingURL=useResponsiveTier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResponsiveTier.js","sourceRoot":"","sources":["../../src/responsive/useResponsiveTier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAC;AAEnF,MAAM,YAAY,GAAmB,SAAS,CAAC;AAE/C,SAAS,kBAAkB;IACzB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAiB,YAAY,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,MAAM,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from 'react';
2
- import { type EffectiveTheme, type ThemeApi, type ThemePreference } from './themeContract.js';
3
- export type { EffectiveTheme, ThemeApi, ThemePreference };
2
+ import { type EffectiveTheme, type ThemeApi, type ThemeApplyOptions, type ThemePreference } from './themeContract.js';
3
+ export type { EffectiveTheme, ThemeApi, ThemeApplyOptions, ThemePreference };
4
4
  export { THEME_STORAGE_KEYS, applyInitialTheme, createThemeApi, setTheme, type ThemeAppId, } from './themeContract.js';
5
5
  export interface ThemeContextValue {
6
6
  preference: ThemePreference;
@@ -10,12 +10,14 @@ export interface ThemeContextValue {
10
10
  export interface ThemeProviderProps {
11
11
  /** Per-app key from `THEME_STORAGE_KEYS` (e.g. `rpapp-customer-theme`). */
12
12
  storageKey: string;
13
+ /** When true, explicit `light` preference adds `.light` to override system dark media. */
14
+ lightOverrideEnabled?: boolean;
13
15
  children: ReactNode;
14
16
  }
15
17
  /**
16
18
  * React bridge for DECISION-2 C-Hybrid dark mode.
17
19
  * Wrap the app (or subtree) and read/update theme via `useTheme()`.
18
20
  */
19
- export declare function ThemeProvider({ storageKey, children }: ThemeProviderProps): JSX.Element;
21
+ export declare function ThemeProvider({ storageKey, lightOverrideEnabled, children, }: ThemeProviderProps): JSX.Element;
20
22
  export declare function useTheme(): ThemeContextValue;
21
23
  //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;CAC3C;AAID,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAkCvF;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;CAC3C;AAID,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,oBAA4B,EAC5B,QAAQ,GACT,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAqClC;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
@@ -7,8 +7,8 @@ const ThemeContext = createContext(null);
7
7
  * React bridge for DECISION-2 C-Hybrid dark mode.
8
8
  * Wrap the app (or subtree) and read/update theme via `useTheme()`.
9
9
  */
10
- export function ThemeProvider({ storageKey, children }) {
11
- const api = useMemo(() => createThemeApi(storageKey), [storageKey]);
10
+ export function ThemeProvider({ storageKey, lightOverrideEnabled = false, children, }) {
11
+ const api = useMemo(() => createThemeApi(storageKey, { lightOverrideEnabled }), [storageKey, lightOverrideEnabled]);
12
12
  const [preference, setPreference] = useState(() => api.getThemePreference());
13
13
  const [effectiveTheme, setEffectiveTheme] = useState(() => api.getEffectiveTheme());
14
14
  const syncFromApi = useCallback(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EACL,cAAc,GAIf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,QAAQ,GAET,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAQnE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAsB;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9F,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAiB,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEpG,MAAM,WAAW,GAAG,WAAW,CAAC,GAAS,EAAE;QACzC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACxC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACxB,WAAW,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvB,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,IAAqB,EAAQ,EAAE;QAC9B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,WAAW,EAAE,CAAC;IAChB,CAAC,EACD,CAAC,GAAG,EAAE,WAAW,CAAC,CACnB,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,UAAU;QACV,cAAc;QACd,QAAQ,EAAE,kBAAkB;KAC7B,CAAC,EACF,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,CAAC,CACjD,CAAC;IAEF,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EACL,cAAc,GAKf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,QAAQ,GAET,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAUnE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,EACV,oBAAoB,GAAG,KAAK,EAC5B,QAAQ,GACW;IACnB,MAAM,GAAG,GAAG,OAAO,CACjB,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAC1D,CAAC,UAAU,EAAE,oBAAoB,CAAC,CACnC,CAAC;IACF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9F,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAiB,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEpG,MAAM,WAAW,GAAG,WAAW,CAAC,GAAS,EAAE;QACzC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACxC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACxB,WAAW,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvB,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,IAAqB,EAAQ,EAAE;QAC9B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,WAAW,EAAE,CAAC;IAChB,CAAC,EACD,CAAC,GAAG,EAAE,WAAW,CAAC,CACnB,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,UAAU;QACV,cAAc;QACd,QAAQ,EAAE,kBAAkB;KAC7B,CAAC,EACF,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,CAAC,CACjD,CAAC;IAEF,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -22,11 +22,15 @@ export interface ThemeApi {
22
22
  /** Re-sync when OS preference changes while preference is `system`. */
23
23
  subscribeToSystemTheme: (onChange?: () => void) => () => void;
24
24
  }
25
+ export interface ThemeApplyOptions {
26
+ /** When true, explicit `light` preference adds `.light` to override system dark media. */
27
+ readonly lightOverrideEnabled?: boolean;
28
+ }
25
29
  /**
26
30
  * Imperative theme controller for a single app surface.
27
31
  * Call `applyInitialTheme()` before the first React paint to avoid flash.
28
32
  */
29
- export declare function createThemeApi(storageKey: string): ThemeApi;
33
+ export declare function createThemeApi(storageKey: string, options?: ThemeApplyOptions): ThemeApi;
30
34
  /** Convenience for boot scripts that only need the initial `.dark` sync. */
31
35
  export declare function applyInitialTheme(storageKey: string): void;
32
36
  /** Convenience for imperative toggles outside React. */
@@ -1 +1 @@
1
- {"version":3,"file":"themeContract.d.ts","sourceRoot":"","sources":["../../src/theme/themeContract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9C,qFAAqF;AACrF,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,MAAM,eAAe,CAAC;IAC1C,iBAAiB,EAAE,MAAM,cAAc,CAAC;IACxC,uEAAuE;IACvE,sBAAsB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CAC/D;AAsCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAmD3D;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAExE"}
1
+ {"version":3,"file":"themeContract.d.ts","sourceRoot":"","sources":["../../src/theme/themeContract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9C,qFAAqF;AACrF,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,MAAM,eAAe,CAAC;IAC1C,iBAAiB,EAAE,MAAM,cAAc,CAAC;IACxC,uEAAuE;IACvE,sBAAsB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CAC/D;AA0BD,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAwBD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,QAAQ,CAuDV;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAExE"}
@@ -34,23 +34,26 @@ function readStoredPreference(storageKey) {
34
34
  }
35
35
  return 'system';
36
36
  }
37
- function applyClass(theme) {
37
+ function applyThemeClasses(preference, effective, options) {
38
38
  if (typeof document === 'undefined') {
39
39
  return;
40
40
  }
41
41
  const root = document.documentElement;
42
- if (theme === 'dark') {
43
- root.classList.add('dark');
42
+ const lightOverrideEnabled = options?.lightOverrideEnabled === true;
43
+ root.classList.remove('dark', 'light');
44
+ if (lightOverrideEnabled && preference === 'light') {
45
+ root.classList.add('light');
46
+ return;
44
47
  }
45
- else {
46
- root.classList.remove('dark');
48
+ if (preference === 'dark' || effective === 'dark') {
49
+ root.classList.add('dark');
47
50
  }
48
51
  }
49
52
  /**
50
53
  * Imperative theme controller for a single app surface.
51
54
  * Call `applyInitialTheme()` before the first React paint to avoid flash.
52
55
  */
53
- export function createThemeApi(storageKey) {
56
+ export function createThemeApi(storageKey, options) {
54
57
  const getThemePreference = () => readStoredPreference(storageKey);
55
58
  const getEffectiveTheme = () => {
56
59
  const pref = getThemePreference();
@@ -59,8 +62,11 @@ export function createThemeApi(storageKey) {
59
62
  }
60
63
  return pref;
61
64
  };
65
+ const syncDomClasses = () => {
66
+ applyThemeClasses(getThemePreference(), getEffectiveTheme(), options);
67
+ };
62
68
  const applyInitialTheme = () => {
63
- applyClass(getEffectiveTheme());
69
+ syncDomClasses();
64
70
  };
65
71
  const setTheme = (pref) => {
66
72
  try {
@@ -71,7 +77,7 @@ export function createThemeApi(storageKey) {
71
77
  catch {
72
78
  /* ignore */
73
79
  }
74
- applyClass(getEffectiveTheme());
80
+ syncDomClasses();
75
81
  };
76
82
  const subscribeToSystemTheme = (onChange) => {
77
83
  if (typeof window === 'undefined') {
@@ -83,7 +89,7 @@ export function createThemeApi(storageKey) {
83
89
  }
84
90
  const listener = () => {
85
91
  if (getThemePreference() === 'system') {
86
- applyClass(getEffectiveTheme());
92
+ syncDomClasses();
87
93
  onChange?.();
88
94
  }
89
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"themeContract.js","sourceRoot":"","sources":["../../src/theme/themeContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"themeContract.js","sourceRoot":"","sources":["../../src/theme/themeContract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/ui/Card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAmExD,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAM7D,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,IAAI;uBALI,WAAW;sBACZ,OAAO;wBACL,OAAO;kDAyC5B,CAAC"}
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/ui/Card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAsExD,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAM7D,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,IAAI;uBALI,WAAW;sBACZ,OAAO;wBACL,OAAO;kDA+C5B,CAAC"}
@@ -3,6 +3,7 @@ import { forwardRef } from 'react';
3
3
  import { tv } from '../tvShim.js';
4
4
  const adminCard = tv({
5
5
  base: [
6
+ 'rp-card-container',
6
7
  'rounded-lg border border-[var(--color-an-border)]',
7
8
  'bg-[var(--color-an-surface)] text-[var(--color-an-text)]',
8
9
  'shadow-sm',
@@ -24,6 +25,7 @@ const adminCard = tv({
24
25
  });
25
26
  const pickupCard = tv({
26
27
  base: [
28
+ 'rp-card-container',
27
29
  'rounded-[var(--radius-xl)] bg-[var(--color-surface-elevated)]',
28
30
  'shadow-[var(--shadow-card)]',
29
31
  ].join(' '),
@@ -44,6 +46,7 @@ const pickupCard = tv({
44
46
  });
45
47
  const kioskCustomerCard = tv({
46
48
  base: [
49
+ 'rp-card-container',
47
50
  'rounded-xl border bg-[var(--color-surface-elevated)]',
48
51
  'border-[var(--color-border)] shadow-[var(--shadow-card)]',
49
52
  ].join(' '),
@@ -62,18 +65,18 @@ const kioskCustomerCard = tv({
62
65
  elevated: false,
63
66
  },
64
67
  });
65
- export const Card = forwardRef(({ className, surface = 'customer', padded, elevated, ...rest }, ref) => {
68
+ export const Card = forwardRef(({ className, surface = 'customer', padded, elevated, children, ...rest }, ref) => {
66
69
  if (surface === 'admin') {
67
- return (_jsx("div", { ref: ref, className: adminCard({ padded, elevated, className }), ...rest }));
70
+ return (_jsx("div", { ref: ref, className: adminCard({ padded, elevated, className }), ...rest, children: _jsx("div", { className: "rp-card-container-inner", children: children }) }));
68
71
  }
69
72
  if (surface === 'pickup') {
70
- return (_jsx("div", { ref: ref, className: pickupCard({ padded, elevated, className }), ...rest }));
73
+ return (_jsx("div", { ref: ref, className: pickupCard({ padded, elevated, className }), ...rest, children: _jsx("div", { className: "rp-card-container-inner", children: children }) }));
71
74
  }
72
75
  return (_jsx("div", { ref: ref, className: kioskCustomerCard({
73
76
  padded,
74
77
  elevated,
75
78
  className,
76
- }), ...rest }));
79
+ }), ...rest, children: _jsx("div", { className: "rp-card-container-inner", children: children }) }));
77
80
  });
78
81
  Card.displayName = 'Card';
79
82
  //# sourceMappingURL=Card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/ui/Card/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,EAAE,EAAqB,MAAM,cAAc,CAAC;AAErD,MAAM,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE;QACJ,mDAAmD;QACnD,0DAA0D;QAC1D,WAAW;KACZ,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,kCAAkC;YACxC,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,EAAE;QACJ,+DAA+D;QAC/D,6BAA6B;KAC9B,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,gCAAgC;YACtC,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,EAAE;QACJ,sDAAsD;QACtD,0DAA0D;KAC3D,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,gCAAgC;YACtC,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC;AAcH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACtE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAEjD,CAAC,KACE,IAAI,GACR,CACH,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAElD,CAAC,KACE,IAAI,GACR,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,iBAAiB,CAAC;YAC3B,MAAM;YACN,QAAQ;YACR,SAAS;SAC4C,CAAC,KACpD,IAAI,GACR,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AACF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/ui/Card/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,EAAE,EAAqB,MAAM,cAAc,CAAC;AAErD,MAAM,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE;QACJ,mBAAmB;QACnB,mDAAmD;QACnD,0DAA0D;QAC1D,WAAW;KACZ,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,kCAAkC;YACxC,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,EAAE;QACJ,mBAAmB;QACnB,+DAA+D;QAC/D,6BAA6B;KAC9B,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,gCAAgC;YACtC,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,EAAE;QACJ,mBAAmB;QACnB,sDAAsD;QACtD,0DAA0D;KAC3D,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,gCAAgC;YACtC,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAC;AAcH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAChF,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAEjD,CAAC,KACE,IAAI,YAER,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,GACrD,CACP,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAElD,CAAC,KACE,IAAI,YAER,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,GACrD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,iBAAiB,CAAC;YAC3B,MAAM;YACN,QAAQ;YACR,SAAS;SAC4C,CAAC,KACpD,IAAI,YAER,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,GACrD,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AACF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC"}
@@ -1,10 +1,14 @@
1
- export type LanguageToggleSurface = 'admin' | 'kiosk' | 'customer';
2
- export type LanguageToggleNamespace = 'admin' | 'kiosk' | 'customer';
3
- export type LanguageTogglePlacement = 'floating' | 'inline' | 'header';
1
+ import { type LocaleFlagOption, type LocaleFlagTogglePlacement, type LocaleFlagToggleSurface } from '../LocaleFlags/index.js';
2
+ export type LanguageToggleSurface = LocaleFlagToggleSurface;
3
+ export type LanguageToggleNamespace = 'admin' | 'kiosk' | 'customer' | 'pickup';
4
+ export type LanguageTogglePlacement = LocaleFlagTogglePlacement;
4
5
  export interface LanguageToggleProps {
5
6
  readonly surface: LanguageToggleSurface;
6
7
  readonly i18nNamespace: LanguageToggleNamespace;
7
8
  readonly placement?: LanguageTogglePlacement;
9
+ /** Extra locale flags appended after defaults; same `code` overrides a default entry. */
10
+ readonly locales?: readonly LocaleFlagOption[];
11
+ readonly dataTestId?: string;
8
12
  }
9
- export declare function LanguageToggle({ surface, i18nNamespace, placement, }: LanguageToggleProps): JSX.Element;
13
+ export declare function LanguageToggle({ surface, i18nNamespace, placement, locales, dataTestId, }: LanguageToggleProps): JSX.Element;
10
14
  //# sourceMappingURL=LanguageToggle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageToggle.d.ts","sourceRoot":"","sources":["../../../src/ui/LanguageToggle/LanguageToggle.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAwHvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC;CAC9C;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,aAAa,EACb,SAAsB,GACvB,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAsDnC"}
1
+ {"version":3,"file":"LanguageToggle.d.ts","sourceRoot":"","sources":["../../../src/ui/LanguageToggle/LanguageToggle.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAC7C,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,aAAa,EACb,SAAsB,EACtB,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAkCnC"}
@@ -1,143 +1,21 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
- import { tv } from '../tvShim.js';
5
- const toggle = tv({
6
- slots: {
7
- group: 'inline-flex max-w-full shrink-0 items-stretch overflow-hidden',
8
- btn: 'm-0 cursor-pointer border-none font-semibold transition-colors',
9
- divider: 'w-px self-stretch bg-[var(--color-border)]',
10
- },
11
- variants: {
12
- surface: {
13
- admin: {
14
- btn: 'px-4 py-2 text-sm text-[var(--color-text-secondary,#475569)] hover:bg-[var(--color-surface-muted,#f1f5f9)] hover:text-[var(--color-text-primary,#0f172a)]',
15
- divider: 'bg-[var(--color-border,#e2e8f0)]',
16
- },
17
- kiosk: {
18
- btn: 'px-8 py-4 text-sm text-[var(--color-on-surface-muted,#475569)] hover:bg-[var(--color-surface-muted,#f1f5f9)] hover:text-[var(--color-on-surface,#0f172a)]',
19
- divider: 'bg-[var(--color-border,#e2e8f0)]',
20
- },
21
- customer: {
22
- btn: 'px-3 py-1.5 text-sm text-[var(--color-on-surface-muted)] hover:bg-[var(--color-surface-muted)] hover:text-[var(--color-on-surface)]',
23
- divider: 'bg-[var(--color-border)]',
24
- },
25
- },
26
- placement: {
27
- floating: {},
28
- inline: {
29
- group: [
30
- 'rounded-md border border-[var(--color-rail-card-border,var(--color-border,#e2e8f0))]',
31
- 'bg-[var(--color-surface-elevated,#fff)] shadow-sm',
32
- ].join(' '),
33
- btn: 'px-2.5 py-1.5 text-xs',
34
- },
35
- header: {
36
- group: [
37
- 'rounded-full border border-[var(--color-rail-card-border,#e2e8f0)]',
38
- 'bg-slate-50 p-0.5 shadow-none',
39
- ].join(' '),
40
- btn: 'rounded-full px-2.5 py-1 text-xs font-medium text-slate-600 hover:text-slate-900',
41
- divider: 'hidden',
42
- },
43
- },
44
- },
45
- compoundVariants: [
46
- {
47
- surface: 'admin',
48
- placement: 'floating',
49
- class: {
50
- group: [
51
- 'fixed top-[var(--spacing-4,1rem)] right-[var(--spacing-4,1rem)] z-[10001]',
52
- 'rounded-[var(--radius-lg,0.5rem)] border border-[var(--color-border,#e2e8f0)]',
53
- 'bg-[var(--color-surface-elevated,#fff)] shadow-[var(--shadow-md,0_4px_6px_-1px_rgb(0_0_0_/_0.1))]',
54
- ].join(' '),
55
- },
56
- },
57
- {
58
- surface: 'kiosk',
59
- placement: 'floating',
60
- class: {
61
- group: [
62
- 'fixed top-[var(--spacing-10)] right-[var(--spacing-10)] z-[var(--z-modal-backdrop)]',
63
- 'rounded-[var(--radius-xl)] border border-[var(--color-border,#e2e8f0)]',
64
- 'bg-[var(--color-surface-elevated,#fff)] shadow-[var(--shadow-lg)]',
65
- ].join(' '),
66
- },
67
- },
68
- {
69
- surface: 'customer',
70
- placement: 'floating',
71
- class: {
72
- group: [
73
- 'fixed top-2.5 right-2.5 z-50 rounded-xl border border-[var(--color-border)]',
74
- 'bg-[var(--color-surface-elevated)] shadow-lg',
75
- ].join(' '),
76
- },
77
- },
78
- ],
79
- defaultVariants: {
80
- surface: 'customer',
81
- placement: 'floating',
82
- },
83
- });
84
- const activeBtn = tv({
85
- variants: {
86
- surface: {
87
- admin: 'bg-[var(--color-primary,#6366f1)] text-white hover:bg-[var(--color-primary-hover,#4f46e5)] hover:text-white',
88
- kiosk: 'bg-[var(--color-accent,#2563eb)] text-[var(--color-accent-foreground,#fff)] hover:opacity-95',
89
- customer: 'bg-[var(--color-accent)] text-[var(--color-accent-foreground)] hover:opacity-90',
90
- },
91
- placement: {
92
- floating: {},
93
- inline: {},
94
- header: {},
95
- },
96
- },
97
- compoundVariants: [
98
- {
99
- surface: 'admin',
100
- placement: 'header',
101
- class: 'bg-white text-slate-900 shadow-sm hover:bg-white hover:text-slate-900',
102
- },
103
- ],
104
- defaultVariants: {
105
- surface: 'customer',
106
- placement: 'floating',
107
- },
108
- });
109
- function normalizeLocale(lng) {
110
- if (lng == null || lng === '') {
111
- return 'cs';
112
- }
113
- return lng.startsWith('en') ? 'en' : 'cs';
114
- }
115
- export function LanguageToggle({ surface, i18nNamespace, placement = 'floating', }) {
4
+ import { DEFAULT_LOCALE_FLAGS, LocaleFlagToggle, buildLocaleLabelKey, mergeLocaleFlags, resolveActiveLocaleCode, resolveDocumentLang, } from '../LocaleFlags/index.js';
5
+ export function LanguageToggle({ surface, i18nNamespace, placement = 'floating', locales, dataTestId, }) {
116
6
  const { t, i18n } = useTranslation(i18nNamespace);
117
- const active = normalizeLocale(i18n.language);
118
- const slots = toggle({ surface, placement });
7
+ const availableLocales = useMemo(() => (locales ? mergeLocaleFlags(DEFAULT_LOCALE_FLAGS, locales) : DEFAULT_LOCALE_FLAGS), [locales]);
8
+ const activeLocale = resolveActiveLocaleCode(i18n.language, availableLocales);
119
9
  useEffect(() => {
120
- document.documentElement.lang = active === 'en' ? 'en' : 'cs';
121
- }, [active]);
122
- const select = (locale) => {
123
- if (locale === active) {
10
+ document.documentElement.lang = resolveDocumentLang(activeLocale, availableLocales);
11
+ }, [activeLocale, availableLocales]);
12
+ const select = (code) => {
13
+ if (code === activeLocale) {
124
14
  return;
125
15
  }
126
- void i18n.changeLanguage(locale);
127
- };
128
- const btnClass = (locale) => {
129
- const base = slots.btn();
130
- if (active === locale) {
131
- return [base, activeBtn({ surface, placement })].join(' ');
132
- }
133
- return [base, 'bg-transparent'].join(' ');
16
+ void i18n.changeLanguage(code);
134
17
  };
135
- const csLabel = placement === 'header' ? t('shell.language.csShort', { defaultValue: 'CS' }) : t('shell.language.cs');
136
- const enLabel = placement === 'header' ? t('shell.language.enShort', { defaultValue: 'EN' }) : t('shell.language.en');
137
- return (_jsxs("div", { className: slots.group(), role: "group", "aria-label": t('shell.language.groupLabel'), children: [_jsx("button", { type: "button", className: btnClass('cs'), "aria-pressed": active === 'cs', onClick: () => {
138
- select('cs');
139
- }, children: csLabel }), placement === 'header' ? null : _jsx("span", { className: slots.divider(), "aria-hidden": "true" }), _jsx("button", { type: "button", className: btnClass('en'), "aria-pressed": active === 'en', onClick: () => {
140
- select('en');
141
- }, children: enLabel })] }));
18
+ const getLabel = (code) => t(buildLocaleLabelKey(code), { defaultValue: code.toUpperCase() });
19
+ return (_jsx(LocaleFlagToggle, { locales: availableLocales, activeLocale: activeLocale, onSelect: select, getLabel: getLabel, groupLabel: t('shell.language.groupLabel', { defaultValue: 'Interface language' }), surface: surface, placement: placement, dataTestId: dataTestId }));
142
20
  }
143
21
  //# sourceMappingURL=LanguageToggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageToggle.js","sourceRoot":"","sources":["../../../src/ui/LanguageToggle/LanguageToggle.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LanguageToggle.js","sourceRoot":"","sources":["../../../src/ui/LanguageToggle/LanguageToggle.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GAIpB,MAAM,yBAAyB,CAAC;AAejC,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,aAAa,EACb,SAAS,GAAG,UAAU,EACtB,OAAO,EACP,UAAU,GACU;IACpB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,EACxF,CAAC,OAAO,CAAC,CACV,CAAC;IACF,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAE9E,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACtF,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAQ,EAAE;QACpC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CACxC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAErE,OAAO,CACL,KAAC,gBAAgB,IACf,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,CAAC,CAAC,2BAA2B,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,EAClF,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { LocaleFlagOption } from './localeFlagRegistry.js';
2
+ export type LocaleFlagToggleSurface = 'admin' | 'kiosk' | 'customer' | 'pickup';
3
+ export type LocaleFlagTogglePlacement = 'floating' | 'inline' | 'header';
4
+ export interface LocaleFlagToggleProps {
5
+ readonly locales: readonly LocaleFlagOption[];
6
+ readonly activeLocale: string;
7
+ readonly onSelect: (code: string) => void;
8
+ readonly getLabel: (code: string) => string;
9
+ readonly groupLabel: string;
10
+ readonly surface?: LocaleFlagToggleSurface;
11
+ readonly placement?: LocaleFlagTogglePlacement;
12
+ readonly dataTestId?: string;
13
+ }
14
+ export declare function LocaleFlagToggle({ locales, activeLocale, onSelect, getLabel, groupLabel, surface, placement, dataTestId, }: LocaleFlagToggleProps): JSX.Element;
15
+ //# sourceMappingURL=LocaleFlagToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocaleFlagToggle.d.ts","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/LocaleFlagToggle.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAChF,MAAM,MAAM,yBAAyB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAkIzE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,OAAoB,EACpB,SAAsB,EACtB,UAAU,GACX,EAAE,qBAAqB,GAAG,GAAG,CAAC,OAAO,CAiCrC"}
@@ -0,0 +1,140 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { tv } from '../tvShim.js';
3
+ const flagGroup = tv({
4
+ base: 'inline-flex max-w-full shrink-0 items-center',
5
+ variants: {
6
+ placement: {
7
+ floating: 'gap-2',
8
+ inline: [
9
+ 'gap-1.5 rounded-md border border-[var(--color-rail-card-border,var(--color-border,#e2e8f0))]',
10
+ 'bg-[var(--color-surface-elevated,#fff)] p-1 shadow-sm',
11
+ ].join(' '),
12
+ header: [
13
+ 'gap-1.5 rounded-full border border-[var(--color-rail-card-border,#e2e8f0)]',
14
+ 'bg-slate-50 p-1 shadow-none',
15
+ ].join(' '),
16
+ },
17
+ surface: {
18
+ admin: '',
19
+ kiosk: '',
20
+ customer: '',
21
+ pickup: '',
22
+ },
23
+ },
24
+ compoundVariants: [
25
+ {
26
+ surface: 'admin',
27
+ placement: 'floating',
28
+ class: [
29
+ 'fixed top-[var(--spacing-4,1rem)] right-[var(--spacing-4,1rem)] z-[10001]',
30
+ 'rounded-[var(--radius-lg,0.5rem)] border border-[var(--color-border,#e2e8f0)]',
31
+ 'bg-[var(--color-surface-elevated,#fff)] p-1.5 shadow-[var(--shadow-md,0_4px_6px_-1px_rgb(0_0_0_/_0.1))]',
32
+ ].join(' '),
33
+ },
34
+ {
35
+ surface: 'kiosk',
36
+ placement: 'floating',
37
+ class: [
38
+ 'fixed top-[var(--spacing-10)] right-[var(--spacing-10)] z-[var(--z-modal-backdrop)]',
39
+ 'rounded-[var(--radius-xl)] border border-[var(--color-border,#e2e8f0)]',
40
+ 'bg-[var(--color-surface-elevated,#fff)] p-2 shadow-[var(--shadow-lg)]',
41
+ ].join(' '),
42
+ },
43
+ {
44
+ surface: 'customer',
45
+ placement: 'floating',
46
+ class: [
47
+ 'fixed top-2.5 right-2.5 z-50 rounded-xl border border-[var(--color-border)]',
48
+ 'bg-[var(--color-surface-elevated)] p-1.5 shadow-lg',
49
+ ].join(' '),
50
+ },
51
+ {
52
+ surface: 'pickup',
53
+ placement: 'floating',
54
+ class: [
55
+ 'fixed top-2.5 right-2.5 z-50 rounded-xl border border-[var(--color-border,#e2e8f0)]',
56
+ 'bg-[var(--color-surface-elevated,#fff)] p-1.5 shadow-lg',
57
+ ].join(' '),
58
+ },
59
+ ],
60
+ defaultVariants: {
61
+ placement: 'floating',
62
+ surface: 'customer',
63
+ },
64
+ });
65
+ const flagButton = tv({
66
+ base: [
67
+ 'inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full',
68
+ 'border-2 border-transparent transition-all duration-150',
69
+ 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',
70
+ ].join(' '),
71
+ variants: {
72
+ placement: {
73
+ floating: 'h-10 w-10',
74
+ inline: 'h-8 w-8',
75
+ header: 'h-8 w-8',
76
+ },
77
+ pressed: {
78
+ true: 'opacity-100 shadow-sm',
79
+ false: 'opacity-75 hover:scale-105 hover:opacity-100',
80
+ },
81
+ surface: {
82
+ admin: 'focus-visible:outline-[var(--color-an-primary,#6366f1)]',
83
+ kiosk: 'focus-visible:outline-[var(--color-accent,#2563eb)]',
84
+ customer: 'focus-visible:outline-[var(--color-accent)]',
85
+ pickup: 'focus-visible:outline-[var(--color-accent,#2563eb)]',
86
+ },
87
+ },
88
+ compoundVariants: [
89
+ {
90
+ surface: 'admin',
91
+ pressed: true,
92
+ class: 'border-[var(--color-an-primary,#6366f1)] ring-2 ring-[var(--color-an-primary,#6366f1)]/25',
93
+ },
94
+ {
95
+ surface: 'kiosk',
96
+ pressed: true,
97
+ class: 'border-[var(--color-accent,#2563eb)] ring-2 ring-[var(--color-accent,#2563eb)]/25',
98
+ },
99
+ {
100
+ surface: 'customer',
101
+ pressed: true,
102
+ class: 'border-[var(--color-accent)] ring-2 ring-[var(--color-accent)]/25',
103
+ },
104
+ {
105
+ surface: 'pickup',
106
+ pressed: true,
107
+ class: 'border-[var(--color-accent,#2563eb)] ring-2 ring-[var(--color-accent,#2563eb)]/25',
108
+ },
109
+ ],
110
+ defaultVariants: {
111
+ placement: 'floating',
112
+ pressed: false,
113
+ surface: 'customer',
114
+ },
115
+ });
116
+ const flagSize = tv({
117
+ variants: {
118
+ placement: {
119
+ floating: 'h-10 w-10',
120
+ inline: 'h-8 w-8',
121
+ header: 'h-8 w-8',
122
+ },
123
+ },
124
+ defaultVariants: {
125
+ placement: 'floating',
126
+ },
127
+ });
128
+ export function LocaleFlagToggle({ locales, activeLocale, onSelect, getLabel, groupLabel, surface = 'customer', placement = 'floating', dataTestId, }) {
129
+ return (_jsx("div", { className: flagGroup({ surface, placement }), role: "group", "aria-label": groupLabel, "data-testid": dataTestId, children: locales.map((locale) => {
130
+ const Flag = locale.Flag;
131
+ const isActive = locale.code === activeLocale;
132
+ const label = getLabel(locale.code);
133
+ return (_jsx("button", { type: "button", className: flagButton({ surface, placement, pressed: isActive }), "aria-pressed": isActive, "aria-label": label, title: label, onClick: () => {
134
+ if (!isActive) {
135
+ onSelect(locale.code);
136
+ }
137
+ }, children: _jsx(Flag, { className: flagSize({ placement }) }) }, locale.code));
138
+ }) }));
139
+ }
140
+ //# sourceMappingURL=LocaleFlagToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocaleFlagToggle.js","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/LocaleFlagToggle.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type ComponentType } from 'react';
2
+ export interface LocaleFlagSvgProps {
3
+ readonly className?: string;
4
+ }
5
+ export declare function CzechFlagSvg({ className }: LocaleFlagSvgProps): JSX.Element;
6
+ export declare function EnglishFlagSvg({ className }: LocaleFlagSvgProps): JSX.Element;
7
+ export type LocaleFlagSvgComponent = ComponentType<LocaleFlagSvgProps>;
8
+ //# sourceMappingURL=flagSvgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flagSvgs.d.ts","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/flagSvgs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAKD,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAe3E;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAiB7E;AAED,MAAM,MAAM,sBAAsB,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const CS_FLAG_CLIP_ID = 'locale-flag-clip-cs';
3
+ const EN_FLAG_CLIP_ID = 'locale-flag-clip-en';
4
+ export function CzechFlagSvg({ className }) {
5
+ return (_jsxs("svg", { viewBox: "0 0 32 32", className: className, "aria-hidden": "true", children: [_jsx("defs", { children: _jsx("clipPath", { id: CS_FLAG_CLIP_ID, children: _jsx("circle", { cx: "16", cy: "16", r: "16" }) }) }), _jsxs("g", { clipPath: `url(#${CS_FLAG_CLIP_ID})`, children: [_jsx("rect", { width: "32", height: "16", fill: "#ffffff" }), _jsx("rect", { y: "16", width: "32", height: "16", fill: "#d7141a" }), _jsx("path", { d: "M0 0 L18 16 L0 32 Z", fill: "#11457e" })] })] }));
6
+ }
7
+ export function EnglishFlagSvg({ className }) {
8
+ return (_jsxs("svg", { viewBox: "0 0 32 32", className: className, "aria-hidden": "true", children: [_jsx("defs", { children: _jsx("clipPath", { id: EN_FLAG_CLIP_ID, children: _jsx("circle", { cx: "16", cy: "16", r: "16" }) }) }), _jsxs("g", { clipPath: `url(#${EN_FLAG_CLIP_ID})`, children: [_jsx("rect", { width: "32", height: "32", fill: "#012169" }), _jsx("path", { d: "M0 0 L32 32 M32 0 L0 32", stroke: "#ffffff", strokeWidth: "6" }), _jsx("path", { d: "M0 0 L32 32 M32 0 L0 32", stroke: "#c8102e", strokeWidth: "3" }), _jsx("path", { d: "M16 0 V32 M0 16 H32", stroke: "#ffffff", strokeWidth: "10" }), _jsx("path", { d: "M16 0 V32 M0 16 H32", stroke: "#c8102e", strokeWidth: "6" })] })] }));
9
+ }
10
+ //# sourceMappingURL=flagSvgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flagSvgs.js","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/flagSvgs.tsx"],"names":[],"mappings":";AAMA,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC9C,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAsB;IAC5D,OAAO,CACL,eAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,iBAAc,MAAM,aAC/D,yBACE,mBAAU,EAAE,EAAE,eAAe,YAC3B,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,GAAG,GACxB,GACN,EACP,aAAG,QAAQ,EAAE,QAAQ,eAAe,GAAG,aACrC,eAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAG,EAC9C,eAAM,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAG,EACrD,eAAM,CAAC,EAAC,qBAAqB,EAAC,IAAI,EAAC,SAAS,GAAG,IAC7C,IACA,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAAsB;IAC9D,OAAO,CACL,eAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,iBAAc,MAAM,aAC/D,yBACE,mBAAU,EAAE,EAAE,eAAe,YAC3B,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,GAAG,GACxB,GACN,EACP,aAAG,QAAQ,EAAE,QAAQ,eAAe,GAAG,aACrC,eAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAG,EAC9C,eAAM,CAAC,EAAC,yBAAyB,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,GAAG,EACrE,eAAM,CAAC,EAAC,yBAAyB,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,GAAG,EACrE,eAAM,CAAC,EAAC,qBAAqB,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,IAAI,GAAG,EAClE,eAAM,CAAC,EAAC,qBAAqB,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,GAAG,IAC/D,IACA,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { CzechFlagSvg, EnglishFlagSvg, type LocaleFlagSvgComponent, type LocaleFlagSvgProps } from './flagSvgs.js';
2
+ export { DEFAULT_LOCALE_FLAGS, buildLocaleLabelKey, mergeLocaleFlags, resolveActiveLocaleCode, resolveDocumentLang, type LocaleFlagOption, } from './localeFlagRegistry.js';
3
+ export { LocaleFlagToggle, type LocaleFlagTogglePlacement, type LocaleFlagToggleProps, type LocaleFlagToggleSurface, } from './LocaleFlagToggle.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { CzechFlagSvg, EnglishFlagSvg } from './flagSvgs.js';
2
+ export { DEFAULT_LOCALE_FLAGS, buildLocaleLabelKey, mergeLocaleFlags, resolveActiveLocaleCode, resolveDocumentLang, } from './localeFlagRegistry.js';
3
+ export { LocaleFlagToggle, } from './LocaleFlagToggle.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAwD,MAAM,eAAe,CAAC;AACnH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,GAIjB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type LocaleFlagSvgComponent } from './flagSvgs.js';
2
+ export interface LocaleFlagOption {
3
+ /** i18n language code passed to `i18n.changeLanguage` (e.g. `cs`, `en`). */
4
+ readonly code: string;
5
+ readonly Flag: LocaleFlagSvgComponent;
6
+ /** When omitted, matches `lng === code` or `lng.startsWith(code)`. */
7
+ readonly matchesLanguage?: (lng: string) => boolean;
8
+ /** Value for `document.documentElement.lang` when this locale is active. */
9
+ readonly documentLang?: string;
10
+ }
11
+ export declare const DEFAULT_LOCALE_FLAGS: readonly LocaleFlagOption[];
12
+ export declare function mergeLocaleFlags(base: readonly LocaleFlagOption[], extra: readonly LocaleFlagOption[]): readonly LocaleFlagOption[];
13
+ export declare function resolveActiveLocaleCode(lng: string | undefined, locales: readonly LocaleFlagOption[]): string;
14
+ export declare function resolveDocumentLang(localeCode: string, locales: readonly LocaleFlagOption[]): string;
15
+ export declare function buildLocaleLabelKey(code: string): string;
16
+ //# sourceMappingURL=localeFlagRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeFlagRegistry.d.ts","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/localeFlagRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE1F,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,sEAAsE;IACtE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACpD,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAMD,eAAO,MAAM,oBAAoB,EAAE,SAAS,gBAAgB,EAalD,CAAC;AAEX,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,SAAS,gBAAgB,EAAE,CAS7B;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,SAAS,gBAAgB,EAAE,GACnC,MAAM,CAUR;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,SAAS,gBAAgB,EAAE,GACnC,MAAM,CAGR;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,45 @@
1
+ import { CzechFlagSvg, EnglishFlagSvg } from './flagSvgs.js';
2
+ function defaultMatchesLanguage(code, lng) {
3
+ return lng === code || lng.startsWith(`${code}-`) || lng.startsWith(code);
4
+ }
5
+ export const DEFAULT_LOCALE_FLAGS = [
6
+ {
7
+ code: 'cs',
8
+ Flag: CzechFlagSvg,
9
+ matchesLanguage: (lng) => defaultMatchesLanguage('cs', lng),
10
+ documentLang: 'cs',
11
+ },
12
+ {
13
+ code: 'en',
14
+ Flag: EnglishFlagSvg,
15
+ matchesLanguage: (lng) => defaultMatchesLanguage('en', lng),
16
+ documentLang: 'en',
17
+ },
18
+ ];
19
+ export function mergeLocaleFlags(base, extra) {
20
+ const merged = new Map();
21
+ for (const option of base) {
22
+ merged.set(option.code, option);
23
+ }
24
+ for (const option of extra) {
25
+ merged.set(option.code, option);
26
+ }
27
+ return [...merged.values()];
28
+ }
29
+ export function resolveActiveLocaleCode(lng, locales) {
30
+ if (lng != null && lng !== '') {
31
+ const matched = locales.find((option) => option.matchesLanguage ? option.matchesLanguage(lng) : defaultMatchesLanguage(option.code, lng));
32
+ if (matched) {
33
+ return matched.code;
34
+ }
35
+ }
36
+ return locales[0]?.code ?? 'cs';
37
+ }
38
+ export function resolveDocumentLang(localeCode, locales) {
39
+ const option = locales.find((entry) => entry.code === localeCode);
40
+ return option?.documentLang ?? localeCode;
41
+ }
42
+ export function buildLocaleLabelKey(code) {
43
+ return `shell.language.${code}`;
44
+ }
45
+ //# sourceMappingURL=localeFlagRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeFlagRegistry.js","sourceRoot":"","sources":["../../../src/ui/LocaleFlags/localeFlagRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAA+B,MAAM,eAAe,CAAC;AAY1F,SAAS,sBAAsB,CAAC,IAAY,EAAE,GAAW;IACvD,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAgC;IAC/D;QACE,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,YAAY;QAClB,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3D,YAAY,EAAE,IAAI;KACnB;IACD;QACE,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,cAAc;QACpB,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3D,YAAY,EAAE,IAAI;KACnB;CACO,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAC9B,IAAiC,EACjC,KAAkC;IAElC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IACnD,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAuB,EACvB,OAAoC;IAEpC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACtC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAChG,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,OAAoC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAClE,OAAO,MAAM,EAAE,YAAY,IAAI,UAAU,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,kBAAkB,IAAI,EAAE,CAAC;AAClC,CAAC"}
@@ -4,7 +4,8 @@
4
4
  export { Button, type ButtonProps } from './Button/Button.js';
5
5
  export { Card, type CardProps } from './Card/Card.js';
6
6
  export { FormField, type FormFieldProps } from './FormField/FormField.js';
7
- export { LanguageToggle, type LanguageToggleProps, type LanguageToggleNamespace, type LanguageToggleSurface, } from './LanguageToggle/LanguageToggle.js';
7
+ export { LanguageToggle, type LanguageToggleProps, type LanguageToggleNamespace, type LanguageToggleSurface, type LanguageTogglePlacement, } from './LanguageToggle/LanguageToggle.js';
8
+ export { CzechFlagSvg, EnglishFlagSvg, DEFAULT_LOCALE_FLAGS, LocaleFlagToggle, buildLocaleLabelKey, mergeLocaleFlags, resolveActiveLocaleCode, resolveDocumentLang, type LocaleFlagOption, type LocaleFlagSvgComponent, type LocaleFlagSvgProps, type LocaleFlagTogglePlacement, type LocaleFlagToggleProps, type LocaleFlagToggleSurface, } from './LocaleFlags/index.js';
8
9
  export { useTurnstileAuth, type UseTurnstileAuthResult } from './Turnstile/useTurnstileAuth.js';
9
10
  export { TurnstileWidget, type TurnstileWidgetProps } from './Turnstile/TurnstileWidget.js';
10
11
  export { useTurnstileExecute, type UseTurnstileExecuteResult } from './Turnstile/useTurnstileExecute.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACzG,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,GACjC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACzG,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,GACjC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC"}
package/dist/ui/index.js CHANGED
@@ -5,6 +5,7 @@ export { Button } from './Button/Button.js';
5
5
  export { Card } from './Card/Card.js';
6
6
  export { FormField } from './FormField/FormField.js';
7
7
  export { LanguageToggle, } from './LanguageToggle/LanguageToggle.js';
8
+ export { CzechFlagSvg, EnglishFlagSvg, DEFAULT_LOCALE_FLAGS, LocaleFlagToggle, buildLocaleLabelKey, mergeLocaleFlags, resolveActiveLocaleCode, resolveDocumentLang, } from './LocaleFlags/index.js';
8
9
  export { useTurnstileAuth } from './Turnstile/useTurnstileAuth.js';
9
10
  export { TurnstileWidget } from './Turnstile/TurnstileWidget.js';
10
11
  export { useTurnstileExecute } from './Turnstile/useTurnstileExecute.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAoB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAkB,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAuB,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,cAAc,GAIf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAA+B,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,eAAe,EAA6B,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAkC,MAAM,oCAAoC,CAAC;AACzG,OAAO,EACL,sBAAsB,GAEvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,GAI3B,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAoB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAkB,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAuB,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,cAAc,GAKf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GAOpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAA+B,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,eAAe,EAA6B,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAkC,MAAM,oCAAoC,CAAC;AACzG,OAAO,EACL,sBAAsB,GAEvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,GAI3B,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-kiosk-shared",
3
- "version": "2.2.3",
3
+ "version": "2.2.5",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Shared types, API contracts, and error classes for Pi Kiosk system",
@@ -122,6 +122,12 @@
122
122
  },
123
123
  "./theme.css": "./src/tokens/theme.css",
124
124
  "./admin-theme.css": "./src/tokens/admin-theme.css",
125
+ "./responsive.css": "./src/tokens/responsive.css",
126
+ "./responsive": {
127
+ "types": "./dist/responsive/index.d.ts",
128
+ "import": "./dist/responsive/index.js",
129
+ "require": "./dist/responsive/index.js"
130
+ },
125
131
  "./ui": {
126
132
  "types": "./dist/ui/index.d.ts",
127
133
  "import": "./dist/ui/index.js",
@@ -11,6 +11,7 @@ test('theme.css and admin-theme.css exist and export @theme tokens', () => {
11
11
  const admin = readFileSync(join(tokensDir, 'admin-theme.css'), 'utf8');
12
12
  assert.match(theme, /@theme/);
13
13
  assert.match(theme, /--color-surface/);
14
+ assert.match(theme, /\.light/);
14
15
  assert.match(admin, /--color-an-bg/);
15
16
  assert.match(admin, /--color-rail-sidebar-bg/);
16
17
  });
@@ -0,0 +1,13 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { test } from 'node:test';
5
+ import assert from 'node:assert/strict';
6
+
7
+ const tokensDir = join(dirname(fileURLToPath(import.meta.url)), '..');
8
+
9
+ test('theme.css defines explicit .light override block', () => {
10
+ const theme = readFileSync(join(tokensDir, 'theme.css'), 'utf8');
11
+ assert.match(theme, /\.light\s*\{/);
12
+ assert.match(theme, /\.light[\s\S]*--color-surface:\s*#ffffff/);
13
+ });
@@ -0,0 +1,85 @@
1
+ /**
2
+ * pi-kiosk-shared responsive contract — custom media aliases (Tailwind v4 Option A).
3
+ * Import after theme.css. wide (1440) is NOT a token here — test viewport only.
4
+ *
5
+ * Breakpoint block generated from breakpoints.ts — run: npm run generate:responsive-css -- --write
6
+ * Drift: gate:responsive-css-generation + gate:responsive-breakpoint-drift
7
+ */
8
+ :root {
9
+ --rp-breakpoint-sm: 640px;
10
+ --rp-breakpoint-md: 768px;
11
+ --rp-breakpoint-lg: 1024px;
12
+ --rp-breakpoint-xl: 1280px;
13
+ --rp-breakpoint-2xl: 1536px;
14
+ }
15
+
16
+ @custom-media --rp-sm-up (min-width: 640px);
17
+ @custom-media --rp-md-up (min-width: 768px);
18
+ @custom-media --rp-lg-up (min-width: 1024px);
19
+ @custom-media --rp-xl-up (min-width: 1280px);
20
+ @custom-media --rp-2xl-up (min-width: 1536px);
21
+ @custom-media --rp-max-lg (max-width: 1023px);
22
+
23
+ /* Container query naming tokens */
24
+ :root {
25
+ --rp-container-card: rp-card;
26
+ --rp-container-kpi: rp-kpi;
27
+ --rp-container-table: rp-table;
28
+ }
29
+
30
+ .rp-card-container {
31
+ container-type: inline-size;
32
+ container-name: rp-card;
33
+ }
34
+
35
+ .rp-card-container-inner {
36
+ --rp-card-content-gap: 0.5rem;
37
+ }
38
+
39
+ .rp-kpi-container {
40
+ container-type: inline-size;
41
+ container-name: rp-kpi;
42
+ }
43
+
44
+ .rp-table-container {
45
+ container-type: inline-size;
46
+ container-name: rp-table;
47
+ }
48
+
49
+ .rp-drawer-body {
50
+ container-type: inline-size;
51
+ container-name: rp-drawer-body;
52
+ }
53
+
54
+ /* Shared Card density — CQ layout (not cosmetic) with viewport fallback */
55
+ .rp-card-container-inner > * + * {
56
+ margin-block-start: var(--rp-card-content-gap);
57
+ }
58
+
59
+ @supports (container-type: inline-size) {
60
+ @container rp-card (min-width: 20rem) {
61
+ .rp-card-container-inner {
62
+ --rp-card-content-gap: 0.75rem;
63
+ }
64
+ }
65
+
66
+ @container rp-card (min-width: 28rem) {
67
+ .rp-card-container-inner {
68
+ --rp-card-content-gap: 1rem;
69
+ }
70
+ }
71
+ }
72
+
73
+ @supports not (container-type: inline-size) {
74
+ @media (min-width: 640px) {
75
+ .rp-card-container-inner {
76
+ --rp-card-content-gap: 0.75rem;
77
+ }
78
+ }
79
+
80
+ @media (min-width: 1024px) {
81
+ .rp-card-container-inner {
82
+ --rp-card-content-gap: 1rem;
83
+ }
84
+ }
85
+ }
@@ -29,6 +29,8 @@
29
29
  --color-border: #e2e8f0;
30
30
  --color-border-strong: #cbd5e1;
31
31
  --color-focus-ring: var(--brand-consumer-accent);
32
+ --color-qr-render-dark: #000000;
33
+ --color-qr-render-light: #ffffff;
32
34
  --color-disabled-opacity: 0.55;
33
35
  --radius-sm: 0.375rem;
34
36
  --radius-md: 0.5rem;
@@ -101,3 +103,35 @@
101
103
  --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.28), 0 4px 12px rgba(0, 0, 0, 0.2);
102
104
  --shadow-popover: 0 6px 24px rgba(0, 0, 0, 0.36);
103
105
  }
106
+
107
+ /**
108
+ * Explicit light override — wins over `@media (prefers-color-scheme: dark)` when
109
+ * user selects Light while OS is dark (Theme Contract / customer_theme_light_fix_v1).
110
+ */
111
+ .light {
112
+ color-scheme: light;
113
+ --color-surface: #ffffff;
114
+ --color-surface-muted: #f8fafc;
115
+ --color-surface-elevated: #ffffff;
116
+ --color-surface-hover: #f1f5f9;
117
+ --color-on-surface: #0f172a;
118
+ --color-on-surface-muted: #475569;
119
+ --color-on-surface-disabled: #94a3b8;
120
+ --color-primary: #0f172a;
121
+ --color-primary-foreground: #f8fafc;
122
+ --color-accent: var(--brand-consumer-accent);
123
+ --color-accent-foreground: var(--brand-consumer-accent-foreground);
124
+ --color-accent-hover: #001a33;
125
+ --color-success: #16a34a;
126
+ --color-success-foreground: #ecfdf5;
127
+ --color-danger: #dc2626;
128
+ --color-danger-foreground: #fef2f2;
129
+ --color-warning: #d97706;
130
+ --color-warning-foreground: #fffbeb;
131
+ --color-border: #e2e8f0;
132
+ --color-border-strong: #cbd5e1;
133
+ --color-focus-ring: var(--brand-consumer-accent);
134
+ --color-disabled-opacity: 0.55;
135
+ --shadow-card: 0 1px 2px rgba(15, 23, 42, 0.06), 0 4px 12px rgba(15, 23, 42, 0.04);
136
+ --shadow-popover: 0 6px 24px rgba(15, 23, 42, 0.12);
137
+ }