pi-kiosk-shared 2.2.3 → 2.2.4

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 (42) hide show
  1. package/dist/responsive/breakpoints.d.ts +73 -0
  2. package/dist/responsive/breakpoints.d.ts.map +1 -0
  3. package/dist/responsive/breakpoints.js +40 -0
  4. package/dist/responsive/breakpoints.js.map +1 -0
  5. package/dist/responsive/index.d.ts +3 -0
  6. package/dist/responsive/index.d.ts.map +1 -0
  7. package/dist/responsive/index.js +3 -0
  8. package/dist/responsive/index.js.map +1 -0
  9. package/dist/responsive/useResponsiveTier.d.ts +6 -0
  10. package/dist/responsive/useResponsiveTier.d.ts.map +1 -0
  11. package/dist/responsive/useResponsiveTier.js +33 -0
  12. package/dist/responsive/useResponsiveTier.js.map +1 -0
  13. package/dist/ui/Card/Card.d.ts.map +1 -1
  14. package/dist/ui/Card/Card.js +3 -0
  15. package/dist/ui/Card/Card.js.map +1 -1
  16. package/dist/ui/LanguageToggle/LanguageToggle.d.ts +8 -4
  17. package/dist/ui/LanguageToggle/LanguageToggle.d.ts.map +1 -1
  18. package/dist/ui/LanguageToggle/LanguageToggle.js +13 -135
  19. package/dist/ui/LanguageToggle/LanguageToggle.js.map +1 -1
  20. package/dist/ui/LocaleFlags/LocaleFlagToggle.d.ts +15 -0
  21. package/dist/ui/LocaleFlags/LocaleFlagToggle.d.ts.map +1 -0
  22. package/dist/ui/LocaleFlags/LocaleFlagToggle.js +140 -0
  23. package/dist/ui/LocaleFlags/LocaleFlagToggle.js.map +1 -0
  24. package/dist/ui/LocaleFlags/flagSvgs.d.ts +8 -0
  25. package/dist/ui/LocaleFlags/flagSvgs.d.ts.map +1 -0
  26. package/dist/ui/LocaleFlags/flagSvgs.js +10 -0
  27. package/dist/ui/LocaleFlags/flagSvgs.js.map +1 -0
  28. package/dist/ui/LocaleFlags/index.d.ts +4 -0
  29. package/dist/ui/LocaleFlags/index.d.ts.map +1 -0
  30. package/dist/ui/LocaleFlags/index.js +4 -0
  31. package/dist/ui/LocaleFlags/index.js.map +1 -0
  32. package/dist/ui/LocaleFlags/localeFlagRegistry.d.ts +16 -0
  33. package/dist/ui/LocaleFlags/localeFlagRegistry.d.ts.map +1 -0
  34. package/dist/ui/LocaleFlags/localeFlagRegistry.js +45 -0
  35. package/dist/ui/LocaleFlags/localeFlagRegistry.js.map +1 -0
  36. package/dist/ui/index.d.ts +2 -1
  37. package/dist/ui/index.d.ts.map +1 -1
  38. package/dist/ui/index.js +1 -0
  39. package/dist/ui/index.js.map +1 -1
  40. package/package.json +7 -1
  41. package/src/tokens/responsive.css +82 -0
  42. package/src/tokens/theme.css +2 -0
@@ -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 +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;kDAyC5B,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(' '),
@@ -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,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,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.4",
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",
@@ -0,0 +1,82 @@
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
+ --rp-card-content-gap: 0.5rem;
34
+ }
35
+
36
+ .rp-kpi-container {
37
+ container-type: inline-size;
38
+ container-name: rp-kpi;
39
+ }
40
+
41
+ .rp-table-container {
42
+ container-type: inline-size;
43
+ container-name: rp-table;
44
+ }
45
+
46
+ .rp-drawer-body {
47
+ container-type: inline-size;
48
+ container-name: rp-drawer-body;
49
+ }
50
+
51
+ /* Shared Card density — CQ layout (not cosmetic) with viewport fallback */
52
+ .rp-card-container > * + * {
53
+ margin-block-start: var(--rp-card-content-gap);
54
+ }
55
+
56
+ @supports (container-type: inline-size) {
57
+ @container rp-card (min-width: 20rem) {
58
+ .rp-card-container {
59
+ --rp-card-content-gap: 0.75rem;
60
+ }
61
+ }
62
+
63
+ @container rp-card (min-width: 28rem) {
64
+ .rp-card-container {
65
+ --rp-card-content-gap: 1rem;
66
+ }
67
+ }
68
+ }
69
+
70
+ @supports not (container-type: inline-size) {
71
+ @media (min-width: 640px) {
72
+ .rp-card-container {
73
+ --rp-card-content-gap: 0.75rem;
74
+ }
75
+ }
76
+
77
+ @media (min-width: 1024px) {
78
+ .rp-card-container {
79
+ --rp-card-content-gap: 1rem;
80
+ }
81
+ }
82
+ }
@@ -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;