@tallyui/components 1.0.0 → 3.0.0-next.0

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 (137) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +1113 -83
  3. package/dist/index.js +4936 -353
  4. package/package.json +27 -5
  5. package/src/cart/cart-line-actions.tsx +40 -0
  6. package/src/cart/cart-line.tsx +18 -32
  7. package/src/cart/cart-note-input.tsx +46 -0
  8. package/src/cart/cart-panel.tsx +39 -26
  9. package/src/cart/cart-total.tsx +43 -47
  10. package/src/cart/discount-badge.tsx +19 -0
  11. package/src/cart/index.ts +4 -1
  12. package/src/checkout/cash-tendered.tsx +101 -0
  13. package/src/checkout/change-display.tsx +19 -0
  14. package/src/checkout/index.ts +3 -0
  15. package/src/checkout/order-summary-line.tsx +7 -8
  16. package/src/checkout/order-summary.tsx +8 -7
  17. package/src/checkout/payment-method-card.tsx +10 -9
  18. package/src/checkout/payment-selector.tsx +5 -5
  19. package/src/checkout/receipt-preview.tsx +78 -0
  20. package/src/customer/customer-card.tsx +16 -12
  21. package/src/customer/customer-form.tsx +72 -0
  22. package/src/customer/customer-order-history.tsx +34 -0
  23. package/src/customer/customer-picker.tsx +124 -0
  24. package/src/customer/customer-select.tsx +80 -31
  25. package/src/customer/index.ts +3 -0
  26. package/src/index.ts +114 -1
  27. package/src/input/filter-chip.tsx +85 -27
  28. package/src/input/index.ts +1 -0
  29. package/src/input/quantity-stepper.tsx +64 -0
  30. package/src/input/search-input.tsx +30 -7
  31. package/src/layout/checkout-layout.tsx +46 -0
  32. package/src/layout/index.ts +5 -0
  33. package/src/layout/live-tab-screen.tsx +54 -0
  34. package/src/layout/pos-layout.tsx +64 -0
  35. package/src/layout/settings-layout.tsx +58 -0
  36. package/src/layout/store-settings-choice-screen.tsx +142 -0
  37. package/src/order/index.ts +4 -0
  38. package/src/order/order-card.tsx +48 -0
  39. package/src/order/order-detail.tsx +82 -0
  40. package/src/order/order-list.tsx +39 -0
  41. package/src/order/order-status-badge.tsx +32 -0
  42. package/src/product/category-nav.tsx +70 -0
  43. package/src/product/index.ts +3 -0
  44. package/src/product/product-card.tsx +36 -8
  45. package/src/product/product-grid.tsx +46 -13
  46. package/src/product/product-image.tsx +28 -7
  47. package/src/product/product-list.tsx +44 -0
  48. package/src/product/product-price.tsx +77 -22
  49. package/src/product/product-sku.tsx +5 -5
  50. package/src/product/product-stock-badge.tsx +41 -28
  51. package/src/product/product-title.tsx +2 -3
  52. package/src/product/product-variant-picker.tsx +61 -0
  53. package/src/register/cash-count-input.tsx +85 -0
  54. package/src/register/closure-sheet.tsx +161 -0
  55. package/src/register/index.ts +12 -0
  56. package/src/register/movement-sheet.tsx +118 -0
  57. package/src/register/open-register-card.tsx +109 -0
  58. package/src/register/register-bar.helpers.ts +57 -0
  59. package/src/register/register-bar.tsx +85 -0
  60. package/src/register/register-column.tsx +117 -0
  61. package/src/register/register-count.tsx +330 -0
  62. package/src/register/register-open-close.tsx +52 -0
  63. package/src/register/register-panel.tsx +151 -0
  64. package/src/register/register-picker.tsx +60 -0
  65. package/src/register/register-summary.tsx +72 -0
  66. package/src/sale/cart-bar.tsx +18 -0
  67. package/src/sale/cart.tsx +66 -0
  68. package/src/sale/catalogue.tsx +139 -0
  69. package/src/sale/discount-form.tsx +85 -0
  70. package/src/sale/index.ts +9 -0
  71. package/src/sale/orders-list.tsx +108 -0
  72. package/src/sale/print-style.ts +11 -0
  73. package/src/sale/receipt.tsx +62 -0
  74. package/src/sale/sync-status.tsx +141 -0
  75. package/src/sale/tender.tsx +38 -0
  76. package/src/settings/connector-status.tsx +65 -0
  77. package/src/settings/index.ts +3 -0
  78. package/src/settings/settings-group.tsx +23 -0
  79. package/src/settings/settings-row.tsx +23 -0
  80. package/src/ui/accordion/index.tsx +59 -0
  81. package/src/ui/alert-dialog/index.tsx +91 -0
  82. package/src/ui/avatar/index.tsx +50 -0
  83. package/src/ui/badge/index.tsx +60 -0
  84. package/src/ui/button/index.tsx +90 -0
  85. package/src/ui/card/index.tsx +60 -0
  86. package/src/ui/checkbox/index.tsx +29 -0
  87. package/src/ui/collapsible/index.tsx +24 -0
  88. package/src/ui/combobox/index.tsx +98 -0
  89. package/src/ui/context-menu/index.tsx +159 -0
  90. package/src/ui/dialog/index.tsx +92 -0
  91. package/src/ui/dropdown-menu/index.tsx +161 -0
  92. package/src/ui/hover-card/index.tsx +31 -0
  93. package/src/ui/hstack/index.tsx +43 -0
  94. package/src/ui/icon/index.tsx +44 -0
  95. package/src/ui/icon/search-icon.tsx +9 -0
  96. package/src/ui/icon/svg-icon.tsx +36 -0
  97. package/src/ui/icon-button/index.tsx +58 -0
  98. package/src/ui/index.ts +99 -0
  99. package/src/ui/input/index.tsx +100 -0
  100. package/src/ui/label/index.tsx +26 -0
  101. package/src/ui/loader/index.tsx +37 -0
  102. package/src/ui/popover/index.tsx +31 -0
  103. package/src/ui/progress/index.tsx +28 -0
  104. package/src/ui/radio-group/index.tsx +38 -0
  105. package/src/ui/select/index.tsx +96 -0
  106. package/src/ui/separator/index.tsx +29 -0
  107. package/src/ui/slider/index.tsx +28 -0
  108. package/src/ui/switch/index.tsx +31 -0
  109. package/src/ui/table/index.tsx +59 -0
  110. package/src/ui/tabs/index.tsx +53 -0
  111. package/src/ui/text/index.tsx +36 -0
  112. package/src/ui/textarea/index.tsx +29 -0
  113. package/src/ui/toast/index.tsx +52 -0
  114. package/src/ui/toggle/index.tsx +69 -0
  115. package/src/ui/toggle-group/index.tsx +66 -0
  116. package/src/ui/tooltip/index.tsx +30 -0
  117. package/src/ui/vstack/index.tsx +43 -0
  118. package/src/uniwind-env.d.ts +9 -1
  119. package/src/__tests__/cart-line.test.tsx +0 -53
  120. package/src/__tests__/cart-panel.test.tsx +0 -55
  121. package/src/__tests__/cart-total.test.tsx +0 -60
  122. package/src/__tests__/customer-card.test.tsx +0 -47
  123. package/src/__tests__/customer-select.test.tsx +0 -33
  124. package/src/__tests__/filter-chip.test.tsx +0 -40
  125. package/src/__tests__/helpers.ts +0 -111
  126. package/src/__tests__/order-summary-line.test.tsx +0 -18
  127. package/src/__tests__/order-summary.test.tsx +0 -32
  128. package/src/__tests__/payment-method-card.test.tsx +0 -24
  129. package/src/__tests__/payment-selector.test.tsx +0 -23
  130. package/src/__tests__/product-card.test.tsx +0 -31
  131. package/src/__tests__/product-grid.test.tsx +0 -37
  132. package/src/__tests__/product-image.test.tsx +0 -54
  133. package/src/__tests__/product-price.test.tsx +0 -68
  134. package/src/__tests__/product-sku.test.tsx +0 -47
  135. package/src/__tests__/product-stock-badge.test.tsx +0 -58
  136. package/src/__tests__/product-title.test.tsx +0 -38
  137. package/src/__tests__/search-input.test.tsx +0 -22
