pi-kiosk-shared 2.2.35 → 2.2.37

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 (142) hide show
  1. package/dist/auth/turnstileTypes.d.ts +9 -0
  2. package/dist/auth/turnstileTypes.d.ts.map +1 -1
  3. package/dist/auth/turnstileTypes.js +16 -3
  4. package/dist/auth/turnstileTypes.js.map +1 -1
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/permissions/permissionLabels.d.ts +7 -0
  10. package/dist/permissions/permissionLabels.d.ts.map +1 -1
  11. package/dist/permissions/permissionLabels.js +132 -1
  12. package/dist/permissions/permissionLabels.js.map +1 -1
  13. package/dist/ui/Avatar/Avatar.d.ts +15 -0
  14. package/dist/ui/Avatar/Avatar.d.ts.map +1 -0
  15. package/dist/ui/Avatar/Avatar.js +37 -0
  16. package/dist/ui/Avatar/Avatar.js.map +1 -0
  17. package/dist/ui/Badge/Badge.d.ts +60 -0
  18. package/dist/ui/Badge/Badge.d.ts.map +1 -0
  19. package/dist/ui/Badge/Badge.js +91 -0
  20. package/dist/ui/Badge/Badge.js.map +1 -0
  21. package/dist/ui/BottomSheet/BottomSheet.d.ts +18 -0
  22. package/dist/ui/BottomSheet/BottomSheet.d.ts.map +1 -0
  23. package/dist/ui/BottomSheet/BottomSheet.js +29 -0
  24. package/dist/ui/BottomSheet/BottomSheet.js.map +1 -0
  25. package/dist/ui/Breadcrumbs/Breadcrumbs.d.ts +19 -0
  26. package/dist/ui/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  27. package/dist/ui/Breadcrumbs/Breadcrumbs.js +13 -0
  28. package/dist/ui/Breadcrumbs/Breadcrumbs.js.map +1 -0
  29. package/dist/ui/Checkbox/Checkbox.d.ts +9 -0
  30. package/dist/ui/Checkbox/Checkbox.d.ts.map +1 -0
  31. package/dist/ui/Checkbox/Checkbox.js +18 -0
  32. package/dist/ui/Checkbox/Checkbox.js.map +1 -0
  33. package/dist/ui/Dialog/Dialog.d.ts +16 -0
  34. package/dist/ui/Dialog/Dialog.d.ts.map +1 -0
  35. package/dist/ui/Dialog/Dialog.js +31 -0
  36. package/dist/ui/Dialog/Dialog.js.map +1 -0
  37. package/dist/ui/FAB/FAB.d.ts +15 -0
  38. package/dist/ui/FAB/FAB.d.ts.map +1 -0
  39. package/dist/ui/FAB/FAB.js +18 -0
  40. package/dist/ui/FAB/FAB.js.map +1 -0
  41. package/dist/ui/FilterChip/FilterChip.d.ts +16 -0
  42. package/dist/ui/FilterChip/FilterChip.d.ts.map +1 -0
  43. package/dist/ui/FilterChip/FilterChip.js +26 -0
  44. package/dist/ui/FilterChip/FilterChip.js.map +1 -0
  45. package/dist/ui/Icon/Icon.d.ts +18 -0
  46. package/dist/ui/Icon/Icon.d.ts.map +1 -0
  47. package/dist/ui/Icon/Icon.js +17 -0
  48. package/dist/ui/Icon/Icon.js.map +1 -0
  49. package/dist/ui/Icon/index.d.ts +4 -0
  50. package/dist/ui/Icon/index.d.ts.map +1 -0
  51. package/dist/ui/Icon/index.js +3 -0
  52. package/dist/ui/Icon/index.js.map +1 -0
  53. package/dist/ui/Icon/lucide.d.ts +7 -0
  54. package/dist/ui/Icon/lucide.d.ts.map +1 -0
  55. package/dist/ui/Icon/lucide.js +2 -0
  56. package/dist/ui/Icon/lucide.js.map +1 -0
  57. package/dist/ui/IconButton/IconButton.d.ts +51 -0
  58. package/dist/ui/IconButton/IconButton.d.ts.map +1 -0
  59. package/dist/ui/IconButton/IconButton.js +37 -0
  60. package/dist/ui/IconButton/IconButton.js.map +1 -0
  61. package/dist/ui/IconButton/index.d.ts +2 -0
  62. package/dist/ui/IconButton/index.d.ts.map +1 -0
  63. package/dist/ui/IconButton/index.js +2 -0
  64. package/dist/ui/IconButton/index.js.map +1 -0
  65. package/dist/ui/Input/Input.d.ts +24 -0
  66. package/dist/ui/Input/Input.d.ts.map +1 -0
  67. package/dist/ui/Input/Input.js +25 -0
  68. package/dist/ui/Input/Input.js.map +1 -0
  69. package/dist/ui/Loader/Loader.d.ts +13 -0
  70. package/dist/ui/Loader/Loader.d.ts.map +1 -0
  71. package/dist/ui/Loader/Loader.js +17 -0
  72. package/dist/ui/Loader/Loader.js.map +1 -0
  73. package/dist/ui/NavStepper/NavStepper.d.ts +16 -0
  74. package/dist/ui/NavStepper/NavStepper.d.ts.map +1 -0
  75. package/dist/ui/NavStepper/NavStepper.js +31 -0
  76. package/dist/ui/NavStepper/NavStepper.js.map +1 -0
  77. package/dist/ui/QuantityStepper/QuantityStepper.d.ts +19 -0
  78. package/dist/ui/QuantityStepper/QuantityStepper.d.ts.map +1 -0
  79. package/dist/ui/QuantityStepper/QuantityStepper.js +13 -0
  80. package/dist/ui/QuantityStepper/QuantityStepper.js.map +1 -0
  81. package/dist/ui/QuantityStepper/index.d.ts +2 -0
  82. package/dist/ui/QuantityStepper/index.d.ts.map +1 -0
  83. package/dist/ui/QuantityStepper/index.js +2 -0
  84. package/dist/ui/QuantityStepper/index.js.map +1 -0
  85. package/dist/ui/Radio/Radio.d.ts +9 -0
  86. package/dist/ui/Radio/Radio.d.ts.map +1 -0
  87. package/dist/ui/Radio/Radio.js +18 -0
  88. package/dist/ui/Radio/Radio.js.map +1 -0
  89. package/dist/ui/ScreenState/ScreenState.d.ts +27 -0
  90. package/dist/ui/ScreenState/ScreenState.d.ts.map +1 -0
  91. package/dist/ui/ScreenState/ScreenState.js +29 -0
  92. package/dist/ui/ScreenState/ScreenState.js.map +1 -0
  93. package/dist/ui/SegmentTabs/SegmentTabs.d.ts +21 -0
  94. package/dist/ui/SegmentTabs/SegmentTabs.d.ts.map +1 -0
  95. package/dist/ui/SegmentTabs/SegmentTabs.js +49 -0
  96. package/dist/ui/SegmentTabs/SegmentTabs.js.map +1 -0
  97. package/dist/ui/SegmentTabs/SegmentTabsOverflow.d.ts +17 -0
  98. package/dist/ui/SegmentTabs/SegmentTabsOverflow.d.ts.map +1 -0
  99. package/dist/ui/SegmentTabs/SegmentTabsOverflow.js +24 -0
  100. package/dist/ui/SegmentTabs/SegmentTabsOverflow.js.map +1 -0
  101. package/dist/ui/Select/Select.d.ts +30 -0
  102. package/dist/ui/Select/Select.d.ts.map +1 -0
  103. package/dist/ui/Select/Select.js +101 -0
  104. package/dist/ui/Select/Select.js.map +1 -0
  105. package/dist/ui/Select/index.d.ts +2 -0
  106. package/dist/ui/Select/index.d.ts.map +1 -0
  107. package/dist/ui/Select/index.js +2 -0
  108. package/dist/ui/Select/index.js.map +1 -0
  109. package/dist/ui/Skeleton/Skeleton.d.ts +15 -0
  110. package/dist/ui/Skeleton/Skeleton.d.ts.map +1 -0
  111. package/dist/ui/Skeleton/Skeleton.js +16 -0
  112. package/dist/ui/Skeleton/Skeleton.js.map +1 -0
  113. package/dist/ui/Switch/Switch.d.ts +11 -0
  114. package/dist/ui/Switch/Switch.d.ts.map +1 -0
  115. package/dist/ui/Switch/Switch.js +36 -0
  116. package/dist/ui/Switch/Switch.js.map +1 -0
  117. package/dist/ui/Textarea/Textarea.d.ts +24 -0
  118. package/dist/ui/Textarea/Textarea.d.ts.map +1 -0
  119. package/dist/ui/Textarea/Textarea.js +25 -0
  120. package/dist/ui/Textarea/Textarea.js.map +1 -0
  121. package/dist/ui/Toast/Toast.d.ts +14 -0
  122. package/dist/ui/Toast/Toast.d.ts.map +1 -0
  123. package/dist/ui/Toast/Toast.js +21 -0
  124. package/dist/ui/Toast/Toast.js.map +1 -0
  125. package/dist/ui/Turnstile/TurnstileExecuteWidget.d.ts +1 -1
  126. package/dist/ui/Turnstile/TurnstileExecuteWidget.d.ts.map +1 -1
  127. package/dist/ui/Turnstile/TurnstileExecuteWidget.js +9 -0
  128. package/dist/ui/Turnstile/TurnstileExecuteWidget.js.map +1 -1
  129. package/dist/ui/Turnstile/useTurnstileAuth.d.ts.map +1 -1
  130. package/dist/ui/Turnstile/useTurnstileAuth.js +3 -2
  131. package/dist/ui/Turnstile/useTurnstileAuth.js.map +1 -1
  132. package/dist/ui/Turnstile/useTurnstileExecute.d.ts +5 -0
  133. package/dist/ui/Turnstile/useTurnstileExecute.d.ts.map +1 -1
  134. package/dist/ui/Turnstile/useTurnstileExecute.js +65 -6
  135. package/dist/ui/Turnstile/useTurnstileExecute.js.map +1 -1
  136. package/dist/ui/Typography/Typography.d.ts +70 -0
  137. package/dist/ui/Typography/Typography.d.ts.map +1 -0
  138. package/dist/ui/Typography/Typography.js +58 -0
  139. package/dist/ui/Typography/Typography.js.map +1 -0
  140. package/package.json +1 -1
  141. package/src/tokens/brand-bridge.css +6 -0
  142. package/src/tokens/tokens.sync.json +989 -0
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { Icon } from '../Icon/Icon.js';
4
+ import { tv } from '../tvShim.js';
5
+ const iconButton = tv({
6
+ base: [
7
+ 'inline-flex items-center justify-center rounded-[var(--radius-md,0.5rem)] border border-[var(--color-border-default,var(--color-border))]',
8
+ 'bg-[var(--color-surface-default,var(--color-surface))] text-[var(--color-text-primary,var(--color-on-surface))]',
9
+ 'hover:bg-[var(--color-surface-hover,var(--color-neutral-100))]',
10
+ 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',
11
+ 'focus-visible:outline-[var(--color-border-focus,var(--color-focus-ring))]',
12
+ 'disabled:cursor-not-allowed disabled:opacity-[var(--color-disabled-opacity,0.55)]',
13
+ ].join(' '),
14
+ variants: {
15
+ tone: {
16
+ default: '',
17
+ danger: [
18
+ 'border-[var(--color-status-error,var(--color-danger))]',
19
+ 'text-[var(--color-status-error,var(--color-danger))]',
20
+ 'hover:bg-[var(--color-surface-soft,var(--color-danger-foreground))]',
21
+ ].join(' '),
22
+ muted: 'text-[var(--color-text-muted,var(--color-on-surface-muted))]',
23
+ },
24
+ size: {
25
+ sm: 'h-9 w-9 min-h-9 min-w-9',
26
+ md: 'h-11 w-11 min-h-11 min-w-11',
27
+ },
28
+ },
29
+ defaultVariants: { tone: 'default', size: 'md' },
30
+ });
31
+ /**
32
+ * CMP-0018 IconButton — icon-only control with required `aria-label`.
33
+ * Glyphs must come from the shared Lucide map (`pi-kiosk-shared/ui`), not app `lucide-react` imports.
34
+ */
35
+ export const IconButton = forwardRef(({ className, tone, size, icon, type = 'button', ...rest }, ref) => (_jsx("button", { ref: ref, type: type, className: iconButton({ tone, size, className }), ...rest, children: _jsx(Icon, { icon: icon, size: 20, "aria-hidden": true }) })));
36
+ IconButton.displayName = 'IconButton';
37
+ //# sourceMappingURL=IconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../../../src/ui/IconButton/IconButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA6B,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,EAAE,EAAqB,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,EAAE;QACJ,2IAA2I;QAC3I,iHAAiH;QACjH,gEAAgE;QAChE,8EAA8E;QAC9E,2EAA2E;QAC3E,mFAAmF;KACpF,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE;YACX,MAAM,EAAE;gBACN,wDAAwD;gBACxD,sDAAsD;gBACtD,qEAAqE;aACtE,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,KAAK,EAAE,8DAA8D;SACtE;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,yBAAyB;YAC7B,EAAE,EAAE,6BAA6B;SAClC;KACF;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;CACjD,CAAC,CAAC;AAcH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAClC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAe,EAAE,CAAC,CAC/E,iBAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KAAM,IAAI,YACtF,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAe,IAAI,GAAI,GAC1C,CACV,CACF,CAAC;AACF,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { IconButton, type IconButtonProps } from './IconButton.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/IconButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { IconButton } from './IconButton.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/IconButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type InputHTMLAttributes } from 'react';
2
+ import { type VariantProps } from '../tvShim.js';
3
+ declare const input: import("tailwind-variants").TVReturnType<{
4
+ invalid: {
5
+ true: string;
6
+ false: string;
7
+ };
8
+ }, undefined, string, TVConfig<V, EV>, {
9
+ invalid: {
10
+ true: string;
11
+ false: string;
12
+ };
13
+ }, undefined, import("tailwind-variants").TVReturnType<{
14
+ invalid: {
15
+ true: string;
16
+ false: string;
17
+ };
18
+ }, undefined, string, TVConfig<V, EV>, unknown, unknown, undefined>>;
19
+ type InputVariants = VariantProps<typeof input>;
20
+ export type InputProps = InputHTMLAttributes<HTMLInputElement> & InputVariants;
21
+ /** CMP-0004 Input */
22
+ export declare const Input: import("react").ForwardRefExoticComponent<InputHTMLAttributes<HTMLInputElement> & InputVariants & import("react").RefAttributes<HTMLInputElement>>;
23
+ export {};
24
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/ui/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAErD,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;oEAiBT,CAAC;AAEH,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,KAAK,CAAC,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;AAE/E,qBAAqB;AACrB,eAAO,MAAM,KAAK,oJAIjB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { tv } from '../tvShim.js';
4
+ const input = tv({
5
+ base: [
6
+ 'h-10 w-full rounded-md border px-3 text-sm',
7
+ 'border-[var(--color-border,var(--color-an-border))]',
8
+ 'bg-[var(--color-surface,var(--color-an-surface))]',
9
+ 'text-[var(--color-on-surface,var(--color-an-text))]',
10
+ 'placeholder:text-[var(--color-on-surface-muted,var(--color-an-text-muted))]',
11
+ 'focus-visible:outline-none focus-visible:border-[var(--color-focus-ring,var(--color-an-primary))]',
12
+ 'disabled:cursor-not-allowed disabled:opacity-60',
13
+ ].join(' '),
14
+ variants: {
15
+ invalid: {
16
+ true: 'border-[var(--color-danger,var(--color-an-danger))]',
17
+ false: '',
18
+ },
19
+ },
20
+ defaultVariants: { invalid: false },
21
+ });
22
+ /** CMP-0004 Input */
23
+ export const Input = forwardRef(({ className, invalid, ...rest }, ref) => (_jsx("input", { ref: ref, className: input({ invalid, className }), ...rest })));
24
+ Input.displayName = 'Input';
25
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/ui/Input/Input.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAqB,MAAM,cAAc,CAAC;AAErD,MAAM,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,EAAE;QACJ,4CAA4C;QAC5C,qDAAqD;QACrD,mDAAmD;QACnD,qDAAqD;QACrD,6EAA6E;QAC7E,mGAAmG;QACnG,iDAAiD;KAClD,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,IAAI,EAAE,qDAAqD;YAC3D,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;CACpC,CAAC,CAAC;AAMH,qBAAqB;AACrB,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACxC,gBAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,KAAM,IAAI,GAAI,CACxE,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CMP-0013 Loader — spinner alias.
3
+ */
4
+ export interface LoaderProps {
5
+ readonly size?: 'sm' | 'md' | 'lg';
6
+ readonly label?: string;
7
+ readonly className?: string;
8
+ readonly testId?: string;
9
+ }
10
+ export declare function Loader({ size, label, className, testId, }: LoaderProps): JSX.Element;
11
+ /** Spinner alias for CMP-0013. */
12
+ export declare const Spinner: typeof Loader;
13
+ //# sourceMappingURL=Loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader.d.ts","sourceRoot":"","sources":["../../../src/ui/Loader/Loader.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAQD,wBAAgB,MAAM,CAAC,EACrB,IAAW,EACX,KAAiB,EACjB,SAAS,EACT,MAAiB,GAClB,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAqB3B;AAED,kCAAkC;AAClC,eAAO,MAAM,OAAO,eAAS,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const SIZE_CLASS = {
3
+ sm: 'h-4 w-4 border-2',
4
+ md: 'h-8 w-8 border-2',
5
+ lg: 'h-12 w-12 border-[3px]',
6
+ };
7
+ export function Loader({ size = 'md', label = 'Loading', className, testId = 'loader', }) {
8
+ return (_jsxs("div", { className: ['inline-flex flex-col items-center gap-2', className].filter(Boolean).join(' '), role: "status", "aria-live": "polite", "aria-busy": "true", "data-testid": testId, children: [_jsx("span", { className: [
9
+ 'inline-block animate-spin rounded-full border-solid',
10
+ 'border-[var(--color-border,var(--color-an-border))]',
11
+ 'border-t-[var(--color-action-primary,var(--color-an-primary))]',
12
+ SIZE_CLASS[size],
13
+ ].join(' '), "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: label })] }));
14
+ }
15
+ /** Spinner alias for CMP-0013. */
16
+ export const Spinner = Loader;
17
+ //# sourceMappingURL=Loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader.js","sourceRoot":"","sources":["../../../src/ui/Loader/Loader.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,GAAqD;IACnE,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,wBAAwB;CAC7B,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EACrB,IAAI,GAAG,IAAI,EACX,KAAK,GAAG,SAAS,EACjB,SAAS,EACT,MAAM,GAAG,QAAQ,GACL;IACZ,OAAO,CACL,eACE,SAAS,EAAE,CAAC,yCAAyC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC3F,IAAI,EAAC,QAAQ,eACH,QAAQ,eACR,MAAM,iBACH,MAAM,aAEnB,eACE,SAAS,EAAE;oBACT,qDAAqD;oBACrD,qDAAqD;oBACrD,gEAAgE;oBAChE,UAAU,CAAC,IAAI,CAAC;iBACjB,CAAC,IAAI,CAAC,GAAG,CAAC,iBACC,MAAM,GAClB,EACF,eAAM,SAAS,EAAC,SAAS,YAAE,KAAK,GAAQ,IACpC,CACP,CAAC;AACJ,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CMP-0027 NavStepper — linear multi-step chrome (≠ QuantityStepper).
3
+ */
4
+ export interface NavStepperStep {
5
+ readonly id: string;
6
+ readonly label: string;
7
+ }
8
+ export interface NavStepperProps {
9
+ readonly steps: readonly NavStepperStep[];
10
+ readonly activeStepId: string;
11
+ readonly ariaLabel?: string;
12
+ readonly className?: string;
13
+ readonly testId?: string;
14
+ }
15
+ export declare function NavStepper({ steps, activeStepId, ariaLabel, className, testId, }: NavStepperProps): JSX.Element;
16
+ //# sourceMappingURL=NavStepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavStepper.d.ts","sourceRoot":"","sources":["../../../src/ui/NavStepper/NavStepper.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAsBD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,EACZ,SAAS,EACT,SAAS,EACT,MAAsB,GACvB,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAqC/B"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function stepSurfaceClass(isActive, isComplete) {
3
+ if (isActive) {
4
+ return 'border-[var(--color-accent,var(--color-an-primary))] bg-[var(--color-surface,var(--color-an-surface))] text-[var(--color-on-surface,var(--color-an-text))]';
5
+ }
6
+ if (isComplete) {
7
+ return 'border-[var(--color-border,var(--color-an-border))] bg-[var(--color-surface-muted,var(--color-an-bg))] text-[var(--color-on-surface,var(--color-an-text))]';
8
+ }
9
+ return 'border-[var(--color-border,var(--color-an-border))] bg-transparent text-[var(--color-on-surface-muted,var(--color-an-text-muted))]';
10
+ }
11
+ function stepDataState(isActive, isComplete) {
12
+ if (isActive) {
13
+ return 'active';
14
+ }
15
+ if (isComplete) {
16
+ return 'complete';
17
+ }
18
+ return 'upcoming';
19
+ }
20
+ export function NavStepper({ steps, activeStepId, ariaLabel, className, testId = 'nav-stepper', }) {
21
+ const activeIndex = Math.max(0, steps.findIndex((step) => step.id === activeStepId));
22
+ return (_jsx("nav", { "aria-label": ariaLabel, className: ['w-full', className ?? ''].filter((part) => part.length > 0).join(' '), "data-testid": testId, children: _jsx("ol", { className: "m-0 flex w-full list-none items-stretch gap-1 p-0", children: steps.map((step, index) => {
23
+ const isActive = step.id === activeStepId;
24
+ const isComplete = index < activeIndex;
25
+ return (_jsxs("li", { className: [
26
+ 'flex min-w-0 flex-1 flex-col items-center gap-1 rounded-md border px-2 py-2 text-center',
27
+ stepSurfaceClass(isActive, isComplete),
28
+ ].join(' '), "aria-current": isActive ? 'step' : undefined, "data-testid": `${testId}-step-${step.id}`, "data-state": stepDataState(isActive, isComplete), children: [_jsx("span", { className: "text-[0.65rem] font-semibold tabular-nums tracking-wide", children: index + 1 }), _jsx("span", { className: "truncate text-xs font-medium sm:text-sm", children: step.label })] }, step.id));
29
+ }) }) }));
30
+ }
31
+ //# sourceMappingURL=NavStepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavStepper.js","sourceRoot":"","sources":["../../../src/ui/NavStepper/NavStepper.tsx"],"names":[],"mappings":";AAiBA,SAAS,gBAAgB,CAAC,QAAiB,EAAE,UAAmB;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,4JAA4J,CAAC;IACtK,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,4JAA4J,CAAC;IACtK,CAAC;IACD,OAAO,oIAAoI,CAAC;AAC9I,CAAC;AAED,SAAS,aAAa,CAAC,QAAiB,EAAE,UAAmB;IAC3D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,YAAY,EACZ,SAAS,EACT,SAAS,EACT,MAAM,GAAG,aAAa,GACN;IAChB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,CACpD,CAAC;IAEF,OAAO,CACL,4BACc,SAAS,EACrB,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBACrE,MAAM,YAEnB,aAAI,SAAS,EAAC,mDAAmD,YAC9D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC;gBAC1C,MAAM,UAAU,GAAG,KAAK,GAAG,WAAW,CAAC;gBACvC,OAAO,CACL,cAEE,SAAS,EAAE;wBACT,yFAAyF;wBACzF,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;qBACvC,CAAC,IAAI,CAAC,GAAG,CAAC,kBACG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,iBAC9B,GAAG,MAAM,SAAS,IAAI,CAAC,EAAE,EAAE,gBAC5B,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,aAE/C,eAAM,SAAS,EAAC,yDAAyD,YACtE,KAAK,GAAG,CAAC,GACL,EACP,eAAM,SAAS,EAAC,yCAAyC,YAAE,IAAI,CAAC,KAAK,GAAQ,KAZxE,IAAI,CAAC,EAAE,CAaT,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface QuantityStepperProps {
2
+ readonly value: number;
3
+ readonly onInc: () => void;
4
+ readonly onDec: () => void;
5
+ readonly min?: number;
6
+ readonly max?: number;
7
+ /** When true, both controls are disabled (e.g. line not selected). */
8
+ readonly disabled?: boolean;
9
+ /** Accessible name for the stepper group (buttons get derived labels). */
10
+ readonly 'aria-label': string;
11
+ readonly className?: string;
12
+ readonly testId?: string;
13
+ }
14
+ /**
15
+ * CMP-0016 QuantityStepper — thin +/- quantity control.
16
+ * Prefer this over one-off IconButtons for cart/line qty.
17
+ */
18
+ export declare function QuantityStepper({ value, onInc, onDec, min, max, disabled, 'aria-label': ariaLabel, className, testId, }: QuantityStepperProps): JSX.Element;
19
+ //# sourceMappingURL=QuantityStepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuantityStepper.d.ts","sourceRoot":"","sources":["../../../src/ui/QuantityStepper/QuantityStepper.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAO,EACP,GAAG,EACH,QAAgB,EAChB,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,MAA2B,GAC5B,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAqCpC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Minus, Plus } from '../Icon/lucide.js';
3
+ import { IconButton } from '../IconButton/IconButton.js';
4
+ /**
5
+ * CMP-0016 QuantityStepper — thin +/- quantity control.
6
+ * Prefer this over one-off IconButtons for cart/line qty.
7
+ */
8
+ export function QuantityStepper({ value, onInc, onDec, min = 0, max, disabled = false, 'aria-label': ariaLabel, className, testId = 'quantity-stepper', }) {
9
+ const atMin = value <= min;
10
+ const atMax = max !== undefined && value >= max;
11
+ return (_jsxs("div", { className: ['inline-flex items-center gap-2', className].filter(Boolean).join(' '), role: "group", "aria-label": ariaLabel, "data-testid": testId, children: [_jsx(IconButton, { icon: Minus, size: "sm", tone: "muted", "aria-label": `${ariaLabel}: decrease`, disabled: disabled || atMin, onClick: onDec, "data-testid": `${testId}-dec` }), _jsx("span", { className: "min-w-8 text-center text-base font-semibold tabular-nums text-[var(--color-text-primary,var(--color-on-surface))]", "aria-live": "polite", "data-testid": `${testId}-value`, children: value }), _jsx(IconButton, { icon: Plus, size: "sm", "aria-label": `${ariaLabel}: increase`, disabled: disabled || atMax, onClick: onInc, "data-testid": `${testId}-inc` })] }));
12
+ }
13
+ //# sourceMappingURL=QuantityStepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuantityStepper.js","sourceRoot":"","sources":["../../../src/ui/QuantityStepper/QuantityStepper.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAgBzD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAG,GAAG,CAAC,EACP,GAAG,EACH,QAAQ,GAAG,KAAK,EAChB,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,MAAM,GAAG,kBAAkB,GACN;IACrB,MAAM,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC;IAC3B,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC;IAEhD,OAAO,CACL,eACE,SAAS,EAAE,CAAC,gCAAgC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAClF,IAAI,EAAC,OAAO,gBACA,SAAS,iBACR,MAAM,aAEnB,KAAC,UAAU,IACT,IAAI,EAAE,KAAK,EACX,IAAI,EAAC,IAAI,EACT,IAAI,EAAC,OAAO,gBACA,GAAG,SAAS,YAAY,EACpC,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,OAAO,EAAE,KAAK,iBACD,GAAG,MAAM,MAAM,GAC5B,EACF,eACE,SAAS,EAAC,mHAAmH,eACnH,QAAQ,iBACL,GAAG,MAAM,QAAQ,YAE7B,KAAK,GACD,EACP,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,IAAI,gBACG,GAAG,SAAS,YAAY,EACpC,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,OAAO,EAAE,KAAK,iBACD,GAAG,MAAM,MAAM,GAC5B,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { QuantityStepper, type QuantityStepperProps } from './QuantityStepper.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/QuantityStepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { QuantityStepper } from './QuantityStepper.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/QuantityStepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type InputHTMLAttributes } from 'react';
2
+ export type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & {
3
+ readonly label?: string;
4
+ };
5
+ /** CMP-0007 Radio — native control. */
6
+ export declare const Radio: import("react").ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type"> & {
7
+ readonly label?: string;
8
+ } & import("react").RefAttributes<HTMLInputElement>>;
9
+ //# sourceMappingURL=Radio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/ui/Radio/Radio.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,GAAG;IAC7E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,KAAK;qBAJC,MAAM;oDAkCxB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ /** CMP-0007 Radio — native control. */
4
+ export const Radio = forwardRef(({ className, label, id, ...rest }, ref) => {
5
+ const input = (_jsx("input", { ref: ref, id: id, type: "radio", className: [
6
+ 'h-4 w-4 border-[var(--color-border,var(--color-an-border))]',
7
+ 'accent-[var(--color-action-primary,var(--color-an-primary))]',
8
+ className,
9
+ ]
10
+ .filter(Boolean)
11
+ .join(' '), ...rest }));
12
+ if (!label) {
13
+ return input;
14
+ }
15
+ return (_jsxs("label", { className: "inline-flex items-center gap-2 text-sm text-[var(--color-on-surface,var(--color-an-text))]", htmlFor: id, children: [input, _jsx("span", { children: label })] }));
16
+ });
17
+ Radio.displayName = 'Radio';
18
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../src/ui/Radio/Radio.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,OAAO,CAAC;AAM7D,uCAAuC;AACvC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,KAAK,GAAG,CACZ,gBACE,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE;YACT,6DAA6D;YAC7D,8DAA8D;YAC9D,SAAS;SACV;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,KACR,IAAI,GACR,CACH,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,iBACE,SAAS,EAAC,4FAA4F,EACtG,OAAO,EAAE,EAAE,aAEV,KAAK,EACN,yBAAO,KAAK,GAAQ,IACd,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * CMP-0015 ScreenState — Q12 union (ADR-FE-UI-001 v4).
4
+ * Presentational only — callers own i18n copy.
5
+ */
6
+ export type ScreenStateVariant = 'loading' | 'error' | 'empty' | 'offline' | 'success';
7
+ export interface ScreenStateAction {
8
+ readonly label: string;
9
+ readonly onClick: () => void;
10
+ }
11
+ export interface ScreenStateProps {
12
+ readonly variant: ScreenStateVariant;
13
+ readonly title?: string;
14
+ readonly message?: string;
15
+ readonly hint?: string;
16
+ readonly icon?: ReactNode;
17
+ readonly error?: Error;
18
+ readonly onRetry?: () => void;
19
+ readonly retryLabel?: string;
20
+ readonly action?: ScreenStateAction;
21
+ readonly testId?: string;
22
+ readonly className?: string;
23
+ /** Optional custom body (e.g. app skeleton / spinner). */
24
+ readonly children?: ReactNode;
25
+ }
26
+ export declare function ScreenState({ variant, title, message, hint, icon, error, onRetry, retryLabel, action, testId, className, children, }: ScreenStateProps): JSX.Element;
27
+ //# sourceMappingURL=ScreenState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenState.d.ts","sourceRoot":"","sources":["../../../src/ui/ScreenState/ScreenState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAwBD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,UAAoB,EACpB,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAyDhC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function panelClass(variant) {
3
+ if (variant === 'error' || variant === 'offline') {
4
+ return [
5
+ 'rounded-lg border border-[var(--color-danger,var(--color-an-danger,#dc2626))]',
6
+ 'bg-[color-mix(in_oklab,var(--color-danger,var(--color-an-danger,#dc2626))_10%,transparent)]',
7
+ 'p-4 text-center',
8
+ ].join(' ');
9
+ }
10
+ if (variant === 'success') {
11
+ return [
12
+ 'rounded-lg border border-[color-mix(in_oklab,var(--color-success,var(--color-an-success,#16a34a))_55%,transparent)]',
13
+ 'bg-[color-mix(in_oklab,var(--color-success,var(--color-an-success,#16a34a))_12%,transparent)]',
14
+ 'p-4 text-[var(--color-success,var(--color-an-success,#16a34a))]',
15
+ ].join(' ');
16
+ }
17
+ return [
18
+ 'rounded-lg border border-[var(--color-border,var(--color-an-border,#e5e7eb))]',
19
+ 'bg-[var(--color-surface,var(--color-an-surface,#fff))]',
20
+ 'p-4 text-center',
21
+ ].join(' ');
22
+ }
23
+ export function ScreenState({ variant, title, message, hint, icon, error, onRetry, retryLabel = 'Retry', action, testId, className, children, }) {
24
+ const resolvedMessage = error?.message ?? message;
25
+ const role = variant === 'error' || variant === 'offline' ? 'alert' : 'status';
26
+ const live = variant === 'loading' ? 'polite' : undefined;
27
+ return (_jsxs("div", { className: [panelClass(variant), className].filter(Boolean).join(' '), role: role, "aria-live": live, "aria-busy": variant === 'loading' ? true : undefined, "data-testid": testId ?? `screen-state-${variant}`, "data-variant": variant, children: [icon ? _jsx("div", { className: "mb-2 flex justify-center text-2xl", "aria-hidden": "true", children: icon }) : null, title ? (_jsx("h3", { className: "m-0 text-base font-semibold text-[var(--color-on-surface,var(--color-an-text,#111))]", children: title })) : null, resolvedMessage ? (_jsx("p", { className: "mt-1 mb-0 text-sm text-[var(--color-on-surface-muted,var(--color-an-text-muted,#6b7280))]", children: resolvedMessage })) : null, hint ? (_jsx("p", { className: "mt-1 mb-0 text-xs text-[var(--color-on-surface-muted,var(--color-an-text-muted,#6b7280))]", children: hint })) : null, children, onRetry ? (_jsx("div", { className: "mt-3", children: _jsx("button", { type: "button", className: "inline-flex min-h-[44px] items-center justify-center rounded-md bg-[var(--color-action-primary,var(--color-an-primary,#4f46e5))] px-4 py-2 text-sm font-semibold text-white", onClick: onRetry, "data-testid": `${testId ?? 'screen-state'}-retry`, children: retryLabel }) })) : null, action ? (_jsx("div", { className: "mt-3", children: _jsx("button", { type: "button", className: "inline-flex min-h-[44px] items-center justify-center rounded-md border border-[var(--color-border,var(--color-an-border))] px-4 py-2 text-sm font-semibold", onClick: action.onClick, "data-testid": `${testId ?? 'screen-state'}-action`, children: action.label }) })) : null] }));
28
+ }
29
+ //# sourceMappingURL=ScreenState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenState.js","sourceRoot":"","sources":["../../../src/ui/ScreenState/ScreenState.tsx"],"names":[],"mappings":";AA6BA,SAAS,UAAU,CAAC,OAA2B;IAC7C,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO;YACL,+EAA+E;YAC/E,6FAA6F;YAC7F,iBAAiB;SAClB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,qHAAqH;YACrH,+FAA+F;YAC/F,iEAAiE;SAClE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IACD,OAAO;QACL,+EAA+E;QAC/E,wDAAwD;QACxD,iBAAiB;KAClB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,UAAU,GAAG,OAAO,EACpB,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,GACS;IACjB,MAAM,eAAe,GAAG,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/E,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1D,OAAO,CACL,eACE,SAAS,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACrE,IAAI,EAAE,IAAI,eACC,IAAI,eACJ,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,iBACtC,MAAM,IAAI,gBAAgB,OAAO,EAAE,kBAClC,OAAO,aAEpB,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,mCAAmC,iBAAa,MAAM,YAAE,IAAI,GAAO,CAAC,CAAC,CAAC,IAAI,EAChG,KAAK,CAAC,CAAC,CAAC,CACP,aAAI,SAAS,EAAC,sFAAsF,YACjG,KAAK,GACH,CACN,CAAC,CAAC,CAAC,IAAI,EACP,eAAe,CAAC,CAAC,CAAC,CACjB,YAAG,SAAS,EAAC,2FAA2F,YACrG,eAAe,GACd,CACL,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,CAAC,CAAC,CACN,YAAG,SAAS,EAAC,2FAA2F,YACrG,IAAI,GACH,CACL,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,EACR,OAAO,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAC,MAAM,YACnB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6KAA6K,EACvL,OAAO,EAAE,OAAO,iBACH,GAAG,MAAM,IAAI,cAAc,QAAQ,YAE/C,UAAU,GACJ,GACL,CACP,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,SAAS,EAAC,MAAM,YACnB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4JAA4J,EACtK,OAAO,EAAE,MAAM,CAAC,OAAO,iBACV,GAAG,MAAM,IAAI,cAAc,SAAS,YAEhD,MAAM,CAAC,KAAK,GACN,GACL,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * CMP-0021 SegmentTabs — exclusive filter chrome (Radix-free; ≠ FilterChip).
3
+ */
4
+ export interface SegmentTabItem {
5
+ readonly id: string;
6
+ readonly label: string;
7
+ readonly count?: number;
8
+ }
9
+ export type SegmentTabsVariant = 'default' | 'analytics' | 'sic';
10
+ export interface SegmentTabsProps {
11
+ readonly tabs: readonly SegmentTabItem[];
12
+ readonly activeId: string;
13
+ readonly onChange: (id: string) => void;
14
+ readonly ariaLabel?: string;
15
+ readonly className?: string;
16
+ readonly idPrefix?: string;
17
+ readonly variant?: SegmentTabsVariant;
18
+ readonly testId?: string;
19
+ }
20
+ export declare function SegmentTabs({ tabs, activeId, onChange, ariaLabel, className, idPrefix, variant, testId, }: SegmentTabsProps): JSX.Element;
21
+ //# sourceMappingURL=SegmentTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentTabs.d.ts","sourceRoot":"","sources":["../../../src/ui/SegmentTabs/SegmentTabs.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4CD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAoB,EACpB,OAAmB,EACnB,MAAuB,GACxB,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAqChC"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function tabListClass(variant, className) {
3
+ if (variant === 'analytics' || variant === 'sic') {
4
+ return ['mb-4 flex flex-wrap gap-1', className ?? ''].filter(Boolean).join(' ');
5
+ }
6
+ return [
7
+ 'flex w-full flex-wrap gap-1 rounded-lg border border-[var(--color-border,var(--color-an-border))]',
8
+ 'bg-[var(--color-surface-muted,var(--color-an-bg))] p-1',
9
+ className ?? '',
10
+ ]
11
+ .filter(Boolean)
12
+ .join(' ');
13
+ }
14
+ function tabClass(variant, isActive) {
15
+ if (variant === 'analytics' || variant === 'sic') {
16
+ return [
17
+ 'rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
18
+ isActive
19
+ ? 'bg-[var(--color-an-primary,var(--color-action-primary))] text-white'
20
+ : 'bg-[var(--color-an-surface,var(--color-surface))] text-[var(--color-an-text-muted,var(--color-on-surface-muted))] hover:text-[var(--color-an-text,var(--color-on-surface))]',
21
+ ].join(' ');
22
+ }
23
+ return [
24
+ 'inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium',
25
+ isActive
26
+ ? 'bg-[var(--color-surface,var(--color-an-surface))] text-[var(--color-on-surface,var(--color-an-text))] shadow-sm'
27
+ : 'text-[var(--color-on-surface-muted,var(--color-an-text-muted))] hover:text-[var(--color-on-surface,var(--color-an-text))]',
28
+ 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',
29
+ 'focus-visible:outline-[var(--color-accent,var(--color-an-primary))]',
30
+ ].join(' ');
31
+ }
32
+ function countClass(variant, isActive) {
33
+ if ((variant === 'analytics' || variant === 'sic') && isActive) {
34
+ return 'inline-flex min-w-[1.25rem] items-center justify-center rounded-md bg-white/20 px-1.5 text-xs font-semibold tabular-nums';
35
+ }
36
+ return [
37
+ 'inline-flex min-w-[1.25rem] items-center justify-center rounded-md px-1.5 text-xs font-semibold tabular-nums',
38
+ 'bg-[var(--color-surface,var(--color-an-surface-muted,var(--color-an-bg)))] text-[var(--color-on-surface-muted,var(--color-an-text-muted))]',
39
+ ].join(' ');
40
+ }
41
+ export function SegmentTabs({ tabs, activeId, onChange, ariaLabel, className, idPrefix = 'segment', variant = 'default', testId = 'segment-tabs', }) {
42
+ return (_jsx("div", { role: "tablist", "aria-label": ariaLabel, className: tabListClass(variant, className), "data-testid": testId, "data-variant": variant, children: tabs.map((tab) => {
43
+ const isActive = tab.id === activeId;
44
+ const tabId = `${idPrefix}-tab-${tab.id}`;
45
+ const panelId = `${idPrefix}-panel-${tab.id}`;
46
+ return (_jsx("button", { id: tabId, type: "button", role: "tab", "aria-selected": isActive, "aria-controls": panelId, tabIndex: isActive ? 0 : -1, className: tabClass(variant, isActive), "data-testid": `${testId}-tab-${tab.id}`, onClick: () => onChange(tab.id), children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [tab.label, tab.count !== undefined ? (_jsx("span", { className: countClass(variant, isActive), children: tab.count })) : null] }) }, tab.id));
47
+ }) }));
48
+ }
49
+ //# sourceMappingURL=SegmentTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentTabs.js","sourceRoot":"","sources":["../../../src/ui/SegmentTabs/SegmentTabs.tsx"],"names":[],"mappings":";AAuBA,SAAS,YAAY,CAAC,OAA2B,EAAE,SAAkB;IACnE,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACjD,OAAO,CAAC,2BAA2B,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO;QACL,mGAAmG;QACnG,wDAAwD;QACxD,SAAS,IAAI,EAAE;KAChB;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B,EAAE,QAAiB;IAC9D,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACjD,OAAO;YACL,8DAA8D;YAC9D,QAAQ;gBACN,CAAC,CAAC,qEAAqE;gBACvE,CAAC,CAAC,6KAA6K;SAClL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IACD,OAAO;QACL,iGAAiG;QACjG,QAAQ;YACN,CAAC,CAAC,iHAAiH;YACnH,CAAC,CAAC,2HAA2H;QAC/H,8EAA8E;QAC9E,qEAAqE;KACtE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAA2B,EAAE,QAAiB;IAChE,IAAI,CAAC,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC/D,OAAO,0HAA0H,CAAC;IACpI,CAAC;IACD,OAAO;QACL,8GAA8G;QAC9G,4IAA4I;KAC7I,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,GAAG,SAAS,EACpB,OAAO,GAAG,SAAS,EACnB,MAAM,GAAG,cAAc,GACN;IACjB,OAAO,CACL,cACE,IAAI,EAAC,SAAS,gBACF,SAAS,EACrB,SAAS,EAAE,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,iBAC9B,MAAM,kBACL,OAAO,YAEpB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;YACrC,MAAM,KAAK,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,GAAG,QAAQ,UAAU,GAAG,CAAC,EAAE,EAAE,CAAC;YAC9C,OAAO,CACL,iBAEE,EAAE,EAAE,KAAK,EACT,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,mBACK,QAAQ,mBACR,OAAO,EACtB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,iBACzB,GAAG,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAE/B,gBAAM,SAAS,EAAC,kCAAkC,aAC/C,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CACzB,eAAM,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAG,GAAG,CAAC,KAAK,GAAQ,CACnE,CAAC,CAAC,CAAC,IAAI,IACH,IAhBF,GAAG,CAAC,EAAE,CAiBJ,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { SegmentTabItem } from './SegmentTabs.js';
2
+ /**
3
+ * CMP-0021 companion — overflow "+N" for dense admin tab rows (&lt;1024px).
4
+ * Kept Radix-free; menu is a native details/summary pattern.
5
+ */
6
+ export interface SegmentTabsOverflowProps {
7
+ readonly visibleTabs: readonly SegmentTabItem[];
8
+ readonly overflowTabs: readonly SegmentTabItem[];
9
+ readonly activeId: string;
10
+ readonly onChange: (id: string) => void;
11
+ readonly ariaLabel?: string;
12
+ readonly overflowLabel?: string;
13
+ readonly idPrefix?: string;
14
+ readonly className?: string;
15
+ }
16
+ export declare function SegmentTabsOverflow({ visibleTabs, overflowTabs, activeId, onChange, ariaLabel, overflowLabel, idPrefix, className, }: SegmentTabsOverflowProps): JSX.Element;
17
+ //# sourceMappingURL=SegmentTabsOverflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentTabsOverflow.d.ts","sourceRoot":"","sources":["../../../src/ui/SegmentTabs/SegmentTabsOverflow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAwB,EACxB,QAA6B,EAC7B,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,CA+ExC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState } from 'react';
3
+ export function SegmentTabsOverflow({ visibleTabs, overflowTabs, activeId, onChange, ariaLabel, overflowLabel = '+ more', idPrefix = 'segment-overflow', className, }) {
4
+ const [open, setOpen] = useState(false);
5
+ const overflowActive = useMemo(() => overflowTabs.some((tab) => tab.id === activeId), [overflowTabs, activeId]);
6
+ return (_jsxs("div", { className: ['mb-4 flex flex-wrap items-center gap-1', className].filter(Boolean).join(' '), role: "tablist", "aria-label": ariaLabel, "data-testid": "segment-tabs-overflow", children: [visibleTabs.map((tab) => {
7
+ const isActive = tab.id === activeId;
8
+ return (_jsx("button", { id: `${idPrefix}-tab-${tab.id}`, type: "button", role: "tab", "aria-selected": isActive, tabIndex: isActive ? 0 : -1, className: [
9
+ 'rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
10
+ isActive
11
+ ? 'bg-[var(--color-an-primary,var(--color-action-primary))] text-white'
12
+ : 'bg-[var(--color-an-surface,var(--color-surface))] text-[var(--color-an-text-muted,var(--color-on-surface-muted))]',
13
+ ].join(' '), onClick: () => onChange(tab.id), children: tab.label }, tab.id));
14
+ }), overflowTabs.length > 0 ? (_jsxs("div", { className: "relative", children: [_jsx("button", { type: "button", className: [
15
+ 'rounded-md px-2 py-1.5 text-sm font-medium',
16
+ overflowActive
17
+ ? 'bg-[var(--color-an-primary-soft,var(--color-surface-soft))] text-[var(--color-an-primary,var(--color-action-primary))]'
18
+ : 'text-[var(--color-an-text-muted,var(--color-on-surface-muted))]',
19
+ ].join(' '), "aria-expanded": open, "aria-haspopup": "menu", onClick: () => setOpen((prev) => !prev), "data-testid": "segment-tabs-overflow-trigger", children: overflowLabel }), open ? (_jsx("ul", { role: "menu", className: "absolute z-20 mt-1 min-w-[10rem] rounded-md border border-[var(--color-an-border,var(--color-border))] bg-[var(--color-an-surface,var(--color-surface))] p-1 shadow-md", children: overflowTabs.map((tab) => (_jsx("li", { role: "none", children: _jsx("button", { type: "button", role: "menuitem", className: "block w-full rounded px-3 py-2 text-left text-sm hover:bg-[var(--color-an-bg,var(--color-surface-muted))]", onClick: () => {
20
+ onChange(tab.id);
21
+ setOpen(false);
22
+ }, children: tab.label }) }, tab.id))) })) : null] })) : null] }));
23
+ }
24
+ //# sourceMappingURL=SegmentTabsOverflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentTabsOverflow.js","sourceRoot":"","sources":["../../../src/ui/SegmentTabs/SegmentTabsOverflow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAkB1C,MAAM,UAAU,mBAAmB,CAAC,EAClC,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,GAAG,QAAQ,EACxB,QAAQ,GAAG,kBAAkB,EAC7B,SAAS,GACgB;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,EACrD,CAAC,YAAY,EAAE,QAAQ,CAAC,CACzB,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC1F,IAAI,EAAC,SAAS,gBACF,SAAS,iBACT,uBAAuB,aAElC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;gBACrC,OAAO,CACL,iBAEE,EAAE,EAAE,GAAG,QAAQ,QAAQ,GAAG,CAAC,EAAE,EAAE,EAC/B,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,mBACK,QAAQ,EACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE;wBACT,8DAA8D;wBAC9D,QAAQ;4BACN,CAAC,CAAC,qEAAqE;4BACvE,CAAC,CAAC,mHAAmH;qBACxH,CAAC,IAAI,CAAC,GAAG,CAAC,EACX,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAE9B,GAAG,CAAC,KAAK,IAdL,GAAG,CAAC,EAAE,CAeJ,CACV,CAAC;YACJ,CAAC,CAAC,EACD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzB,eAAK,SAAS,EAAC,UAAU,aACvB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE;4BACT,4CAA4C;4BAC5C,cAAc;gCACZ,CAAC,CAAC,wHAAwH;gCAC1H,CAAC,CAAC,iEAAiE;yBACtE,CAAC,IAAI,CAAC,GAAG,CAAC,mBACI,IAAI,mBACL,MAAM,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,iBAC3B,+BAA+B,YAE1C,aAAa,GACP,EACR,IAAI,CAAC,CAAC,CAAC,CACN,aACE,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,wKAAwK,YAEjL,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACzB,aAAiB,IAAI,EAAC,MAAM,YAC1B,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,2GAA2G,EACrH,OAAO,EAAE,GAAG,EAAE;oCACZ,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oCACjB,OAAO,CAAC,KAAK,CAAC,CAAC;gCACjB,CAAC,YAEA,GAAG,CAAC,KAAK,GACH,IAXF,GAAG,CAAC,EAAE,CAYV,CACN,CAAC,GACC,CACN,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ export type SelectSurface = 'admin' | 'customer' | 'kiosk' | 'pickup';
2
+ export interface SelectOption {
3
+ readonly value: string;
4
+ readonly label: string;
5
+ readonly disabled?: boolean;
6
+ }
7
+ export interface SelectProps {
8
+ readonly id?: string;
9
+ readonly options: readonly SelectOption[];
10
+ readonly value?: string;
11
+ readonly onValueChange: (value: string) => void;
12
+ readonly disabled?: boolean;
13
+ readonly placeholder?: string;
14
+ readonly className?: string;
15
+ readonly triggerClassName?: string;
16
+ readonly contentClassName?: string;
17
+ readonly surface?: SelectSurface;
18
+ readonly testId?: string;
19
+ readonly itemTestIdPrefix?: string;
20
+ readonly name?: string;
21
+ readonly 'aria-busy'?: boolean;
22
+ readonly 'aria-label'?: string;
23
+ readonly 'aria-labelledby'?: string;
24
+ }
25
+ /**
26
+ * Shared Select API (CMP-0005 / Q24=C).
27
+ * Radix is an implementation detail — apps must not import `@radix-ui/react-select` for new UI.
28
+ */
29
+ export declare const Select: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLButtonElement>>;
30
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/ui/Select/Select.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAyFD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAoBD;;;GAGG;AACH,eAAO,MAAM,MAAM,2GAwEjB,CAAC"}