package/dist/index.d.ts CHANGED
@@ -1,6 +1,324 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { TextProps, ImageProps, StyleProp, ImageStyle, ViewProps, TextInputProps } from 'react-native';
3
- import { ReactNode } from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React$1 from 'react';
4
+ import { ReactNode, JSX } from 'react';
5
+ import * as react_native from 'react-native';
6
+ import { Text as Text$1, ViewProps, View, PressableProps, TextProps as TextProps$1, TextInputProps, TextInput, Pressable, StyleProp, ImageStyle } from 'react-native';
7
+ import { VariantProps } from 'class-variance-authority';
8
+ import { SvgProps } from 'react-native-svg';
9
+ import { Separator as Separator$1, Label as Label$1, Tabs as Tabs$1, Dialog as Dialog$1, AlertDialog as AlertDialog$1, Select as Select$1, Combobox as Combobox$1, DropdownMenu as DropdownMenu$1, ContextMenu as ContextMenu$1, Popover as Popover$1, Tooltip as Tooltip$1, HoverCard as HoverCard$1, Accordion as Accordion$1, Collapsible as Collapsible$1, Checkbox as Checkbox$1, Switch as Switch$1, RadioGroup as RadioGroup$1, Toggle as Toggle$1, ToggleGroup as ToggleGroup$1, Progress as Progress$1, Slider as Slider$1, Image } from '@tallyui/primitives';
10
+ export { TextClassContext } from '@tallyui/primitives';
11
+ import { Money, CustomerTraits, Customer, CustomerInput, ProductTraits, SyncNotice, StoreSettingsChoices, StoreSettingsChoice } from '@tallyui/core';
12
+ import { useRegisterSession, MovementType, useSale, AppliedDiscount, Discount, CatalogueEntry, SentOrder, OutboxState, PosOrder } from '@tallyui/pos';
13
+
14
+ declare const textVariants: (props?: ({
15
+ variant?: "link" | "default" | null | undefined;
16
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
17
+ type TextProps = React$1.ComponentPropsWithoutRef<typeof Text$1> & VariantProps<typeof textVariants> & {
18
+ asChild?: boolean;
19
+ };
20
+ declare function Text({ className, variant, asChild, children, ...props }: TextProps): react_jsx_runtime.JSX.Element;
21
+
22
+ declare const hstackVariants: (props?: ({
23
+ space?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
24
+ reversed?: boolean | null | undefined;
25
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
26
+ type HStackProps = ViewProps & VariantProps<typeof hstackVariants>;
27
+ declare const HStack: React$1.ForwardRefExoticComponent<ViewProps & VariantProps<(props?: ({
28
+ space?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
29
+ reversed?: boolean | null | undefined;
30
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<View>>;
31
+
32
+ declare const vstackVariants: (props?: ({
33
+ space?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
34
+ reversed?: boolean | null | undefined;
35
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
36
+ type VStackProps = ViewProps & VariantProps<typeof vstackVariants>;
37
+ declare const VStack: React$1.ForwardRefExoticComponent<ViewProps & VariantProps<(props?: ({
38
+ space?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
39
+ reversed?: boolean | null | undefined;
40
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<View>>;
41
+
42
+ declare const iconVariants: (props?: ({
43
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
44
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
45
+ type IconProps = ViewProps & VariantProps<typeof iconVariants>;
46
+ declare const Icon: React$1.ForwardRefExoticComponent<ViewProps & VariantProps<(props?: ({
47
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
48
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<View>>;
49
+
50
+ type SvgIconProps = {
51
+ size?: number;
52
+ color?: string;
53
+ strokeWidth?: number;
54
+ accessibilityLabel?: string;
55
+ } & Omit<SvgProps, 'width' | 'height' | 'color'>;
56
+ declare function createSvgIcon(name: string, render: (props: {
57
+ strokeWidth: number;
58
+ }) => React$1.ReactNode): {
59
+ ({ size, color, strokeWidth, accessibilityLabel, ...props }: SvgIconProps): react_jsx_runtime.JSX.Element;
60
+ displayName: string;
61
+ };
62
+
63
+ declare const SearchIcon: {
64
+ ({ size, color, strokeWidth, accessibilityLabel, ...props }: SvgIconProps): react_jsx_runtime.JSX.Element;
65
+ displayName: string;
66
+ };
67
+
68
+ declare const loaderVariants: (props?: ({
69
+ size?: "sm" | "md" | "lg" | null | undefined;
70
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
71
+ type LoaderProps = Omit<ViewProps, 'children'> & VariantProps<typeof loaderVariants>;
72
+ declare function Loader({ className, size, ...props }: LoaderProps): react_jsx_runtime.JSX.Element;
73
+
74
+ declare const badgeVariants: (props?: ({
75
+ variant?: "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "info" | null | undefined;
76
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
77
+ declare const badgeTextVariants: (props?: ({
78
+ variant?: "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "info" | null | undefined;
79
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
80
+ type BadgeProps = ViewProps & VariantProps<typeof badgeVariants> & {
81
+ label?: string;
82
+ };
83
+ declare function Badge({ className, variant, label, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
84
+
85
+ declare const avatarVariants: (props?: ({
86
+ size?: "sm" | "md" | "lg" | "xl" | null | undefined;
87
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
88
+ type AvatarProps = ViewProps & VariantProps<typeof avatarVariants> & {
89
+ src?: string;
90
+ alt?: string;
91
+ fallback?: string;
92
+ };
93
+ declare function Avatar({ className, size, src, alt, fallback, ...props }: AvatarProps): react_jsx_runtime.JSX.Element;
94
+
95
+ declare const buttonVariants: (props?: ({
96
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
97
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
98
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
99
+ declare const buttonTextVariants: (props?: ({
100
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
101
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
102
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
103
+ type ButtonProps = PressableProps & VariantProps<typeof buttonVariants> & {
104
+ asChild?: boolean;
105
+ };
106
+ declare const Button: React$1.ForwardRefExoticComponent<PressableProps & VariantProps<(props?: ({
107
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
108
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
109
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & {
110
+ asChild?: boolean;
111
+ } & React$1.RefAttributes<react_native.View>>;
112
+
113
+ declare const iconButtonVariants: (props?: ({
114
+ variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
115
+ size?: "sm" | "md" | "lg" | null | undefined;
116
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
117
+ type IconButtonProps = PressableProps & VariantProps<typeof iconButtonVariants> & {
118
+ asChild?: boolean;
119
+ };
120
+ declare const IconButton: React$1.ForwardRefExoticComponent<PressableProps & VariantProps<(props?: ({
121
+ variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
122
+ size?: "sm" | "md" | "lg" | null | undefined;
123
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & {
124
+ asChild?: boolean;
125
+ } & React$1.RefAttributes<react_native.View>>;
126
+
127
+ declare const Card: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
128
+ declare const CardHeader: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
129
+ declare const CardTitle: React$1.ForwardRefExoticComponent<TextProps$1 & React$1.RefAttributes<Text$1>>;
130
+ declare const CardDescription: React$1.ForwardRefExoticComponent<TextProps$1 & React$1.RefAttributes<Text$1>>;
131
+ declare const CardContent: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
132
+ declare const CardFooter: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
133
+
134
+ type SeparatorProps = React$1.ComponentPropsWithoutRef<typeof Separator$1.Root>;
135
+ declare const Separator: React$1.ForwardRefExoticComponent<Omit<Omit<Separator$1.RootProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
136
+
137
+ type LabelProps = React$1.ComponentPropsWithoutRef<typeof Label$1.Root>;
138
+ declare const Label: React$1.ForwardRefExoticComponent<Omit<Omit<Label$1.RootProps, "ref"> & React$1.RefAttributes<Text$1>, "ref"> & React$1.RefAttributes<Text$1>>;
139
+
140
+ interface InputContextType {
141
+ focused: boolean;
142
+ disabled: boolean;
143
+ }
144
+ declare function useInputContext(): InputContextType;
145
+ interface InputRootProps extends ViewProps {
146
+ disabled?: boolean;
147
+ }
148
+ declare const InputRoot: React$1.ForwardRefExoticComponent<InputRootProps & React$1.RefAttributes<View>>;
149
+ declare const InputSlot: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
150
+ declare const InputField: React$1.ForwardRefExoticComponent<TextInputProps & React$1.RefAttributes<TextInput>>;
151
+ declare const Input: React$1.ForwardRefExoticComponent<InputRootProps & React$1.RefAttributes<View>> & {
152
+ Left: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
153
+ Field: React$1.ForwardRefExoticComponent<TextInputProps & React$1.RefAttributes<TextInput>>;
154
+ Right: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
155
+ };
156
+
157
+ type TextareaProps = TextInputProps & {
158
+ className?: string;
159
+ };
160
+ declare const Textarea: React$1.ForwardRefExoticComponent<TextInputProps & {
161
+ className?: string;
162
+ } & React$1.RefAttributes<TextInput>>;
163
+
164
+ declare const Tabs: typeof Tabs$1.Root;
165
+ declare function TabsList({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof Tabs$1.List>): react_jsx_runtime.JSX.Element;
166
+ declare const TabsTrigger: React$1.ForwardRefExoticComponent<Omit<Omit<Tabs$1.TriggerProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
167
+ declare function TabsContent({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof Tabs$1.Content>): react_jsx_runtime.JSX.Element;
168
+
169
+ declare const Dialog: typeof Dialog$1.Root;
170
+ declare const DialogTrigger: React$1.ForwardRefExoticComponent<Omit<Dialog$1.TriggerProps, "ref"> & React$1.RefAttributes<View>>;
171
+ declare const DialogPortal: typeof Dialog$1.Portal;
172
+ declare const DialogClose: React$1.ForwardRefExoticComponent<Omit<Dialog$1.CloseProps, "ref"> & React$1.RefAttributes<View>>;
173
+ declare const DialogOverlay: React$1.ForwardRefExoticComponent<Omit<Omit<Dialog$1.OverlayProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
174
+ declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<Omit<Dialog$1.ContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
175
+ declare function DialogHeader({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof View>): react_jsx_runtime.JSX.Element;
176
+ declare function DialogFooter({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof View>): react_jsx_runtime.JSX.Element;
177
+ declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<Omit<Dialog$1.TitleProps, "ref"> & React$1.RefAttributes<Text$1>, "ref"> & React$1.RefAttributes<Text$1>>;
178
+ declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<Omit<Dialog$1.DescriptionProps, "ref"> & React$1.RefAttributes<Text$1>, "ref"> & React$1.RefAttributes<Text$1>>;
179
+
180
+ declare const AlertDialog: typeof AlertDialog$1.Root;
181
+ declare const AlertDialogTrigger: React$1.ForwardRefExoticComponent<Omit<AlertDialog$1.TriggerProps, "ref"> & React$1.RefAttributes<View>>;
182
+ declare const AlertDialogPortal: typeof AlertDialog$1.Portal;
183
+ declare const AlertDialogOverlay: React$1.ForwardRefExoticComponent<Omit<Omit<AlertDialog$1.OverlayProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
184
+ declare const AlertDialogContent: React$1.ForwardRefExoticComponent<Omit<Omit<AlertDialog$1.ContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
185
+ declare function AlertDialogHeader({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof View>): react_jsx_runtime.JSX.Element;
186
+ declare function AlertDialogFooter({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof View>): react_jsx_runtime.JSX.Element;
187
+ declare const AlertDialogTitle: React$1.ForwardRefExoticComponent<Omit<Omit<AlertDialog$1.TitleProps, "ref"> & React$1.RefAttributes<react_native.Text>, "ref"> & React$1.RefAttributes<react_native.Text>>;
188
+ declare const AlertDialogDescription: React$1.ForwardRefExoticComponent<Omit<Omit<AlertDialog$1.DescriptionProps, "ref"> & React$1.RefAttributes<react_native.Text>, "ref"> & React$1.RefAttributes<react_native.Text>>;
189
+ declare const AlertDialogAction: React$1.ForwardRefExoticComponent<Omit<AlertDialog$1.ActionProps, "ref"> & React$1.RefAttributes<View>>;
190
+ declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialog$1.CancelProps, "ref"> & React$1.RefAttributes<View>>;
191
+
192
+ declare const Select: typeof Select$1.Root;
193
+ declare const SelectGroup: React$1.ForwardRefExoticComponent<Omit<Select$1.GroupProps, "ref"> & React$1.RefAttributes<View>>;
194
+ declare const SelectValue: React$1.ForwardRefExoticComponent<Omit<Select$1.ValueProps, "ref"> & React$1.RefAttributes<react_native.Text>>;
195
+ declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<Omit<Select$1.TriggerProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
196
+ declare const SelectContent: React$1.ForwardRefExoticComponent<Omit<Omit<Select$1.ContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
197
+ declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<Omit<Select$1.LabelProps, "ref"> & React$1.RefAttributes<react_native.Text>, "ref"> & React$1.RefAttributes<react_native.Text>>;
198
+ declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<Omit<Select$1.ItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
199
+ declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<Omit<Select$1.SeparatorProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
200
+
201
+ declare const Combobox: typeof Combobox$1.Root;
202
+ declare const ComboboxTrigger: React$1.ForwardRefExoticComponent<Omit<Omit<Combobox$1.TriggerProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
203
+ declare const ComboboxInput: React$1.ForwardRefExoticComponent<Omit<Omit<Combobox$1.InputProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
204
+ declare const ComboboxContent: React$1.ForwardRefExoticComponent<Omit<Omit<Combobox$1.ContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
205
+ declare const ComboboxItem: React$1.ForwardRefExoticComponent<Omit<Omit<Combobox$1.ItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
206
+ declare const ComboboxEmpty: React$1.ForwardRefExoticComponent<react_native.ViewProps & React$1.RefAttributes<View>>;
207
+
208
+ declare const DropdownMenu: typeof DropdownMenu$1.Root;
209
+ declare const DropdownMenuTrigger: React$1.ForwardRefExoticComponent<Omit<DropdownMenu$1.TriggerProps, "ref"> & React$1.RefAttributes<View>>;
210
+ declare const DropdownMenuGroup: React$1.ForwardRefExoticComponent<Omit<DropdownMenu$1.GroupProps, "ref"> & React$1.RefAttributes<View>>;
211
+ declare const DropdownMenuPortal: typeof DropdownMenu$1.Portal;
212
+ declare const DropdownMenuSub: typeof DropdownMenu$1.Sub;
213
+ declare const DropdownMenuRadioGroup: React$1.ForwardRefExoticComponent<Omit<DropdownMenu$1.RadioGroupProps, "ref"> & React$1.RefAttributes<View>>;
214
+ declare const DropdownMenuContent: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.ContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
215
+ declare const DropdownMenuItem: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.ItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & {
216
+ inset?: boolean;
217
+ } & React$1.RefAttributes<View>>;
218
+ declare const DropdownMenuCheckboxItem: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.CheckboxItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
219
+ declare const DropdownMenuRadioItem: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.RadioItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
220
+ declare const DropdownMenuLabel: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.LabelProps, "ref"> & React$1.RefAttributes<react_native.Text>, "ref"> & {
221
+ inset?: boolean;
222
+ } & React$1.RefAttributes<react_native.Text>>;
223
+ declare const DropdownMenuSeparator: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.SeparatorProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
224
+ declare const DropdownMenuSubTrigger: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.SubTriggerProps, "ref"> & React$1.RefAttributes<View>, "ref"> & {
225
+ inset?: boolean;
226
+ } & React$1.RefAttributes<View>>;
227
+ declare const DropdownMenuSubContent: React$1.ForwardRefExoticComponent<Omit<Omit<DropdownMenu$1.SubContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
228
+
229
+ declare const ContextMenu: typeof ContextMenu$1.Root;
230
+ declare const ContextMenuTrigger: React$1.ForwardRefExoticComponent<Omit<ContextMenu$1.TriggerProps, "ref"> & React$1.RefAttributes<react_native.View>>;
231
+ declare const ContextMenuGroup: React$1.ForwardRefExoticComponent<Omit<ContextMenu$1.GroupProps, "ref"> & React$1.RefAttributes<react_native.View>>;
232
+ declare const ContextMenuPortal: typeof ContextMenu$1.Portal;
233
+ declare const ContextMenuSub: typeof ContextMenu$1.Sub;
234
+ declare const ContextMenuRadioGroup: React$1.ForwardRefExoticComponent<Omit<ContextMenu$1.RadioGroupProps, "ref"> & React$1.RefAttributes<react_native.View>>;
235
+ declare const ContextMenuContent: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.ContentProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
236
+ declare const ContextMenuItem: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.ItemProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & {
237
+ inset?: boolean;
238
+ } & React$1.RefAttributes<react_native.View>>;
239
+ declare const ContextMenuCheckboxItem: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.CheckboxItemProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
240
+ declare const ContextMenuRadioItem: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.RadioItemProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
241
+ declare const ContextMenuLabel: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.LabelProps, "ref"> & React$1.RefAttributes<react_native.Text>, "ref"> & {
242
+ inset?: boolean;
243
+ } & React$1.RefAttributes<react_native.Text>>;
244
+ declare const ContextMenuSeparator: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.SeparatorProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
245
+ declare const ContextMenuSubTrigger: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.SubTriggerProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & {
246
+ inset?: boolean;
247
+ } & React$1.RefAttributes<react_native.View>>;
248
+ declare const ContextMenuSubContent: React$1.ForwardRefExoticComponent<Omit<Omit<ContextMenu$1.SubContentProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
249
+
250
+ declare const Popover: typeof Popover$1.Root;
251
+ declare const PopoverTrigger: React$1.ForwardRefExoticComponent<Omit<Popover$1.TriggerProps, "ref"> & React$1.RefAttributes<react_native.View>>;
252
+ declare const PopoverContent: React$1.ForwardRefExoticComponent<Omit<Omit<Popover$1.ContentProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
253
+
254
+ declare const Tooltip: typeof Tooltip$1.Root;
255
+ declare const TooltipTrigger: React$1.ForwardRefExoticComponent<Omit<Tooltip$1.TriggerProps, "ref"> & React$1.RefAttributes<react_native.View>>;
256
+ declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<Omit<Tooltip$1.ContentProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
257
+
258
+ declare const HoverCard: typeof HoverCard$1.Root;
259
+ declare const HoverCardTrigger: React$1.ForwardRefExoticComponent<Omit<HoverCard$1.TriggerProps, "ref"> & React$1.RefAttributes<react_native.View>>;
260
+ declare const HoverCardContent: React$1.ForwardRefExoticComponent<Omit<Omit<HoverCard$1.ContentProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
261
+
262
+ declare const Accordion: React$1.ForwardRefExoticComponent<(Omit<Accordion$1.SingleRootProps, "ref"> | Omit<Accordion$1.MultipleRootProps, "ref">) & React$1.RefAttributes<View>>;
263
+ declare const AccordionItem: React$1.ForwardRefExoticComponent<Omit<Omit<Accordion$1.ItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
264
+ declare const AccordionTrigger: React$1.ForwardRefExoticComponent<Omit<Omit<Accordion$1.TriggerProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
265
+ declare const AccordionContent: React$1.ForwardRefExoticComponent<Omit<Omit<Accordion$1.ContentProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
266
+
267
+ declare const Collapsible: React$1.ForwardRefExoticComponent<Omit<Collapsible$1.RootProps, "ref"> & React$1.RefAttributes<react_native.View>>;
268
+ declare const CollapsibleTrigger: React$1.ForwardRefExoticComponent<Omit<Collapsible$1.TriggerProps, "ref"> & React$1.RefAttributes<react_native.View>>;
269
+ declare const CollapsibleContent: React$1.ForwardRefExoticComponent<Omit<Omit<Collapsible$1.ContentProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
270
+
271
+ declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<Omit<Checkbox$1.RootProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
272
+
273
+ declare const Switch: React$1.ForwardRefExoticComponent<Omit<Omit<Switch$1.RootProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & React$1.RefAttributes<react_native.View>>;
274
+
275
+ declare const RadioGroup: React$1.ForwardRefExoticComponent<Omit<Omit<RadioGroup$1.RootProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
276
+ declare const RadioGroupItem: React$1.ForwardRefExoticComponent<Omit<Omit<RadioGroup$1.ItemProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
277
+
278
+ declare const toggleVariants: (props?: ({
279
+ variant?: "default" | "outline" | null | undefined;
280
+ size?: "default" | "sm" | "lg" | null | undefined;
281
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
282
+ declare const toggleTextVariants: (props?: ({
283
+ variant?: "default" | "outline" | null | undefined;
284
+ size?: "default" | "sm" | "lg" | null | undefined;
285
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
286
+ type ToggleProps = React$1.ComponentPropsWithoutRef<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>;
287
+ declare const Toggle: React$1.ForwardRefExoticComponent<Omit<Omit<Toggle$1.RootProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & VariantProps<(props?: ({
288
+ variant?: "default" | "outline" | null | undefined;
289
+ size?: "default" | "sm" | "lg" | null | undefined;
290
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<react_native.View>>;
291
+
292
+ type ToggleGroupProps = React$1.ComponentPropsWithoutRef<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants>;
293
+ declare const ToggleGroup: React$1.ForwardRefExoticComponent<ToggleGroupProps & React$1.RefAttributes<react_native.View>>;
294
+ type ToggleGroupItemProps = React$1.ComponentPropsWithoutRef<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>;
295
+ declare const ToggleGroupItem: React$1.ForwardRefExoticComponent<Omit<Omit<ToggleGroup$1.ItemProps, "ref"> & React$1.RefAttributes<react_native.View>, "ref"> & VariantProps<(props?: ({
296
+ variant?: "default" | "outline" | null | undefined;
297
+ size?: "default" | "sm" | "lg" | null | undefined;
298
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<react_native.View>>;
299
+
300
+ type ProgressProps = React$1.ComponentPropsWithoutRef<typeof Progress$1.Root>;
301
+ declare const Progress: React$1.ForwardRefExoticComponent<Omit<Omit<Progress$1.RootProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
302
+
303
+ type SliderProps = React$1.ComponentPropsWithoutRef<typeof Slider$1.Root>;
304
+ declare const Slider: React$1.ForwardRefExoticComponent<Omit<Omit<Slider$1.RootProps, "ref"> & React$1.RefAttributes<View>, "ref"> & React$1.RefAttributes<View>>;
305
+
306
+ declare const toastVariants: (props?: ({
307
+ variant?: "default" | "destructive" | "success" | null | undefined;
308
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
309
+ type ToastProps = React$1.ComponentPropsWithoutRef<typeof View> & VariantProps<typeof toastVariants>;
310
+ declare function Toast({ className, variant, ...props }: ToastProps): react_jsx_runtime.JSX.Element;
311
+ declare function ToastTitle({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof Text$1>): react_jsx_runtime.JSX.Element;
312
+ declare function ToastDescription({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof Text$1>): react_jsx_runtime.JSX.Element;
313
+ declare function ToastClose({ className, ...props }: React$1.ComponentPropsWithoutRef<typeof Pressable>): react_jsx_runtime.JSX.Element;
314
+
315
+ declare const Table: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
316
+ declare const TableHeader: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
317
+ declare const TableBody: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
318
+ declare const TableFooter: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
319
+ declare const TableRow: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
320
+ declare const TableHead: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
321
+ declare const TableCell: React$1.ForwardRefExoticComponent<ViewProps & React$1.RefAttributes<View>>;
4
322
 
5
323
  interface ProductTitleProps extends Omit<TextProps, 'children'> {
6
324
  /** The raw RxDB product document (connector-specific shape) */
@@ -23,30 +341,59 @@ declare function ProductTitle({ doc, className, ...textProps }: ProductTitleProp
23
341
  interface ProductPriceProps extends Omit<TextProps, 'children'> {
24
342
  /** The raw RxDB product document (connector-specific shape) */
25
343
  doc: any;
26
- /** Currency symbol to prepend (defaults to '$') */
344
+ /**
345
+ * Currency to show when the product is priced in several. Defaults to the
346
+ * provider's store currency, then to the first currency listed.
347
+ */
348
+ currency?: string;
349
+ /** BCP 47 locale for number formatting. Defaults to the runtime locale. */
350
+ locale?: string;
351
+ /** Symbol to prepend when the currency is unknown (defaults to '$') */
27
352
  currencySymbol?: string;
353
+ /**
354
+ * When the connector's variants have differing prices, show
355
+ * `{fromLabel} <lowest price>` instead of the default variant's price.
356
+ * Defaults to true.
357
+ */
358
+ showFromPrice?: boolean;
359
+ /**
360
+ * Label shown before the lowest price when variant prices differ.
361
+ * @deprecated Use formatFrom.
362
+ */
363
+ fromLabel?: string;
364
+ /**
365
+ * Formats the lowest price when variant prices differ, for languages
366
+ * whose word order puts the label after the price. Defaults to
367
+ * `` (price) => `from ${price}` ``. Wins over `fromLabel` when both are given.
368
+ */
369
+ formatFrom?: (price: string) => string;
28
370
  className?: string;
29
371
  }
30
372
  /**
31
- * Displays a product's price.
373
+ * Displays a product's price, and the price it replaces while on sale.
32
374
  *
33
- * Works with any connector — extracts price via traits regardless
34
- * of whether it's a string field (WooCommerce) or derived from
35
- * variant pricing (Medusa).
375
+ * Reads the backend-neutral price list (`getPrices`), so a WooCommerce sale
376
+ * price, a Medusa sale price list and a Shopify compare-at price all render
377
+ * the same way.
36
378
  *
37
379
  * ```tsx
38
- * <ProductPrice doc={productDocument} currencySymbol="$" />
380
+ * <ProductPrice doc={productDocument} currency="EUR" />
39
381
  * ```
40
382
  */
41
- declare function ProductPrice({ doc, currencySymbol, className, ...textProps }: ProductPriceProps): react_jsx_runtime.JSX.Element;
383
+ declare function ProductPrice({ doc, currency, locale, currencySymbol, className, showFromPrice, fromLabel, formatFrom, ...textProps }: ProductPriceProps): react_jsx_runtime.JSX.Element;
42
384
 
43
- interface ProductImageProps extends Omit<ImageProps, 'source'> {
385
+ interface ProductImageProps extends Omit<React.ComponentPropsWithoutRef<typeof Image.Root>, 'source'> {
44
386
  /** The raw RxDB product document */
45
387
  doc: any;
46
388
  /** Image dimensions */
47
389
  size?: number;
48
390
  /** Style overrides (for dynamic sizing) */
49
391
  style?: StyleProp<ImageStyle>;
392
+ /**
393
+ * Render a same-size tile with the product's initial when there is no
394
+ * image, so rows and grids stay aligned. Defaults to false (render nothing).
395
+ */
396
+ showPlaceholder?: boolean;
50
397
  className?: string;
51
398
  }
52
399
  /**
@@ -58,7 +405,7 @@ interface ProductImageProps extends Omit<ImageProps, 'source'> {
58
405
  * <ProductImage doc={productDocument} size={80} className="rounded-lg" />
59
406
  * ```
60
407
  */
61
- declare function ProductImage({ doc, size, style, className, ...imageProps }: ProductImageProps): react_jsx_runtime.JSX.Element | null;
408
+ declare function ProductImage({ doc, size, style, showPlaceholder, className, ...imageProps }: ProductImageProps): react_jsx_runtime.JSX.Element | null;
62
409
 
63
410
  interface ProductSkuProps extends Omit<TextProps, 'children'> {
64
411
  /** The raw RxDB product document (connector-specific shape) */
@@ -79,35 +426,40 @@ interface ProductSkuProps extends Omit<TextProps, 'children'> {
79
426
  */
80
427
  declare function ProductSku({ doc, fallback, className, ...textProps }: ProductSkuProps): react_jsx_runtime.JSX.Element;
81
428
 
82
- interface ProductStockBadgeProps extends Omit<ViewProps, 'children'> {
429
+ interface ProductStockBadgeProps extends Omit<HStackProps, 'children'> {
83
430
  /** The raw RxDB product document (connector-specific shape) */
84
431
  doc: any;
85
432
  /** Whether to show the quantity alongside the status */
86
433
  showQuantity?: boolean;
434
+ /** Append when reconciled stock was last confirmed, if the provider gives it (default true) */
435
+ showAsOf?: boolean;
87
436
  className?: string;
88
437
  }
89
438
  /**
90
439
  * Displays a visual stock status badge for a product.
91
440
  *
92
- * Shows a colored label (In Stock / Out of Stock / On Backorder)
93
- * with an optional quantity count.
441
+ * Shows a label (In Stock / Out of Stock / On Backorder) with a dot carrying the colour
442
+ * with an optional quantity count. When the ConnectorProvider is given a
443
+ * reconciled stock overlay, it shows that stock and when it was confirmed.
94
444
  *
95
445
  * ```tsx
96
446
  * <ProductStockBadge doc={productDocument} showQuantity />
97
447
  * ```
98
448
  */
99
- declare function ProductStockBadge({ doc, showQuantity, className, ...viewProps }: ProductStockBadgeProps): react_jsx_runtime.JSX.Element;
449
+ declare function ProductStockBadge({ doc, showQuantity, showAsOf, className, ...props }: ProductStockBadgeProps): react_jsx_runtime.JSX.Element;
100
450
 
101
- interface ProductCardProps extends Omit<ViewProps, 'children'> {
451
+ interface ProductCardProps extends Omit<VStackProps, 'children'> {
102
452
  doc: any;
103
453
  onPress?: () => void;
104
454
  imageSize?: number;
105
455
  currencySymbol?: string;
456
+ /** Shown in place of the price when the channel doesn't sell this product. */
457
+ notSoldLabel?: string;
106
458
  className?: string;
107
459
  }
108
- declare function ProductCard({ doc, onPress, imageSize, currencySymbol, className, ...viewProps }: ProductCardProps): react_jsx_runtime.JSX.Element;
460
+ declare function ProductCard({ doc, onPress, imageSize, currencySymbol, notSoldLabel, className, ...props }: ProductCardProps): react_jsx_runtime.JSX.Element;
109
461
 
110
- interface ProductGridProps extends Omit<ViewProps, 'children'> {
462
+ interface ProductGridProps extends Omit<VStackProps, 'children'> {
111
463
  /** Array of product documents to render */
112
464
  items: any[];
113
465
  /** Render function for each product */
@@ -120,13 +472,18 @@ interface ProductGridProps extends Omit<ViewProps, 'children'> {
120
472
  filterSlot?: ReactNode;
121
473
  /** Content shown when items is empty */
122
474
  emptyState?: ReactNode;
475
+ /**
476
+ * Products the channel doesn't sell (`traits.product.isSellable` false,
477
+ * for example a Medusa product outside the sales channel) are hidden
478
+ * unless `showUnsellable`.
479
+ */
480
+ showUnsellable?: boolean;
123
481
  className?: string;
124
482
  }
125
483
  /**
126
- * A scrollable product grid with optional search and filter slots.
484
+ * A virtualized product grid with optional search and filter slots.
127
485
  *
128
- * Uses ScrollView + flexWrap for cross-platform grid layout rather than
129
- * FlatList numColumns, which keeps things predictable in both native and web.
486
+ * Uses FlatList numColumns to render rows near the viewport on native and web.
130
487
  *
131
488
  * ```tsx
132
489
  * <ProductGrid
@@ -137,86 +494,135 @@ interface ProductGridProps extends Omit<ViewProps, 'children'> {
137
494
  * />
138
495
  * ```
139
496
  */
140
- declare function ProductGrid({ items, renderItem, numColumns, searchSlot, filterSlot, emptyState, className, ...viewProps }: ProductGridProps): react_jsx_runtime.JSX.Element;
497
+ declare function ProductGrid({ items, renderItem, numColumns, searchSlot, filterSlot, emptyState, showUnsellable, className, ...viewProps }: ProductGridProps): react_jsx_runtime.JSX.Element;
141
498
 
142
- interface CartLineItem {
143
- /** The raw product document (connector-specific shape) */
144
- doc: any;
145
- /** Quantity in cart */
146
- quantity: number;
499
+ interface ProductListProps extends Omit<ViewProps, 'children'> {
500
+ items: any[];
501
+ renderItem: (item: any, index: number) => ReactNode;
502
+ searchSlot?: ReactNode;
503
+ filterSlot?: ReactNode;
504
+ emptyState?: ReactNode;
505
+ className?: string;
147
506
  }
148
- interface CartLineProps extends Omit<ViewProps, 'children'> {
149
- /** The cart line item */
150
- item: CartLineItem;
151
- /** Currency symbol (defaults to '$') */
152
- currencySymbol?: string;
507
+ declare function ProductList({ items, renderItem, searchSlot, filterSlot, emptyState, className, ...viewProps }: ProductListProps): react_jsx_runtime.JSX.Element;
508
+
509
+ interface CategoryItem {
510
+ id: string;
511
+ name: string;
512
+ }
513
+ interface CategoryNavProps extends Omit<ViewProps, 'children'> {
514
+ categories: CategoryItem[];
515
+ selectedId: string;
516
+ onSelect: (id: string) => void;
517
+ orientation?: 'horizontal' | 'vertical';
518
+ className?: string;
519
+ }
520
+ declare function CategoryNav({ categories, selectedId, onSelect, orientation, className, ...viewProps }: CategoryNavProps): react_jsx_runtime.JSX.Element;
521
+
522
+ interface VariantOption {
523
+ name: string;
524
+ values: string[];
525
+ }
526
+ interface ProductVariantPickerProps extends Omit<ViewProps, 'children'> {
527
+ options: VariantOption[];
528
+ selected?: Record<string, string>;
529
+ onSelect?: (selection: Record<string, string>) => void;
530
+ className?: string;
531
+ }
532
+ declare function ProductVariantPicker({ options, selected, onSelect, className, ...viewProps }: ProductVariantPickerProps): react_jsx_runtime.JSX.Element;
533
+
534
+ interface CartLineProps extends Omit<HStackProps, 'children'> {
535
+ name: string;
536
+ quantity: number;
537
+ unitPrice: Money;
538
+ lineTotal: Money;
539
+ locale?: string;
153
540
  className?: string;
154
541
  }
155
542
  /**
156
543
  * Displays a single cart line item: product name, quantity, and line total.
157
544
  *
158
545
  * ```tsx
159
- * <CartLine item={{ doc: productDocument, quantity: 2 }} />
546
+ * <CartLine name="Coffee" quantity={2} unitPrice={unitPrice} lineTotal={lineTotal} />
160
547
  * ```
161
548
  */
162
- declare function CartLine({ item, currencySymbol, className, ...viewProps }: CartLineProps): react_jsx_runtime.JSX.Element;
549
+ declare function CartLine({ name, quantity, unitPrice, lineTotal, locale, className, ...props }: CartLineProps): react_jsx_runtime.JSX.Element;
163
550
 
164
- interface CartTotalProps extends Omit<ViewProps, 'children'> {
165
- /** All cart line items */
166
- items: CartLineItem[];
167
- /** Currency symbol (defaults to '$') */
168
- currencySymbol?: string;
169
- /** Tax rate as a decimal (e.g. 0.1 for 10%). Defaults to 0. */
170
- taxRate?: number;
171
- /** Label for the tax line (defaults to 'Tax') */
172
- taxLabel?: string;
551
+ interface CartTotalProps extends Omit<VStackProps, 'children'> {
552
+ subtotal: Money;
553
+ taxLines?: Array<{
554
+ label: string;
555
+ amount: Money;
556
+ }>;
557
+ discount?: Money;
558
+ total: Money;
559
+ /** The tax is already in the subtotal (an inclusive display), so its rows read "incl." rather than add up. */
560
+ taxInclusive?: boolean;
561
+ locale?: string;
173
562
  className?: string;
174
563
  }
175
564
  /**
176
- * Displays a cart summary with subtotal, optional tax, and total.
565
+ * Displays a cart summary: subtotal, optional discount, optional tax, and total, in the receipt's order.
177
566
  *
178
567
  * ```tsx
179
- * <CartTotal items={cartItems} taxRate={0.1} />
568
+ * <CartTotal subtotal={subtotal} discount={discount} taxLines={taxLines} total={total} />
180
569
  * ```
181
570
  */
182
- declare function CartTotal({ items, currencySymbol, taxRate, taxLabel, className, ...viewProps }: CartTotalProps): react_jsx_runtime.JSX.Element;
571
+ declare function CartTotal({ subtotal, taxLines, discount, total, taxInclusive, locale, className, ...props }: CartTotalProps): react_jsx_runtime.JSX.Element;
183
572
 
184
- interface CartPanelProps extends Omit<ViewProps, 'children'> {
573
+ interface CartPanelProps<T> extends Omit<VStackProps, 'children'> {
185
574
  /** Cart line items to render */
186
- items: CartLineItem[];
575
+ items: T[];
187
576
  /** Render function for each cart line */
188
- renderItem: (item: CartLineItem, index: number) => ReactNode;
577
+ renderItem: (item: T, index: number) => ReactNode;
578
+ /** Row key per item; defaults to the item's string/number `id`, else its index. Override for items without `id`, or to key by something else. */
579
+ keyExtractor?: (item: T, index: number) => string;
189
580
  /** Header slot (e.g. customer info) */
190
581
  header?: ReactNode;
582
+ /** Content after the lines, inside the scrolling region (e.g. discount chips); shown even with no lines, so it isn't hidden by an empty cart */
583
+ afterItems?: ReactNode;
191
584
  /** Footer slot (e.g. totals, checkout button) */
192
585
  footer?: ReactNode;
193
586
  /** Content shown when items is empty */
194
587
  emptyState?: ReactNode;
195
588
  className?: string;
196
589
  }
197
- /**
198
- * A scrollable cart panel with header/footer slots.
199
- *
200
- * Composes CartLine (or custom renderItem) into a scrollable list
201
- * with optional header, footer, and empty state.
202
- *
203
- * ```tsx
204
- * <CartPanel
205
- * items={cartItems}
206
- * renderItem={(item) => <CartLine item={item} />}
207
- * header={<CustomerCard doc={customer} />}
208
- * footer={<CartTotal items={cartItems} />}
209
- * />
210
- * ```
211
- */
212
- declare function CartPanel({ items, renderItem, header, footer, emptyState, className, ...viewProps }: CartPanelProps): react_jsx_runtime.JSX.Element;
590
+ declare function CartPanel<T>({ items, renderItem, keyExtractor, header, afterItems, footer, emptyState, className, ...props }: CartPanelProps<T>): JSX.Element;
591
+
592
+ interface DiscountBadgeProps extends Omit<ViewProps, 'children'> {
593
+ label: string;
594
+ className?: string;
595
+ }
596
+ declare function DiscountBadge({ label, className, ...viewProps }: DiscountBadgeProps): react_jsx_runtime.JSX.Element;
597
+
598
+ interface CartNoteInputProps extends Omit<ViewProps, 'children'> {
599
+ value: string;
600
+ onChangeText: (text: string) => void;
601
+ placeholder?: string;
602
+ className?: string;
603
+ }
604
+ declare function CartNoteInput({ value, onChangeText, placeholder, className, ...viewProps }: CartNoteInputProps): react_jsx_runtime.JSX.Element;
605
+
606
+ interface CartAction {
607
+ id: string;
608
+ label: string;
609
+ onPress: () => void;
610
+ color?: string;
611
+ iconSlot?: ReactNode;
612
+ }
613
+ interface CartLineActionsProps extends Omit<ViewProps, 'children'> {
614
+ children: ReactNode;
615
+ actions: CartAction[];
616
+ className?: string;
617
+ }
618
+ declare function CartLineActions({ children, actions, className, ...viewProps }: CartLineActionsProps): react_jsx_runtime.JSX.Element;
213
619
 
214
620
  interface SearchInputProps extends Omit<TextInputProps, 'value' | 'onChangeText'> {
215
621
  value: string;
216
622
  onChangeText: (text: string) => void;
217
623
  className?: string;
218
624
  }
219
- declare function SearchInput({ value, onChangeText, className, placeholder, ...props }: SearchInputProps): react_jsx_runtime.JSX.Element;
625
+ declare function SearchInput({ value, onChangeText, className, placeholder, style, onFocus, onBlur, ...props }: SearchInputProps): react_jsx_runtime.JSX.Element;
220
626
 
221
627
  interface FilterChipProps {
222
628
  label: string;
@@ -224,6 +630,10 @@ interface FilterChipProps {
224
630
  onPress: () => void;
225
631
  className?: string;
226
632
  }
633
+ /**
634
+ * A single toggle chip. When used standalone, renders as a simple
635
+ * ToggleGroup with one item.
636
+ */
227
637
  declare function FilterChip({ label, active, onPress, className }: FilterChipProps): react_jsx_runtime.JSX.Element;
228
638
  interface ChipItem {
229
639
  label: string;
@@ -234,21 +644,39 @@ interface FilterChipGroupProps extends Omit<ViewProps, 'children'> {
234
644
  onChipPress: (index: number) => void;
235
645
  className?: string;
236
646
  }
647
+ /**
648
+ * A horizontal scrollable row of toggleable filter chips.
649
+ *
650
+ * Built on top of the ToggleGroup primitive for proper `aria-pressed`
651
+ * semantics and accessible toggle group behavior.
652
+ */
237
653
  declare function FilterChipGroup({ chips, onChipPress, className, ...viewProps }: FilterChipGroupProps): react_jsx_runtime.JSX.Element;
238
654
 
239
- interface CustomerCardProps extends Omit<ViewProps, 'children'> {
240
- doc: any;
655
+ interface QuantityStepperProps extends Omit<ViewProps, 'children'> {
656
+ defaultQuantity?: number;
657
+ quantity?: number;
658
+ onChangeQuantity?: (quantity: number) => void;
659
+ min?: number;
660
+ max?: number;
661
+ className?: string;
662
+ }
663
+ declare function QuantityStepper({ defaultQuantity, quantity: controlledQuantity, onChangeQuantity, min, max, className, ...viewProps }: QuantityStepperProps): react_jsx_runtime.JSX.Element;
664
+
665
+ interface CustomerCardProps<Doc = any> extends Omit<VStackProps, 'children'> {
666
+ doc: Doc;
667
+ traits?: CustomerTraits<Doc>;
241
668
  className?: string;
242
669
  }
243
- declare function CustomerCard({ doc, className, ...viewProps }: CustomerCardProps): react_jsx_runtime.JSX.Element | null;
670
+ declare function CustomerCard<Doc>({ doc, traits, className, ...props }: CustomerCardProps<Doc>): react_jsx_runtime.JSX.Element;
244
671
 
245
- interface CustomerSelectProps extends Omit<ViewProps, 'children'> {
672
+ interface CustomerSelectProps<Doc = any> extends Omit<VStackProps, 'children'> {
246
673
  /** Customer documents to display as options */
247
- customers: any[];
674
+ customers: Doc[];
248
675
  /** Currently selected customer (if any) */
249
- selected?: any;
676
+ selected?: Doc | null;
250
677
  /** Called when a customer is selected */
251
- onSelect: (customer: any) => void;
678
+ onSelect: (customer: Doc) => void;
679
+ traits?: CustomerTraits<Doc>;
252
680
  /** Called when the search text changes */
253
681
  onSearch: (query: string) => void;
254
682
  /** Placeholder text for the search input */
@@ -263,6 +691,9 @@ interface CustomerSelectProps extends Omit<ViewProps, 'children'> {
263
691
  * calls onSearch with the query text and renders whatever customers
264
692
  * are passed in.
265
693
  *
694
+ * Built on top of the Select primitive for proper accessibility
695
+ * semantics (combobox role, option roles, aria-expanded, aria-checked).
696
+ *
266
697
  * ```tsx
267
698
  * <CustomerSelect
268
699
  * customers={filteredCustomers}
@@ -272,31 +703,73 @@ interface CustomerSelectProps extends Omit<ViewProps, 'children'> {
272
703
  * />
273
704
  * ```
274
705
  */
275
- declare function CustomerSelect({ customers, selected, onSelect, onSearch, placeholder, className, ...viewProps }: CustomerSelectProps): react_jsx_runtime.JSX.Element;
706
+ declare function CustomerSelect<Doc>(props: CustomerSelectProps<Doc>): react_jsx_runtime.JSX.Element;
707
+
708
+ interface CustomerFormValues {
709
+ firstName: string;
710
+ lastName: string;
711
+ email: string;
712
+ phone: string;
713
+ address: string;
714
+ }
715
+ interface CustomerFormProps extends Omit<ViewProps, 'children'> {
716
+ values: CustomerFormValues;
717
+ onChangeField: (field: keyof CustomerFormValues, value: string) => void;
718
+ onSubmit?: () => void;
719
+ submitLabel?: string;
720
+ showAddress?: boolean;
721
+ className?: string;
722
+ }
723
+ declare function CustomerForm({ values, onChangeField, onSubmit, submitLabel, showAddress, className, ...viewProps }: CustomerFormProps): react_jsx_runtime.JSX.Element;
724
+
725
+ interface CustomerOrderHistoryProps extends Omit<ViewProps, 'children'> {
726
+ orders: any[];
727
+ renderItem: (order: any, index: number) => ReactNode;
728
+ emptyState?: ReactNode;
729
+ className?: string;
730
+ }
731
+ declare function CustomerOrderHistory({ orders, renderItem, emptyState, className, ...viewProps }: CustomerOrderHistoryProps): react_jsx_runtime.JSX.Element;
276
732
 
277
- interface PaymentMethodCardProps extends Omit<ViewProps, 'children'> {
733
+ interface CustomerPickerProps {
734
+ /** The connector's searchCustomers, bound to its context by the app. */
735
+ search: (query: string) => Promise<Customer[]>;
736
+ /** The connector's createCustomer, bound; absent hides "New customer". */
737
+ create?: (input: CustomerInput) => Promise<Customer>;
738
+ selected: Customer | null;
739
+ onSelect: (customer: Customer | null) => void;
740
+ /** Called for errors the picker can't explain to the cashier, including ConnectorUnauthorizedError, which means the app should sign in again. */
741
+ onError?: (error: unknown) => void;
742
+ /** false disables search and create (online only in v1). */
743
+ online: boolean;
744
+ /** Debounce before a search, ms. */
745
+ debounceMs?: number;
746
+ className?: string;
747
+ }
748
+ declare function CustomerPicker({ search, create, selected, onSelect, onError, online, debounceMs, className }: CustomerPickerProps): react_jsx_runtime.JSX.Element;
749
+
750
+ interface PaymentMethodCardProps extends Omit<PressableProps, 'children'> {
278
751
  label: string;
279
752
  selected: boolean;
280
753
  onPress: () => void;
281
754
  icon?: ReactNode;
282
755
  className?: string;
283
756
  }
284
- declare function PaymentMethodCard({ label, selected, onPress, icon, className, ...viewProps }: PaymentMethodCardProps): react_jsx_runtime.JSX.Element;
757
+ declare function PaymentMethodCard({ label, selected, onPress, icon, className, ...props }: PaymentMethodCardProps): react_jsx_runtime.JSX.Element;
285
758
 
286
- interface OrderSummaryLineProps extends Omit<ViewProps, 'children'> {
759
+ interface OrderSummaryLineProps extends Omit<HStackProps, 'children'> {
287
760
  label: string;
288
761
  amount: string;
289
762
  bold?: boolean;
290
763
  className?: string;
291
764
  }
292
- declare function OrderSummaryLine({ label, amount, bold, className, ...viewProps }: OrderSummaryLineProps): react_jsx_runtime.JSX.Element;
765
+ declare function OrderSummaryLine({ label, amount, bold, className, ...props }: OrderSummaryLineProps): react_jsx_runtime.JSX.Element;
293
766
 
294
767
  interface PaymentMethod {
295
768
  id: string;
296
769
  label: string;
297
770
  icon?: ReactNode;
298
771
  }
299
- interface PaymentSelectorProps extends Omit<ViewProps, 'children'> {
772
+ interface PaymentSelectorProps extends Omit<VStackProps, 'children'> {
300
773
  /** Available payment methods */
301
774
  methods: PaymentMethod[];
302
775
  /** ID of the currently selected method */
@@ -318,13 +791,13 @@ interface PaymentSelectorProps extends Omit<ViewProps, 'children'> {
318
791
  * />
319
792
  * ```
320
793
  */
321
- declare function PaymentSelector({ methods, selected, onSelect, className, ...viewProps }: PaymentSelectorProps): react_jsx_runtime.JSX.Element;
794
+ declare function PaymentSelector({ methods, selected, onSelect, className, ...props }: PaymentSelectorProps): react_jsx_runtime.JSX.Element;
322
795
 
323
796
  interface OrderSummaryPayment {
324
797
  label: string;
325
798
  amount: string;
326
799
  }
327
- interface OrderSummaryProps extends Omit<ViewProps, 'children'> {
800
+ interface OrderSummaryProps extends Omit<VStackProps, 'children'> {
328
801
  /** Formatted subtotal string (e.g. "$1199.98") */
329
802
  subtotal: string;
330
803
  /** Formatted tax amount (optional) */
@@ -359,6 +832,563 @@ interface OrderSummaryProps extends Omit<ViewProps, 'children'> {
359
832
  * />
360
833
  * ```
361
834
  */
362
- declare function OrderSummary({ subtotal, tax, taxLabel, total, payments, header, footer, className, ...viewProps }: OrderSummaryProps): react_jsx_runtime.JSX.Element;
835
+ declare function OrderSummary({ subtotal, tax, taxLabel, total, payments, header, footer, className, ...props }: OrderSummaryProps): react_jsx_runtime.JSX.Element;
836
+
837
+ interface ChangeDisplayProps extends Omit<ViewProps, 'children'> {
838
+ change: Money;
839
+ locale?: string;
840
+ className?: string;
841
+ }
842
+ declare function ChangeDisplay({ change, locale, className, ...viewProps }: ChangeDisplayProps): react_jsx_runtime.JSX.Element;
843
+
844
+ interface CashTenderedProps extends Omit<ViewProps, 'children'> {
845
+ total: Money;
846
+ defaultAmount?: Money;
847
+ amount?: Money;
848
+ onChangeAmount?: (amount: Money) => void;
849
+ quickAmounts?: Money[];
850
+ locale?: string;
851
+ className?: string;
852
+ }
853
+ declare function CashTendered({ total, defaultAmount, amount: controlledAmount, onChangeAmount, quickAmounts, locale, className, ...viewProps }: CashTenderedProps): react_jsx_runtime.JSX.Element;
854
+
855
+ interface ReceiptItem {
856
+ name: string;
857
+ quantity: number;
858
+ total: string;
859
+ }
860
+ interface ReceiptPreviewProps extends Omit<ViewProps, 'children'> {
861
+ items: ReceiptItem[];
862
+ subtotal: string;
863
+ tax: string;
864
+ total: string;
865
+ payments?: Array<{
866
+ method: string;
867
+ amount: string;
868
+ }>;
869
+ headerSlot?: ReactNode;
870
+ footerSlot?: ReactNode;
871
+ className?: string;
872
+ }
873
+ declare function ReceiptPreview({ items, subtotal, tax, total, payments, headerSlot, footerSlot, className, ...viewProps }: ReceiptPreviewProps): react_jsx_runtime.JSX.Element;
874
+
875
+ type OrderStatus = 'pending' | 'processing' | 'completed' | 'refunded' | 'cancelled';
876
+ interface OrderStatusBadgeProps extends Omit<ViewProps, 'children'> {
877
+ status: OrderStatus;
878
+ className?: string;
879
+ }
880
+ declare function OrderStatusBadge({ status, className, ...viewProps }: OrderStatusBadgeProps): react_jsx_runtime.JSX.Element;
881
+
882
+ interface OrderCardProps extends Omit<ViewProps, 'children'> {
883
+ orderNumber: string;
884
+ date: string;
885
+ total: string;
886
+ status: OrderStatus;
887
+ customerName?: string;
888
+ onPress?: () => void;
889
+ className?: string;
890
+ }
891
+ declare function OrderCard({ orderNumber, date, total, status, customerName, onPress, className, ...viewProps }: OrderCardProps): react_jsx_runtime.JSX.Element;
892
+
893
+ interface OrderListProps extends Omit<ViewProps, 'children'> {
894
+ items: any[];
895
+ renderItem: (item: any, index: number) => ReactNode;
896
+ headerSlot?: ReactNode;
897
+ emptyState?: ReactNode;
898
+ className?: string;
899
+ }
900
+ declare function OrderList({ items, renderItem, headerSlot, emptyState, className, ...viewProps }: OrderListProps): react_jsx_runtime.JSX.Element;
901
+
902
+ interface OrderDetailLineItem {
903
+ name: string;
904
+ quantity: number;
905
+ total: string;
906
+ }
907
+ interface OrderDetailProps extends Omit<ViewProps, 'children'> {
908
+ orderNumber: string;
909
+ status: OrderStatus;
910
+ lineItems: OrderDetailLineItem[];
911
+ subtotal: string;
912
+ tax: string;
913
+ total: string;
914
+ customerSlot?: ReactNode;
915
+ paymentSlot?: ReactNode;
916
+ footerSlot?: ReactNode;
917
+ className?: string;
918
+ }
919
+ declare function OrderDetail({ orderNumber, status, lineItems, subtotal, tax, total, customerSlot, paymentSlot, footerSlot, className, ...viewProps }: OrderDetailProps): react_jsx_runtime.JSX.Element;
920
+
921
+ interface Denomination {
922
+ label: string;
923
+ value: number;
924
+ }
925
+ interface CashCountInputProps extends Omit<ViewProps, 'children'> {
926
+ denominations?: Denomination[];
927
+ defaultCounts?: Record<number, number>;
928
+ counts?: Record<number, number>;
929
+ onChangeCounts?: (counts: Record<number, number>) => void;
930
+ onChangeTotal?: (total: number) => void;
931
+ className?: string;
932
+ }
933
+ declare function CashCountInput({ denominations, defaultCounts, counts: controlledCounts, onChangeCounts, onChangeTotal, className, ...viewProps }: CashCountInputProps): react_jsx_runtime.JSX.Element;
934
+
935
+ interface TransactionSummary {
936
+ method: string;
937
+ count: number;
938
+ total: number;
939
+ }
940
+ interface RegisterSummaryProps extends Omit<ViewProps, 'children'> {
941
+ expectedCash: number;
942
+ actualCash: number;
943
+ transactions: TransactionSummary[];
944
+ headerSlot?: ReactNode;
945
+ footerSlot?: ReactNode;
946
+ className?: string;
947
+ }
948
+ declare function RegisterSummary({ expectedCash, actualCash, transactions, headerSlot, footerSlot, className, ...viewProps }: RegisterSummaryProps): react_jsx_runtime.JSX.Element;
949
+
950
+ interface RegisterOpenCloseProps extends Omit<ViewProps, 'children'> {
951
+ isOpen: boolean;
952
+ onOpen?: () => void;
953
+ onClose?: () => void;
954
+ expectedBalance?: number;
955
+ cashCountSlot?: ReactNode;
956
+ notesSlot?: ReactNode;
957
+ className?: string;
958
+ }
959
+ declare function RegisterOpenClose({ isOpen, onOpen, onClose, expectedBalance, cashCountSlot, notesSlot, className, ...viewProps }: RegisterOpenCloseProps): react_jsx_runtime.JSX.Element;
960
+
961
+ interface RegisterPickerRegister {
962
+ id: string;
963
+ name: string;
964
+ }
965
+ interface RegisterPickerProps {
966
+ /** The app's own list of registers for this store; there's no `useRegisterSession` yet to bind. */
967
+ registers: RegisterPickerRegister[];
968
+ onPick: (id: string) => void;
969
+ className?: string;
970
+ }
971
+ /**
972
+ * The register-choice screen: shown before a till is bound to any register. Port provenance
973
+ * (ADR-032 amendment 1): WCPOS `next` `3b5331b5c` `register-picker.tsx`.
974
+ *
975
+ * Neutral change: the app supplies `registers` and binds on `onPick` itself — TallyUI has no
976
+ * `useRegisterBinding` concept; binding is entirely the app's own (ADR-032 amendment 1).
977
+ */
978
+ declare function RegisterPicker({ registers, onPick, className }: RegisterPickerProps): react_jsx_runtime.JSX.Element;
979
+
980
+ interface OpenRegisterCardProps {
981
+ /** `useRegisterSession`'s return value: opens the session through `register.actions.openSession`. */
982
+ register: ReturnType<typeof useRegisterSession>;
983
+ /** ISO 4217 code, for parsing and formatting the typed amount. */
984
+ currency: string;
985
+ /** The store's configured opening float, minor units; preferred over the last counted cash. */
986
+ configuredFloatMinor?: number | null;
987
+ className?: string;
988
+ }
989
+ /**
990
+ * Opens a register session, prefilled with the configured float or the last counted cash.
991
+ * Port provenance (ADR-032 amendment 1): WCPOS `next` `3b5331b5c` `open-register-card.tsx`
992
+ * (LEDGER 52).
993
+ *
994
+ * The chip choices are already resolved once `expectedFloatMinor` is computed: a late-arriving
995
+ * `configuredFloatMinor` or `register.lastClosure` never overwrites what the cashier already
996
+ * typed, because `enteredAmount` only ever starts from it, never re-derives from it.
997
+ */
998
+ declare function OpenRegisterCard({ register, currency, configuredFloatMinor, className }: OpenRegisterCardProps): react_jsx_runtime.JSX.Element;
999
+
1000
+ interface RegisterBarProps {
1001
+ /** `useRegisterSession`'s return value: the session's status, `overdue`, `enabled` and so on. */
1002
+ register: ReturnType<typeof useRegisterSession>;
1003
+ /** The register this till is bound to, or `null` when no register is chosen yet. */
1004
+ registerId: string | null;
1005
+ /** `false` when the store, or the app itself, can't be reached — reads to the cashier as offline. */
1006
+ online: boolean;
1007
+ /** Hidden when `multiRegister` is `false`: a single-register store doesn't need to name it. */
1008
+ registerName?: string;
1009
+ multiRegister: boolean;
1010
+ onOpenPanel: () => void;
1011
+ /** Turns the pill into a button (opens the gate/picker or the panel) when given; the plain badge otherwise. */
1012
+ onPressPill?: () => void;
1013
+ className?: string;
1014
+ }
1015
+ /**
1016
+ * The till's one status bar: which register (multi-register stores only), one status pill
1017
+ * (LEDGER 48), and the button that opens the register panel. Port provenance (ADR-032 amendment
1018
+ * 1): WCPOS `next` `3b5331b5c` `register-bar.tsx`.
1019
+ *
1020
+ * Dropped for this neutral port: the user avatar and user sheet, switch-store, and the
1021
+ * WooCommerce OAuth-return rehosting — all app/backend concerns `useRegisterSession` never
1022
+ * carries. The drawer/menu button is gone too: TallyUI has no fixed navigation shell to open.
1023
+ */
1024
+ declare function RegisterBar({ register, registerId, online, registerName, multiRegister, onOpenPanel, onPressPill, className, }: RegisterBarProps): react_jsx_runtime.JSX.Element;
1025
+
1026
+ /**
1027
+ * The register bar's status pill: one pill, one place. Port provenance (ADR-032 amendment 1):
1028
+ * WCPOS `next` `3b5331b5c` `register-bar.helpers.ts` (LEDGER 48).
1029
+ *
1030
+ * Neutral changes: WCPOS decides "choosing a register" from a WooCommerce binding status
1031
+ * (`bindingStatus: 'bound' | 'choose' | 'none' | 'unknown'`) and folds the store's display name
1032
+ * into `place`. TallyUI's binding is entirely the app's own (ADR-032 amendment 1's "Not ported"
1033
+ * note), so this takes the plain `registerId` the app already passes to `useRegisterSession`
1034
+ * (`null` means unbound) instead, and drops the store name — RegisterBar here shows only the
1035
+ * register name (`multiRegister` decides whether that's shown at all) and the status pill.
1036
+ * Copy is plain English (no i18n keys, ADR-064's neutral-copy rule).
1037
+ */
1038
+ type RegisterBarPill = 'Choose a register' | 'Close not finished' | 'Offline' | 'Approval needed' | 'Counting' | 'Overdue' | 'Register closed';
1039
+ /**
1040
+ * Priority, matching WCPOS's ordering: choosing a register outranks everything (LEDGER 48);
1041
+ * then a closed session whose close isn't in flight (TallyUI: it blocks selling until Finish
1042
+ * closing); then an unreachable store reads as offline, ahead of any session state; approval needed
1043
+ * outranks plain counting; an open, overdue session outranks a session-less "closed" pill.
1044
+ */
1045
+ declare function describeRegisterBarPill({ registerId, online, sessionStatus, overdue, approvalRequired, sessionsOn, closing, }: {
1046
+ /** The register this till is bound to, or `null` when it isn't bound yet. */
1047
+ registerId: string | null;
1048
+ online: boolean;
1049
+ sessionStatus?: 'open' | 'counting' | 'closed' | null;
1050
+ overdue?: boolean;
1051
+ approvalRequired?: boolean;
1052
+ /** The store uses register sessions at all (`useRegisterSession`'s `enabled`). */
1053
+ sessionsOn?: boolean;
1054
+ /** A close is in flight (`useRegisterSession`'s `closing`), so a closed session isn't unfinished. */
1055
+ closing?: boolean;
1056
+ }): RegisterBarPill | null;
1057
+
1058
+ interface MovementSheetProps {
1059
+ /** `useRegisterSession`'s return value: records the movement through `register.actions.recordMovement`. */
1060
+ register: ReturnType<typeof useRegisterSession>;
1061
+ /** The caller mounts this only once a type is chosen, so the sheet always has one to record. */
1062
+ type: MovementType;
1063
+ /** ISO 4217 code, for parsing the typed amount into minor units. */
1064
+ currency: string;
1065
+ onDone?: (id: string, type: MovementType, amountMinor: number) => void;
1066
+ onOpenChange: (open: boolean) => void;
1067
+ /** A no-sale opens the drawer once recorded (LEDGER 66); there is nothing to open otherwise. */
1068
+ onOpenDrawer?: () => void;
1069
+ }
1070
+ /**
1071
+ * Records a paid-in, paid-out or no-sale cash movement. Port provenance (ADR-032 amendment 1):
1072
+ * WCPOS `next` `3b5331b5c` `movement-sheet.tsx` (LEDGER 55, 56, 66).
1073
+ *
1074
+ * The cash moves the moment the cashier confirms, so validation happens before the tap, never
1075
+ * after: a refusal afterwards would mean cash already moved with no record of it. A no-sale
1076
+ * hides the amount field, always records zero, and opens the drawer once the row is written.
1077
+ */
1078
+ declare function MovementSheet({ register, type, currency, onDone, onOpenChange, onOpenDrawer }: MovementSheetProps): react_jsx_runtime.JSX.Element;
1079
+
1080
+ interface RegisterPanelProps {
1081
+ /** `useRegisterSession`'s return value: movements, `expected`, `blind`, and every action used here. */
1082
+ register: ReturnType<typeof useRegisterSession>;
1083
+ /** ISO 4217 code, for money display and movement amounts. */
1084
+ currency: string;
1085
+ /** Shown as the panel's title while blind counting hides the expected amount. */
1086
+ registerName?: string;
1087
+ open: boolean;
1088
+ onOpenChange: (open: boolean) => void;
1089
+ className?: string;
1090
+ }
1091
+ /**
1092
+ * The register's drawer panel: expected figures, cash movements with Undo, and Close register.
1093
+ * Port provenance (ADR-032 amendment 1): WCPOS `next` `3b5331b5c` `register-panel.tsx` (LEDGER
1094
+ * 54, 56, 58).
1095
+ *
1096
+ * Leaves out (registers job c2 or a later job, per `useRegisterSession`'s own "Not ported"
1097
+ * note): refused-movement Retry and "Unsynced" (no outbox here to refuse a movement), the
1098
+ * X-report, Z and print/reprint, and the Reports deep link.
1099
+ */
1100
+ declare function RegisterPanel({ register, currency, registerName, open, onOpenChange, className }: RegisterPanelProps): react_jsx_runtime.JSX.Element | null;
1101
+
1102
+ interface RegisterColumnProps {
1103
+ /** `useRegisterSession`'s return value: decides the picker/open/counting/selling swap. */
1104
+ register: ReturnType<typeof useRegisterSession>;
1105
+ /** The register this till is bound to, the same value passed into `useRegisterSession`; `null`
1106
+ * means unbound, since the hook's own return carries no such field (it's the app's input, not
1107
+ * its output). */
1108
+ registerId: string | null;
1109
+ registers: RegisterPickerRegister[];
1110
+ onPick: (id: string) => void;
1111
+ /** ISO 4217 code, forwarded to `OpenRegisterCard`. */
1112
+ currency: string;
1113
+ configuredFloatMinor?: number | null;
1114
+ /** Rendered instead of `children` while a session is counting (Job B fills this), and while its close is in flight
1115
+ * (`register.closing`). A closed session that isn't closing shows the Finish-closing card instead, whose button has
1116
+ * `nativeID="register-column-finish-close-button"`, so an app's `onPressPill` can focus it on the web. */
1117
+ countSlot?: ReactNode;
1118
+ /** Whether the cart has no lines; gates the overdue Close register offer (LEDGER 53). */
1119
+ cartEmpty?: boolean;
1120
+ /** The cart, shown once a register is bound, open, and not counting. */
1121
+ children: ReactNode;
1122
+ }
1123
+ /**
1124
+ * Swaps the cart column's content for register selection, opening or counting when the till
1125
+ * needs it, offering Close register when an open session runs overdue with nothing left to
1126
+ * sell. Port provenance (ADR-032 amendment 1): WCPOS `next` `3b5331b5c`'s cart-column register
1127
+ * swap (LEDGER 53), composed here as one small component rather than inline cart-screen logic.
1128
+ */
1129
+ declare function RegisterColumn({ register, registerId, registers, onPick, currency, configuredFloatMinor, countSlot, cartEmpty, children, }: RegisterColumnProps): react_jsx_runtime.JSX.Element;
1130
+
1131
+ /** The exact refusal shown when Close is over `varianceThreshold` and the host gives no `approve` (the Front desk, 2026-09-28). */
1132
+ declare const APPROVAL_REQUIRED_TEXT = "Manager approval needed. Ask a manager to approve, or count again.";
1133
+ interface RegisterCountProps {
1134
+ /** `useRegisterSession`'s return value: `expected`, `blind`, `varianceThreshold`, and `backToSelling`/`closeSession`. */
1135
+ register: ReturnType<typeof useRegisterSession>;
1136
+ /** ISO 4217 code: denomination faces, parsing and display. */
1137
+ currency: string;
1138
+ /**
1139
+ * Above `register.varianceThreshold`, Close asks for this first. `null` refuses and the count
1140
+ * stays; without it, Close refuses outright with `APPROVAL_REQUIRED_TEXT`. Its `approvedBy`
1141
+ * and `approvedByName` go to `closeSession`, which enforces the same gate and puts them on the Z.
1142
+ */
1143
+ approve?: () => Promise<{
1144
+ approvedBy: string;
1145
+ approvedByName?: string;
1146
+ } | null>;
1147
+ className?: string;
1148
+ }
1149
+ /**
1150
+ * Counts the drawer at close: denomination tiles or a typed cash amount, other tenders kept as
1151
+ * typed, a live variance line, and Close (gated by `approve` over threshold) or Back to selling.
1152
+ * Port provenance (ADR-032 amendment 1): WCPOS `next` `3b5331b5c` `register-count.tsx` (LEDGER
1153
+ * 59, 60, 65, 67). Leaves out WCPOS's ApproveSheet and server-demanded `approval_required`
1154
+ * (registers c2) — `approve` is the host's own gate, and it runs regardless of `blind`: dropping
1155
+ * the server flag would otherwise leave a blind count with no gate at all over threshold.
1156
+ */
1157
+ declare function RegisterCount({ register, currency, approve, className }: RegisterCountProps): react_jsx_runtime.JSX.Element | null;
1158
+
1159
+ interface ClosureSheetProps {
1160
+ /** `useRegisterSession`'s return value: reads `lastClosure` and `blind`. */
1161
+ register: ReturnType<typeof useRegisterSession>;
1162
+ /** ISO 4217 code, for the figures. */
1163
+ currency: string;
1164
+ /** Renders no print button when absent — printing is a later job (registers c2). */
1165
+ onPrint?: () => void | Promise<void>;
1166
+ onDone: () => void;
1167
+ }
1168
+ /**
1169
+ * Confirms a closed session from `register.lastClosure`: the local closure number always, and
1170
+ * the counted figures and variance per tender unless `blind`. Port provenance (ADR-032
1171
+ * amendment 1): WCPOS `next` `3b5331b5c` `closure-sheet.tsx` (LEDGER 54, 62). Leaves out the
1172
+ * Z-report preview, print/reprint and the server-number adoption (registers c2) — `onPrint` is
1173
+ * an optional hook for a host that later wires up printing; without it, no button renders.
1174
+ * Unlike WCPOS (which still shows counted cash to a blind cashier), every figure here is hidden
1175
+ * while blind, per the register-screens-b design, since TallyUI's closure lists every tender.
1176
+ */
1177
+ declare function ClosureSheet({ register, currency, onPrint, onDone }: ClosureSheetProps): react_jsx_runtime.JSX.Element | null;
1178
+
1179
+ interface SettingsRowProps extends Omit<ViewProps, 'children'> {
1180
+ label: string;
1181
+ description?: string;
1182
+ action?: ReactNode;
1183
+ className?: string;
1184
+ }
1185
+ declare function SettingsRow({ label, description, action, className, ...viewProps }: SettingsRowProps): react_jsx_runtime.JSX.Element;
1186
+
1187
+ interface SettingsGroupProps extends Omit<ViewProps, 'children'> {
1188
+ title: string;
1189
+ description?: string;
1190
+ children: ReactNode;
1191
+ className?: string;
1192
+ }
1193
+ declare function SettingsGroup({ title, description, children, className, ...viewProps }: SettingsGroupProps): react_jsx_runtime.JSX.Element;
1194
+
1195
+ type ConnectionStatus = 'connected' | 'disconnected' | 'syncing' | 'error';
1196
+ interface ConnectorStatusProps extends Omit<ViewProps, 'children'> {
1197
+ name: string;
1198
+ status: ConnectionStatus;
1199
+ lastSync?: string;
1200
+ error?: string;
1201
+ className?: string;
1202
+ /** Products the sales channel doesn't sell (the calculated-price runner's `unreported`). Hidden when undefined or 0. */
1203
+ unsoldCount?: number;
1204
+ /** True when that count is from an older pass than the last failure (`!isFingerprintResultCurrent(state)`). */
1205
+ unsoldStale?: boolean;
1206
+ /** The line's text; default: `${n} product(s) not sold in this channel`, plus ` (last check failed)` when stale. */
1207
+ formatUnsold?: (count: number, stale: boolean) => string;
1208
+ }
1209
+ declare function ConnectorStatus({ name, status, lastSync, error, className, unsoldCount, unsoldStale, formatUnsold, ...viewProps }: ConnectorStatusProps): react_jsx_runtime.JSX.Element;
1210
+
1211
+ /** `taxLabel` names each tax row; VAT isn't universal, so a platform passes its own (medusapos passes `VAT ${rate}%`). */
1212
+ declare function Cart({ sale, taxLabel }: {
1213
+ sale: ReturnType<typeof useSale>;
1214
+ taxLabel?: (ratePpm: number) => string;
1215
+ }): react_jsx_runtime.JSX.Element;
1216
+
1217
+ /** Phone mode's cart summary (medusapos ADR 0009): the whole bar is one button; the total is the cart's own Total row. */
1218
+ declare function CartBar({ sale, onOpen }: {
1219
+ sale: ReturnType<typeof useSale>;
1220
+ onOpen: () => void;
1221
+ }): react_jsx_runtime.JSX.Element;
1222
+
1223
+ declare function Tender({ sale }: {
1224
+ sale: ReturnType<typeof useSale>;
1225
+ }): react_jsx_runtime.JSX.Element | null;
1226
+
1227
+ /** The cashier's entry as a TallyUI Discount (a percent, or integer minor units), or the inline error to show. */
1228
+ declare function parseDiscount(type: Discount['type'], text: string, currency: string): Discount | string;
1229
+ /** "10%", or a fixed discount's amount as it actually comes off (amountMinor), never the amount requested. */
1230
+ declare const discountLabel: (discount: AppliedDiscount, currency: string) => string;
1231
+ /** `onApply` returns a refusal to show inline (the capability gate), or null once applied. */
1232
+ declare function DiscountForm({ title, currency, onApply, onClose }: {
1233
+ title: string;
1234
+ currency: string;
1235
+ onApply: (discount: Discount) => string | null;
1236
+ onClose: () => void;
1237
+ }): react_jsx_runtime.JSX.Element;
1238
+ /** Applied discounts as badges; pressing one removes it through TallyUI's builder. */
1239
+ /** `prefix` names a chip that would otherwise read like a fee, e.g. "Order discount −€0.50". */
1240
+ /** `amounts` are order.display's figures by discountId (TallyUI ADR-063): "10% −€0.40", or "−€0.40" for a fixed one. */
1241
+ declare function DiscountChips({ discounts, currency, onRemove, prefix, amounts }: {
1242
+ discounts: AppliedDiscount[];
1243
+ currency: string;
1244
+ onRemove: (id: string) => void;
1245
+ prefix?: string;
1246
+ amounts?: {
1247
+ discountId: string;
1248
+ amountMinor: number;
1249
+ }[];
1250
+ }): react_jsx_runtime.JSX.Element | null;
1251
+
1252
+ declare function formatStockSyncTime(time: Date, locale?: string, hour12?: boolean, now?: Date): string;
1253
+ declare function Catalogue<Doc>({ products, traits, currency, onSelect, statusText, statusAccessory, lastSyncedAt, lastStockCheckAt, hour12, minCodeLength }: {
1254
+ products: Doc[];
1255
+ traits: ProductTraits<Doc>;
1256
+ currency: string;
1257
+ /** Receives the chosen product and variant with the nearest ConnectorProvider's stock overlay applied (a copy). */
1258
+ onSelect: (entry: CatalogueEntry<Doc>) => void;
1259
+ statusText?: string;
1260
+ /** Rendered at the end of the status line, e.g. a register control at phone width; the row renders even without `statusText`. */
1261
+ statusAccessory?: ReactNode;
1262
+ lastSyncedAt: Date | null;
1263
+ /** The last completed stock reconcile pass, persisted across restarts. The "stock as of" time shown is the
1264
+ * latest of this, the provider's stockOverlayAsOf (when valid) and lastSyncedAt; null and omitted alike. */
1265
+ lastStockCheckAt?: Date | null;
1266
+ /** Whether to show a 12- or 24-hour clock in the stock-as-of time; undefined keeps the locale default. A platform
1267
+ * reads this off its own device APIs (e.g. expo-localization's getCalendars()) and passes it in. */
1268
+ hour12?: boolean;
1269
+ /** A till's scanner setting: below this length (after trimming), Enter leaves the typed text as a plain
1270
+ * search instead of doing a code lookup. A scanner's timing threshold is the app's own concern,
1271
+ * in its unfocused wedge listener — not this prop's job. */
1272
+ minCodeLength?: number;
1273
+ }): react_jsx_runtime.JSX.Element;
1274
+
1275
+ /** `store`/`taxLabel`/`topInset`/`formatDate` replace the app's Medusa settings, hard-coded VAT (default matches
1276
+ * TV6a's `Cart`), outbox strip and date util, so `Receipt` stays platform-neutral (ADR-052). */
1277
+ declare function Receipt({ order, store, cashier, registerId, newSale, taxLabel, topInset, formatDate }: {
1278
+ order: SentOrder;
1279
+ store: {
1280
+ name: string;
1281
+ address?: string;
1282
+ };
1283
+ cashier: string;
1284
+ registerId: string;
1285
+ newSale: () => void;
1286
+ taxLabel?: (ratePpm: number) => string;
1287
+ topInset?: number;
1288
+ formatDate?: (iso: string) => string;
1289
+ }): react_jsx_runtime.JSX.Element;
1290
+
1291
+ declare function injectPrintStyle(): void;
1292
+
1293
+ /**
1294
+ * `pluginName` names the store's plugin in the detail, as its owners know it; `registerState` counts till updates.
1295
+ * `pullNotice` (a stopped product pull) shows as its own line and detail, above the outbox line.
1296
+ */
1297
+ declare function SyncStatus({ state, registerState, pluginName, pullNotice }: {
1298
+ state: OutboxState;
1299
+ registerState?: OutboxState;
1300
+ pluginName?: string;
1301
+ pullNotice?: SyncNotice;
1302
+ }): react_jsx_runtime.JSX.Element;
1303
+
1304
+ /** The "Needs attention" (when not empty) and "Recent" orders, lifted from medusapos/app's orders screen (ADR-052).
1305
+ * `onRetry` is the outbox's `requeue`; `formatDate` replaces the app's date util; `footer` is the app's own content
1306
+ * (medusapos: the feedback link). The router and session redirect stay in the app. `stuck` is the outbox's
1307
+ * `state.stuck` (`useOrderOutbox`): those pending orders need attention too, each with its own entry's reason and since. */
1308
+ declare function OrdersList({ orders, onRetry, formatDate, footer, stuck }: {
1309
+ orders: PosOrder[];
1310
+ onRetry(orderIds: string[]): Promise<number>;
1311
+ formatDate?: (iso: string) => string;
1312
+ footer?: ReactNode;
1313
+ stuck?: OutboxState['stuck'];
1314
+ }): react_jsx_runtime.JSX.Element;
1315
+
1316
+ interface POSLayoutProps extends Omit<ViewProps, 'children'> {
1317
+ browseSlot: ReactNode;
1318
+ cartSlot: ReactNode;
1319
+ headerSlot?: ReactNode;
1320
+ layout?: 'split' | 'stacked';
1321
+ breakpoint?: number;
1322
+ className?: string;
1323
+ }
1324
+ declare function POSLayout({ browseSlot, cartSlot, headerSlot, layout: layoutProp, breakpoint, className, ...viewProps }: POSLayoutProps): react_jsx_runtime.JSX.Element;
1325
+
1326
+ interface CheckoutLayoutProps extends Omit<ViewProps, 'children'> {
1327
+ summarySlot: ReactNode;
1328
+ paymentSlot: ReactNode;
1329
+ headerSlot?: ReactNode;
1330
+ layout?: 'split' | 'stacked';
1331
+ breakpoint?: number;
1332
+ className?: string;
1333
+ }
1334
+ declare function CheckoutLayout({ summarySlot, paymentSlot, headerSlot, layout: layoutProp, breakpoint, className, ...viewProps }: CheckoutLayoutProps): react_jsx_runtime.JSX.Element;
1335
+
1336
+ interface SettingsLayoutProps extends Omit<ViewProps, 'children'> {
1337
+ navSlot: ReactNode;
1338
+ contentSlot: ReactNode;
1339
+ headerSlot?: ReactNode;
1340
+ layout?: 'split' | 'stacked';
1341
+ breakpoint?: number;
1342
+ className?: string;
1343
+ }
1344
+ declare function SettingsLayout({ navSlot, contentSlot, headerSlot, layout: layoutProp, breakpoint, className, ...viewProps }: SettingsLayoutProps): react_jsx_runtime.JSX.Element;
1345
+
1346
+ /** Mirrors `LiveTabState` from `@tallyui/database`, without depending on that package. */
1347
+ type LiveTabScreenState = 'acquiring' | 'live' | 'parked' | 'blocked';
1348
+ interface LiveTabScreenProps extends Omit<ViewProps, 'children'> {
1349
+ state: LiveTabScreenState;
1350
+ /** Called when the parked screen's "Use here" button is pressed. */
1351
+ onUseHere: () => void;
1352
+ /** Called when the blocked screen's "Reload" button is pressed. */
1353
+ onReload: () => void;
1354
+ /** Title for both the parked and the blocked screen. */
1355
+ parkedTitle?: string;
1356
+ parkedBody?: string;
1357
+ useHereLabel?: string;
1358
+ blockedBody?: string;
1359
+ reloadLabel?: string;
1360
+ className?: string;
1361
+ }
1362
+ /**
1363
+ * ADR-061: what a tab shows once it is no longer the live one. Renders
1364
+ * nothing for `acquiring` and `live`.
1365
+ */
1366
+ declare function LiveTabScreen({ state, onUseHere, onReload, parkedTitle, parkedBody, useHereLabel, blockedBody, reloadLabel, className, ...viewProps }: LiveTabScreenProps): react_jsx_runtime.JSX.Element | null;
1367
+
1368
+ interface StoreSettingsChoiceScreenProps extends Omit<ViewProps, 'children'> {
1369
+ /** From `StoreSettingsError.choices`. Only the sections present are shown. */
1370
+ choices: StoreSettingsChoices;
1371
+ /** A previous choice to pre-select (for example, a stale stored one); fields that aren't in `choices` are ignored. */
1372
+ initial?: StoreSettingsChoice;
1373
+ /** Called with the full choice when the user confirms. The app persists it per store and retries `storeSettings`. */
1374
+ onSubmit: (choice: StoreSettingsChoice) => void;
1375
+ /** Display name for an ISO 3166-1 alpha-2 code. Default: `Intl.DisplayNames` in `locale`, falling back to the upper-cased code. */
1376
+ countryName?: (code: string) => string;
1377
+ locale?: string;
1378
+ title?: string;
1379
+ body?: string;
1380
+ regionLabel?: string;
1381
+ countryLabel?: string;
1382
+ channelLabel?: string;
1383
+ submitLabel?: string;
1384
+ className?: string;
1385
+ }
1386
+ /**
1387
+ * TV4: shown when `storeSettings` rejects with `choice_required`. The app
1388
+ * persists the returned choice per store and calls `storeSettings(context,
1389
+ * choice)` again; a stored choice that no longer resolves raises
1390
+ * `choice_required` again, and this screen pre-selects what still matches.
1391
+ */
1392
+ declare function StoreSettingsChoiceScreen({ choices, initial, onSubmit, countryName, locale, title, body, regionLabel, countryLabel, channelLabel, submitLabel, className, ...viewProps }: StoreSettingsChoiceScreenProps): react_jsx_runtime.JSX.Element;
363
1393
 
364
- export { CartLine, type CartLineItem, type CartLineProps, CartPanel, type CartPanelProps, CartTotal, type CartTotalProps, type ChipItem, CustomerCard, type CustomerCardProps, CustomerSelect, type CustomerSelectProps, FilterChip, FilterChipGroup, type FilterChipGroupProps, type FilterChipProps, OrderSummary, OrderSummaryLine, type OrderSummaryLineProps, type OrderSummaryPayment, type OrderSummaryProps, type PaymentMethod, PaymentMethodCard, type PaymentMethodCardProps, PaymentSelector, type PaymentSelectorProps, ProductCard, type ProductCardProps, ProductGrid, type ProductGridProps, ProductImage, type ProductImageProps, ProductPrice, type ProductPriceProps, ProductSku, type ProductSkuProps, ProductStockBadge, type ProductStockBadgeProps, ProductTitle, type ProductTitleProps, SearchInput, type SearchInputProps };
1394
+ export { APPROVAL_REQUIRED_TEXT, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cart, type CartAction, CartBar, CartLine, CartLineActions, type CartLineActionsProps, type CartLineProps, CartNoteInput, type CartNoteInputProps, CartPanel, type CartPanelProps, CartTotal, type CartTotalProps, CashCountInput, type CashCountInputProps, CashTendered, type CashTenderedProps, Catalogue, type CategoryItem, CategoryNav, type CategoryNavProps, ChangeDisplay, type ChangeDisplayProps, Checkbox, CheckoutLayout, type CheckoutLayoutProps, type ChipItem, ClosureSheet, type ClosureSheetProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxTrigger, type ConnectionStatus, ConnectorStatus, type ConnectorStatusProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CustomerCard, type CustomerCardProps, CustomerForm, type CustomerFormProps, type CustomerFormValues, CustomerOrderHistory, type CustomerOrderHistoryProps, CustomerPicker, type CustomerPickerProps, CustomerSelect, type CustomerSelectProps, type Denomination, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiscountBadge, type DiscountBadgeProps, DiscountChips, DiscountForm, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FilterChip, FilterChipGroup, type FilterChipGroupProps, type FilterChipProps, HStack, type HStackProps, HoverCard, HoverCardContent, HoverCardTrigger, Icon, IconButton, type IconButtonProps, type IconProps, Input, InputField, InputRoot, type InputRootProps, InputSlot, Label, type LabelProps, LiveTabScreen, type LiveTabScreenProps, type LiveTabScreenState, Loader, type LoaderProps, MovementSheet, type MovementSheetProps, OpenRegisterCard, type OpenRegisterCardProps, OrderCard, type OrderCardProps, OrderDetail, type OrderDetailLineItem, type OrderDetailProps, OrderList, type OrderListProps, type OrderStatus, OrderStatusBadge, type OrderStatusBadgeProps, OrderSummary, OrderSummaryLine, type OrderSummaryLineProps, type OrderSummaryPayment, type OrderSummaryProps, OrdersList, POSLayout, type POSLayoutProps, type PaymentMethod, PaymentMethodCard, type PaymentMethodCardProps, PaymentSelector, type PaymentSelectorProps, Popover, PopoverContent, PopoverTrigger, ProductCard, type ProductCardProps, ProductGrid, type ProductGridProps, ProductImage, type ProductImageProps, ProductList, type ProductListProps, ProductPrice, type ProductPriceProps, ProductSku, type ProductSkuProps, ProductStockBadge, type ProductStockBadgeProps, ProductTitle, type ProductTitleProps, ProductVariantPicker, type ProductVariantPickerProps, Progress, type ProgressProps, QuantityStepper, type QuantityStepperProps, RadioGroup, RadioGroupItem, Receipt, type ReceiptItem, ReceiptPreview, type ReceiptPreviewProps, RegisterBar, type RegisterBarPill, type RegisterBarProps, RegisterColumn, type RegisterColumnProps, RegisterCount, type RegisterCountProps, RegisterOpenClose, type RegisterOpenCloseProps, RegisterPanel, type RegisterPanelProps, RegisterPicker, type RegisterPickerProps, type RegisterPickerRegister, RegisterSummary, type RegisterSummaryProps, SearchIcon, SearchInput, type SearchInputProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps, SettingsGroup, type SettingsGroupProps, SettingsLayout, type SettingsLayoutProps, SettingsRow, type SettingsRowProps, Slider, type SliderProps, StoreSettingsChoiceScreen, type StoreSettingsChoiceScreenProps, type SvgIconProps, Switch, SyncStatus, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tender, Text, type TextProps, Textarea, type TextareaProps, Toast, ToastClose, ToastDescription, type ToastProps, ToastTitle, Toggle, ToggleGroup, ToggleGroupItem, type ToggleGroupItemProps, type ToggleGroupProps, type ToggleProps, Tooltip, TooltipContent, TooltipTrigger, type TransactionSummary, VStack, type VStackProps, type VariantOption, avatarVariants, badgeTextVariants, badgeVariants, buttonTextVariants, buttonVariants, createSvgIcon, describeRegisterBarPill, discountLabel, formatStockSyncTime, hstackVariants, iconButtonVariants, iconVariants, injectPrintStyle, loaderVariants, parseDiscount, textVariants, toastVariants, toggleTextVariants, toggleVariants, useInputContext, vstackVariants };