@veevarts/design-system 2.0.0-alpha.6 → 2.0.0-alpha.60

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 (277) hide show
  1. package/README.md +82 -0
  2. package/dist/assistant.cjs +1 -0
  3. package/dist/assistant.d.ts +10 -0
  4. package/dist/assistant.js +790 -0
  5. package/dist/components/DatePicker/DatePicker.d.ts +9 -2
  6. package/dist/components/DatePicker/defaults.d.ts +28 -0
  7. package/dist/components/DatePicker/index.d.ts +1 -0
  8. package/dist/components/Drawer/Drawer.d.ts +17 -0
  9. package/dist/components/Drawer/index.d.ts +2 -0
  10. package/dist/components/Modal/CloseButton.d.ts +18 -0
  11. package/dist/components/Modal/Modal.d.ts +15 -0
  12. package/dist/components/Modal/index.d.ts +2 -0
  13. package/dist/components/Modal/useLabelledCloseButton.d.ts +13 -0
  14. package/dist/components/Select/Select.d.ts +10 -0
  15. package/dist/components/Skeleton/Skeleton.d.ts +37 -0
  16. package/dist/components/Skeleton/index.d.ts +2 -0
  17. package/dist/components/Table/Table.d.ts +7 -0
  18. package/dist/components/Table/index.d.ts +2 -0
  19. package/dist/components/index.d.ts +9 -1
  20. package/dist/hasContent-BCRxiry-.js +1200 -0
  21. package/dist/hasContent-JfCtoDIu.cjs +1 -0
  22. package/dist/index.cjs +9 -9
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.js +10761 -6895
  25. package/dist/patterns/ActivityTimeline/ActivityTimeline.d.ts +3 -0
  26. package/dist/patterns/ActivityTimeline/index.d.ts +2 -0
  27. package/dist/patterns/ActivityTimeline/styles.d.ts +15 -0
  28. package/dist/patterns/ActivityTimeline/types.d.ts +15 -0
  29. package/dist/patterns/AdminTable/AdminTable.d.ts +1 -0
  30. package/dist/patterns/AdminTable/styles.d.ts +8 -1
  31. package/dist/patterns/AdminTextField/AdminTextField.d.ts +4 -44
  32. package/dist/patterns/AdminTextField/index.d.ts +2 -2
  33. package/dist/patterns/AdminTextField/styles.d.ts +29 -0
  34. package/dist/patterns/AdminTextField/types.d.ts +78 -0
  35. package/dist/patterns/AdminToolbar/AdminToolbar.d.ts +13 -2
  36. package/dist/patterns/AdminToolbar/index.d.ts +1 -0
  37. package/dist/patterns/AdminToolbar/styles.d.ts +49 -0
  38. package/dist/patterns/AdminToolbar/types.d.ts +2 -0
  39. package/dist/patterns/AmountList/AmountList.d.ts +3 -0
  40. package/dist/patterns/AmountList/index.d.ts +2 -0
  41. package/dist/patterns/AmountList/styles.d.ts +23 -0
  42. package/dist/patterns/AmountList/types.d.ts +26 -0
  43. package/dist/patterns/AssistantActivity/AssistantActivity.d.ts +15 -0
  44. package/dist/patterns/AssistantActivity/formatAssistantDuration.d.ts +10 -0
  45. package/dist/patterns/AssistantActivity/index.d.ts +3 -0
  46. package/dist/patterns/AssistantActivity/styles.d.ts +31 -0
  47. package/dist/patterns/AssistantActivity/types.d.ts +42 -0
  48. package/dist/patterns/AssistantComposer/AssistantComposer.d.ts +15 -0
  49. package/dist/patterns/AssistantComposer/index.d.ts +2 -0
  50. package/dist/patterns/AssistantComposer/styles.d.ts +33 -0
  51. package/dist/patterns/AssistantComposer/types.d.ts +62 -0
  52. package/dist/patterns/AssistantMessage/AssistantMessage.d.ts +17 -0
  53. package/dist/patterns/AssistantMessage/index.d.ts +2 -0
  54. package/dist/patterns/AssistantMessage/styles.d.ts +45 -0
  55. package/dist/patterns/AssistantMessage/types.d.ts +84 -0
  56. package/dist/patterns/AssistantNotice/AssistantNotice.d.ts +18 -0
  57. package/dist/patterns/AssistantNotice/index.d.ts +2 -0
  58. package/dist/patterns/AssistantNotice/styles.d.ts +49 -0
  59. package/dist/patterns/AssistantNotice/types.d.ts +58 -0
  60. package/dist/patterns/CardList/CardList.d.ts +3 -0
  61. package/dist/patterns/CardList/index.d.ts +2 -0
  62. package/dist/patterns/CardList/styles.d.ts +20 -0
  63. package/dist/patterns/CardList/types.d.ts +20 -0
  64. package/dist/patterns/CardStack/CardStack.d.ts +7 -0
  65. package/dist/patterns/CardStack/index.d.ts +2 -0
  66. package/dist/patterns/CardStack/styles.d.ts +2 -0
  67. package/dist/patterns/CashTenderForm/types.d.ts +6 -0
  68. package/dist/patterns/CellText/CellText.d.ts +16 -0
  69. package/dist/patterns/CellText/index.d.ts +2 -0
  70. package/dist/patterns/CellText/styles.d.ts +7 -0
  71. package/dist/patterns/DiscardGuard/DiscardGuard.d.ts +23 -0
  72. package/dist/patterns/DiscardGuard/context.d.ts +25 -0
  73. package/dist/patterns/DiscardGuard/index.d.ts +6 -0
  74. package/dist/patterns/DiscardGuard/useDiscardGuard.d.ts +38 -0
  75. package/dist/patterns/DonationAmounts/index.d.ts +1 -1
  76. package/dist/patterns/DonationAmounts/styles.d.ts +51 -0
  77. package/dist/patterns/DonationAmounts/types.d.ts +79 -1
  78. package/dist/patterns/DonationAmounts/utils/currency.d.ts +23 -3
  79. package/dist/patterns/EntityRow/EntityList.d.ts +15 -0
  80. package/dist/patterns/EntityRow/EntityRow.d.ts +3 -0
  81. package/dist/patterns/EntityRow/context.d.ts +2 -0
  82. package/dist/patterns/EntityRow/icons.d.ts +3 -0
  83. package/dist/patterns/EntityRow/index.d.ts +3 -0
  84. package/dist/patterns/EntityRow/initials.d.ts +6 -0
  85. package/dist/patterns/EntityRow/styles.d.ts +74 -0
  86. package/dist/patterns/EntityRow/types.d.ts +125 -0
  87. package/dist/patterns/ExpandableTable/ExpandableTable.d.ts +6 -0
  88. package/dist/patterns/ExpandableTable/index.d.ts +2 -0
  89. package/dist/patterns/ExpandableTable/styles.d.ts +43 -0
  90. package/dist/patterns/ExpandableTable/types.d.ts +99 -0
  91. package/dist/patterns/FeedbackState/FeedbackState.d.ts +1 -1
  92. package/dist/patterns/FeedbackState/type.d.ts +11 -1
  93. package/dist/patterns/FilterSelect/FilterSelect.d.ts +3 -0
  94. package/dist/patterns/FilterSelect/FilterSelectGroup.d.ts +3 -0
  95. package/dist/patterns/FilterSelect/index.d.ts +3 -0
  96. package/dist/patterns/FilterSelect/styles.d.ts +17 -0
  97. package/dist/patterns/FilterSelect/types.d.ts +19 -0
  98. package/dist/patterns/InlineConfirm/InlineConfirm.d.ts +38 -0
  99. package/dist/patterns/InlineConfirm/index.d.ts +2 -0
  100. package/dist/patterns/InlineConfirm/styles.d.ts +16 -0
  101. package/dist/patterns/InstallmentFundAssignment/InstallmentFundAssignment.d.ts +1 -1
  102. package/dist/patterns/InstallmentFundAssignment/types.d.ts +3 -0
  103. package/dist/patterns/InstallmentSchedule/InstallmentSchedule.d.ts +1 -1
  104. package/dist/patterns/InstallmentSchedule/InstallmentTable.d.ts +1 -1
  105. package/dist/patterns/InstallmentSchedule/index.d.ts +1 -1
  106. package/dist/patterns/InstallmentSchedule/types.d.ts +62 -3
  107. package/dist/patterns/InstallmentSchedule/utils.d.ts +33 -0
  108. package/dist/patterns/KeyValueChip/KeyValueChip.d.ts +1 -0
  109. package/dist/patterns/KeyValueRows/KeyValueRows.d.ts +13 -0
  110. package/dist/patterns/KeyValueRows/index.d.ts +2 -0
  111. package/dist/patterns/KeyValueRows/styles.d.ts +8 -0
  112. package/dist/patterns/LineItemRows/LineItemRows.d.ts +17 -0
  113. package/dist/patterns/LineItemRows/index.d.ts +2 -0
  114. package/dist/patterns/LineItemRows/styles.d.ts +13 -0
  115. package/dist/patterns/ListPanel/ListPanel.d.ts +2 -0
  116. package/dist/patterns/LoadMoreFooter/LoadMoreFooter.d.ts +3 -0
  117. package/dist/patterns/LoadMoreFooter/index.d.ts +2 -0
  118. package/dist/patterns/LoadMoreFooter/styles.d.ts +7 -0
  119. package/dist/patterns/LoadMoreFooter/types.d.ts +10 -0
  120. package/dist/patterns/MetaCard/types.d.ts +2 -0
  121. package/dist/patterns/ModalPanels/ModalPanels.d.ts +35 -0
  122. package/dist/patterns/ModalPanels/context.d.ts +20 -0
  123. package/dist/patterns/ModalPanels/focus.d.ts +44 -0
  124. package/dist/patterns/ModalPanels/index.d.ts +6 -0
  125. package/dist/patterns/ModalPanels/styles.d.ts +13 -0
  126. package/dist/patterns/ModalPanels/useModalPanels.d.ts +30 -0
  127. package/dist/patterns/NeedsFixDot/NeedsFixDot.d.ts +16 -0
  128. package/dist/patterns/NeedsFixDot/firstNeedsFixKey.d.ts +18 -0
  129. package/dist/patterns/NeedsFixDot/index.d.ts +4 -0
  130. package/dist/patterns/NeedsFixDot/styles.d.ts +20 -0
  131. package/dist/patterns/Notice/Notice.d.ts +16 -0
  132. package/dist/patterns/Notice/index.d.ts +2 -0
  133. package/dist/patterns/Notice/styles.d.ts +35 -0
  134. package/dist/patterns/Notice/type.d.ts +39 -0
  135. package/dist/patterns/OutcomeView/index.d.ts +1 -1
  136. package/dist/patterns/OutcomeView/types.d.ts +110 -3
  137. package/dist/patterns/PageHeader/PageHeader.d.ts +1 -0
  138. package/dist/patterns/PaginationSummary/PaginationSummary.d.ts +12 -0
  139. package/dist/patterns/PaginationSummary/index.d.ts +1 -1
  140. package/dist/patterns/PaymentSubAmountInput/PaymentSubAmountInput.d.ts +2 -0
  141. package/dist/patterns/PillTabs/PillTabs.d.ts +3 -0
  142. package/dist/patterns/PillTabs/ids.d.ts +9 -0
  143. package/dist/patterns/PillTabs/index.d.ts +3 -0
  144. package/dist/patterns/PillTabs/styles.d.ts +20 -0
  145. package/dist/patterns/PillTabs/types.d.ts +21 -0
  146. package/dist/patterns/{CatalogItemCard → Programs/CatalogItemCard}/type.d.ts +1 -1
  147. package/dist/patterns/{EventDetails → Programs/EventDetails}/EventDetails.d.ts +3 -1
  148. package/dist/patterns/{OfferCard → Programs/OfferCard}/OfferCard.d.ts +1 -1
  149. package/dist/patterns/{OfferCard → Programs/OfferCard}/types.d.ts +7 -0
  150. package/dist/patterns/Programs/ProgramListItem/ProgramListItem.d.ts +17 -0
  151. package/dist/patterns/Programs/ProgramListItem/index.d.ts +2 -0
  152. package/dist/patterns/Programs/index.d.ts +5 -0
  153. package/dist/patterns/ReasonSelect/types.d.ts +1 -0
  154. package/dist/patterns/RecordCard/RecordCard.d.ts +3 -0
  155. package/dist/patterns/RecordCard/index.d.ts +2 -0
  156. package/dist/patterns/RecordCard/styles.d.ts +16 -0
  157. package/dist/patterns/RecordCard/types.d.ts +22 -0
  158. package/dist/patterns/RecordHeader/RecordHeader.d.ts +3 -0
  159. package/dist/patterns/RecordHeader/index.d.ts +2 -0
  160. package/dist/patterns/RecordHeader/styles.d.ts +43 -0
  161. package/dist/patterns/RecordHeader/types.d.ts +30 -0
  162. package/dist/patterns/RecordLayout/RecordLayout.d.ts +3 -0
  163. package/dist/patterns/RecordLayout/index.d.ts +2 -0
  164. package/dist/patterns/RecordLayout/styles.d.ts +8 -0
  165. package/dist/patterns/RecordLayout/types.d.ts +6 -0
  166. package/dist/patterns/RecordTotals/RecordTotals.d.ts +19 -0
  167. package/dist/patterns/RecordTotals/index.d.ts +2 -0
  168. package/dist/patterns/RecordTotals/styles.d.ts +19 -0
  169. package/dist/patterns/RefundMethodCards/RefundMethodCards.d.ts +4 -0
  170. package/dist/patterns/RefundMethodCards/index.d.ts +2 -0
  171. package/dist/patterns/RefundMethodCards/styles.d.ts +59 -0
  172. package/dist/patterns/RefundMethodCards/types.d.ts +72 -0
  173. package/dist/patterns/RefundProgressList/RefundProgressList.d.ts +4 -0
  174. package/dist/patterns/RefundProgressList/index.d.ts +2 -0
  175. package/dist/patterns/RefundProgressList/styles.d.ts +44 -0
  176. package/dist/patterns/RefundProgressList/types.d.ts +37 -0
  177. package/dist/patterns/RelatedRecordList/RelatedRecordList.d.ts +3 -0
  178. package/dist/patterns/RelatedRecordList/index.d.ts +2 -0
  179. package/dist/patterns/RelatedRecordList/styles.d.ts +19 -0
  180. package/dist/patterns/RelatedRecordList/types.d.ts +17 -0
  181. package/dist/patterns/ScrollToLatest/ScrollToLatest.d.ts +18 -0
  182. package/dist/patterns/ScrollToLatest/index.d.ts +2 -0
  183. package/dist/patterns/ScrollToLatest/styles.d.ts +11 -0
  184. package/dist/patterns/ScrollToLatest/types.d.ts +36 -0
  185. package/dist/patterns/SessionExpiredCard/SessionExpiredCard.d.ts +14 -0
  186. package/dist/patterns/SessionExpiredCard/index.d.ts +2 -0
  187. package/dist/patterns/SessionExpiredCard/type.d.ts +6 -0
  188. package/dist/patterns/SplitPaymentSummary/index.d.ts +1 -1
  189. package/dist/patterns/SplitPaymentSummary/types.d.ts +18 -0
  190. package/dist/patterns/StatTiles/StatTiles.d.ts +3 -0
  191. package/dist/patterns/StatTiles/index.d.ts +2 -0
  192. package/dist/patterns/StatTiles/styles.d.ts +8 -0
  193. package/dist/patterns/StatTiles/types.d.ts +12 -0
  194. package/dist/patterns/StatusChip/StatusChip.d.ts +3 -3
  195. package/dist/patterns/StepProgress/StepProgress.d.ts +4 -0
  196. package/dist/patterns/StepProgress/index.d.ts +2 -0
  197. package/dist/patterns/StepProgress/styles.d.ts +29 -0
  198. package/dist/patterns/StepProgress/types.d.ts +43 -0
  199. package/dist/patterns/Summary/components/ActionBar.d.ts +2 -0
  200. package/dist/patterns/Summary/components/GrandTotalRow.d.ts +1 -0
  201. package/dist/patterns/Summary/components/ItemRow.d.ts +1 -0
  202. package/dist/patterns/Summary/components/SummaryBody.d.ts +4 -1
  203. package/dist/patterns/Summary/components/TotalsLineRow.d.ts +3 -2
  204. package/dist/patterns/Summary/types.d.ts +51 -9
  205. package/dist/patterns/TableSkeleton/TableSkeleton.d.ts +1 -0
  206. package/dist/patterns/TileSelect/TileSelect.d.ts +2 -37
  207. package/dist/patterns/TileSelect/index.d.ts +1 -1
  208. package/dist/patterns/TileSelect/styles.d.ts +56 -0
  209. package/dist/patterns/TileSelect/types.d.ts +140 -0
  210. package/dist/patterns/TimeField/TimeField.d.ts +6 -0
  211. package/dist/patterns/TimeField/index.d.ts +3 -0
  212. package/dist/patterns/TimeField/time.d.ts +40 -0
  213. package/dist/patterns/TimeField/types.d.ts +77 -0
  214. package/dist/patterns/ToolbarButton/ToolbarButton.d.ts +2 -0
  215. package/dist/patterns/UnderlineTabs/UnderlineTabs.d.ts +40 -1
  216. package/dist/patterns/UnderlineTabs/index.d.ts +1 -1
  217. package/dist/patterns/UnderlineTabs/styles.d.ts +21 -0
  218. package/dist/patterns/VerticalSteps/StepPager.d.ts +6 -0
  219. package/dist/patterns/VerticalSteps/StepsReadiness.d.ts +15 -0
  220. package/dist/patterns/VerticalSteps/VerticalSteps.d.ts +6 -0
  221. package/dist/patterns/VerticalSteps/index.d.ts +4 -0
  222. package/dist/patterns/VerticalSteps/styles.d.ts +54 -0
  223. package/dist/patterns/VerticalSteps/types.d.ts +100 -0
  224. package/dist/patterns/WizardShell/index.d.ts +1 -1
  225. package/dist/patterns/WizardShell/types.d.ts +9 -1
  226. package/dist/patterns/grid-columns.d.ts +1 -1
  227. package/dist/patterns/index.d.ts +79 -19
  228. package/dist/patterns/shared/hasContent.d.ts +2 -0
  229. package/dist/patterns/shared/index.d.ts +1 -0
  230. package/dist/patterns/shared/motion.d.ts +6 -0
  231. package/dist/patterns/shared/recordTone.d.ts +9 -0
  232. package/dist/patterns/shared/rem.d.ts +4 -0
  233. package/dist/patterns/shared/useContainerWidth.d.ts +6 -0
  234. package/dist/patterns/shared/useDecimalDraft.d.ts +33 -0
  235. package/dist/patterns/shared/usePrefillEdits.d.ts +7 -0
  236. package/dist/providers/DensityProvider.d.ts +7 -0
  237. package/dist/providers/HeroUIProvider.d.ts +20 -1
  238. package/dist/providers/ToastProvider.d.ts +21 -0
  239. package/dist/providers/close-label-context.d.ts +18 -0
  240. package/dist/providers/density.d.ts +17 -0
  241. package/dist/providers/index.d.ts +6 -0
  242. package/dist/tailwind/index.cjs +107 -5
  243. package/dist/tailwind/index.d.ts +61 -0
  244. package/dist/tailwind/index.mjs +104 -5
  245. package/dist/test/ReducedMotion.d.ts +4 -0
  246. package/dist/test/RootFontSize.d.ts +5 -0
  247. package/dist/test/backdrop.d.ts +12 -0
  248. package/dist/test/container-width.d.ts +14 -0
  249. package/dist/test/contrast.d.ts +1 -0
  250. package/dist/test/px-class-names.d.ts +1 -0
  251. package/dist/test/px-classes.d.ts +3 -0
  252. package/dist/test/reducedMotionCss.d.ts +40 -0
  253. package/dist/test/root-font-size.d.ts +8 -0
  254. package/dist/tokens/assistant-surface.d.ts +66 -0
  255. package/dist/tokens/index.d.ts +2 -0
  256. package/dist/tokens/pos-surface.d.ts +23 -4
  257. package/package.json +22 -3
  258. /package/dist/patterns/{CatalogItemCard → Programs/CatalogItemCard}/CatalogItemCard.d.ts +0 -0
  259. /package/dist/patterns/{CatalogItemCard → Programs/CatalogItemCard}/index.d.ts +0 -0
  260. /package/dist/patterns/{EventDetails → Programs/EventDetails}/index.d.ts +0 -0
  261. /package/dist/patterns/{OfferCard → Programs/OfferCard}/examples/CustomQuantitySelectorExample.d.ts +0 -0
  262. /package/dist/patterns/{OfferCard → Programs/OfferCard}/examples/ListWithEurosCurrencyExample.d.ts +0 -0
  263. /package/dist/patterns/{OfferCard → Programs/OfferCard}/examples/ListWithoutAnimationExample.d.ts +0 -0
  264. /package/dist/patterns/{OfferCard → Programs/OfferCard}/examples/index.d.ts +0 -0
  265. /package/dist/patterns/{OfferCard → Programs/OfferCard}/index.d.ts +0 -0
  266. /package/dist/patterns/{OfferCard → Programs/OfferCard}/utils/animations.d.ts +0 -0
  267. /package/dist/patterns/{OfferCard → Programs/OfferCard}/utils/currency.d.ts +0 -0
  268. /package/dist/patterns/{OfferCard → Programs/OfferCard}/utils/index.d.ts +0 -0
  269. /package/dist/patterns/{OfferCard → Programs/OfferCard}/utils/offers.d.ts +0 -0
  270. /package/dist/patterns/{OfferCard → Programs/OfferCard}/variants/OfferCardEmpty.d.ts +0 -0
  271. /package/dist/patterns/{OfferCard → Programs/OfferCard}/variants/OfferCardError.d.ts +0 -0
  272. /package/dist/patterns/{OfferCard → Programs/OfferCard}/variants/OfferCardList.d.ts +0 -0
  273. /package/dist/patterns/{OfferCard → Programs/OfferCard}/variants/OfferCardSkeleton.d.ts +0 -0
  274. /package/dist/patterns/{OfferCard → Programs/OfferCard}/variants/index.d.ts +0 -0
  275. /package/dist/patterns/{SessionTimeline → Programs/SessionTimeline}/SessionTimeline.d.ts +0 -0
  276. /package/dist/patterns/{SessionTimeline → Programs/SessionTimeline}/index.d.ts +0 -0
  277. /package/dist/patterns/{SessionTimeline → Programs/SessionTimeline}/type.d.ts +0 -0
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { Money } from '../../utils/money';
3
+ import { RecordTone } from '../shared/recordTone';
3
4
  export type { Money } from '../../utils/money';
4
5
  /**
5
6
  * A generic, parametrizable detail row rendered under a line item — an icon +
@@ -56,6 +57,21 @@ export interface SummaryLineItem {
56
57
  * show an auto-renewal note and a pay-by-installments line.
57
58
  */
58
59
  details?: SummaryItemDetail[];
60
+ /** Pre-formatted list price, rendered struck through before `amount`. */
61
+ originalAmount?: string;
62
+ /** Node rendered under the amount, right-aligned (e.g. a `StatusChip`). */
63
+ trailing?: ReactNode;
64
+ /** Tints the whole row with the tone's fill. */
65
+ tone?: RecordTone;
66
+ /** Dims the price while it is being recalculated (e.g. a quantity change not yet confirmed). */
67
+ pending?: boolean;
68
+ /**
69
+ * `false` hides this row's remove (trash) control even when `onRemoveItem`
70
+ * is wired and `showRemoveButton` is on — for a line the host changes
71
+ * through another flow (the register's own membership line goes through
72
+ * "Change membership"). Applies to nested rows one by one. Default `true`.
73
+ */
74
+ removable?: boolean;
59
75
  }
60
76
  /** The "Pay Service fee" radio-toggle row. */
61
77
  export interface SummaryServiceFee {
@@ -66,18 +82,20 @@ export interface SummaryServiceFee {
66
82
  /** Fires when the row/radio is toggled. */
67
83
  onToggle?: () => void;
68
84
  }
69
- /** A plain totals row (Subtotal, Taxes). */
85
+ /** A plain totals row (Subtotal, Discounts, Taxes). */
70
86
  export interface SummaryTotalRow {
71
87
  /** Stable key for `data-testid` (e.g. 'subtotal', 'taxes'). */
72
88
  key: string;
73
89
  label: ReactNode;
74
90
  amount: Money;
91
+ /** Stable id; when set and `onRemoveTotalRow` exists, the row shows the remove control (e.g. one row per removable discount). */
92
+ id?: string;
93
+ /** Tone of the amount: `'success'` paints it in the success color (e.g. a discount); default inherits the row tone. */
94
+ amountTone?: 'default' | 'success';
75
95
  }
76
96
  /**
77
- * A post-total row — the same flat shape as {@link SummaryTotalRow}, plus an
78
- * optional `id` that (together with `onRemovePostTotalRow`) enables the same
79
- * trash remove control the line items use. Kept as its own interface so the
80
- * pre-total `rows` — where an id/remove has no meaning — stay untouched.
97
+ * A post-total row — the same flat shape as {@link SummaryTotalRow}; rows with
98
+ * an `id` show the trash remove control when `onRemovePostTotalRow` exists.
81
99
  */
82
100
  export interface SummaryPostTotalRow extends SummaryTotalRow {
83
101
  /** Stable id; when set and `onRemovePostTotalRow` exists, the row shows the remove control. */
@@ -94,6 +112,8 @@ export interface SummaryPrimaryAction {
94
112
  export interface SummaryLabels {
95
113
  /** Aria label for the per-item remove control. Default "Remove item". */
96
114
  removeAriaLabel?: string;
115
+ /** Aria label for the per-totals-row remove control. Default "Remove discount". */
116
+ removeTotalRowAriaLabel?: string;
97
117
  /** Aria label for the per-post-total-row remove control. Default "Remove applied code". */
98
118
  removePostTotalRowAriaLabel?: string;
99
119
  /** Aria label for the collapse/expand press target. Default "Toggle summary". */
@@ -132,6 +152,8 @@ export interface SummaryClassNames {
132
152
  cta?: string;
133
153
  /** The caption rendered under the CTA. */
134
154
  ctaCaption?: string;
155
+ /** The error rendered next to the CTA. */
156
+ ctaError?: string;
135
157
  /** Mobile compact bottom-bar. */
136
158
  mobileBar?: string;
137
159
  /** Mobile cart button. */
@@ -150,7 +172,11 @@ export interface SummaryProps {
150
172
  items?: SummaryLineItem[];
151
173
  /** Optional "Pay Service fee" radio-toggle row. */
152
174
  serviceFee?: SummaryServiceFee;
153
- /** Plain totals rows rendered above the Total (Subtotal, Taxes). */
175
+ /**
176
+ * Plain totals rows rendered above the Total (Subtotal, Discounts, Taxes).
177
+ * Rows with an `id` show the trash remove control when `onRemoveTotalRow`
178
+ * is provided (same gating as the item remove, incl. `showRemoveButton`).
179
+ */
154
180
  rows?: SummaryTotalRow[];
155
181
  /** The emphasized Total row (label default "Total"). */
156
182
  total: {
@@ -182,9 +208,16 @@ export interface SummaryProps {
182
208
  */
183
209
  ctaCaption?: ReactNode;
184
210
  /**
185
- * Whether the remove (trash) controls are shown — per-item and
186
- * per-post-total-row alike. Defaults to `true`; pass `false` to hide them
187
- * even when `onRemoveItem` / `onRemovePostTotalRow` are wired. Independent
211
+ * An optional error (e.g. a rejected request) shown in danger text next to
212
+ * the CTA: under it in the card layout, ABOVE it in the mobile bottom bar,
213
+ * where the sticky CTA sits at the screen edge and a message under it would
214
+ * hug the edge and sit beneath the thumb. Rendered as `role="alert"`.
215
+ */
216
+ ctaError?: ReactNode;
217
+ /**
218
+ * Whether the remove (trash) controls are shown — per-item, per-totals-row
219
+ * and per-post-total-row alike. Defaults to `true`; pass `false` to hide them
220
+ * even when `onRemoveItem` / `onRemoveTotalRow` / `onRemovePostTotalRow` are wired. Independent
188
221
  * of the handlers so a host can keep them but suppress the controls.
189
222
  */
190
223
  showRemoveButton?: boolean;
@@ -213,6 +246,8 @@ export interface SummaryProps {
213
246
  primaryAction?: SummaryPrimaryAction;
214
247
  /** When provided, item rows show a red trash remove control. */
215
248
  onRemoveItem?: (id: string) => void;
249
+ /** When provided, totals rows (above the Total) with an `id` show the same red trash remove control. */
250
+ onRemoveTotalRow?: (id: string) => void;
216
251
  /** When provided, post-total rows with an `id` show the same red trash remove control. */
217
252
  onRemovePostTotalRow?: (id: string) => void;
218
253
  /**
@@ -231,6 +266,13 @@ export interface SummaryProps {
231
266
  /** Rendered when there are no items. */
232
267
  emptyState?: ReactNode;
233
268
  labels?: SummaryLabels;
269
+ /**
270
+ * Visual density. `'compact'` drops the card's title and the prices row, removes the
271
+ * `{qty} x` prefix, separates items with dividers, renders the totals rows
272
+ * small and muted and a smaller Total without a divider above it (e.g. a POS
273
+ * cart panel). Defaults to `'default'`.
274
+ */
275
+ density?: 'default' | 'compact';
234
276
  'data-testid'?: string;
235
277
  className?: string;
236
278
  /** Per-slot class overrides (Design-System `classNames` convention). */
@@ -25,6 +25,7 @@ export interface TableSkeletonProps {
25
25
  barHeight?: number;
26
26
  /** Right-aligns the last column's bar, for a trailing numeric or actions column. */
27
27
  alignLastRight?: boolean;
28
+ appearance?: 'pulse' | 'shimmer';
28
29
  className?: string;
29
30
  classNames?: TableSkeletonClassNames;
30
31
  'data-testid'?: string;
@@ -1,39 +1,4 @@
1
1
  import { default as React } from 'react';
2
- export interface TileSelectOption {
3
- /** Stable identifier returned via `onSelect`. */
4
- key: string;
5
- /** Visible label rendered under the icon. */
6
- label: string;
7
- /**
8
- * Icon: iconify name (`'lucide:credit-card'`) or a `ReactNode` for
9
- * fully-custom SVGs.
10
- */
11
- icon: string | React.ReactNode;
12
- /** Disable the tile (greyed out, no click). */
13
- isDisabled?: boolean;
14
- /** Override per-tile test id; defaults to `${dataTestId}-${key}`. */
15
- 'data-testid'?: string;
16
- }
17
- export interface TileSelectProps {
18
- /** Options to render in order. */
19
- options: readonly TileSelectOption[];
20
- /** Currently selected option `key`. `null` = no selection. */
21
- selectedKey: string | null;
22
- /** Fires when a tile is selected. */
23
- onSelect: (key: string) => void;
24
- /** Optional heading rendered above the grid. */
25
- heading?: string;
26
- /**
27
- * `aria-label` for the wrapping group when `heading` is omitted.
28
- * Translatable. Default `'Select an option'`. When `heading` is
29
- * provided this prop is ignored — the grid is labelled by the
30
- * heading element.
31
- */
32
- ariaLabel?: string;
33
- /** Grid columns on >= sm. Default `3`. Mobile collapses to 2. */
34
- columnsDesktop?: 2 | 3 | 4;
35
- columnsMobile?: 1 | 2;
36
- className?: string;
37
- 'data-testid'?: string;
38
- }
2
+ import { TileSelectProps } from './types';
3
+ export type { TileSelectOption, TileSelectProps, TileSelectSize, TileSelectVariant } from './types';
39
4
  export declare const TileSelect: React.FC<TileSelectProps>;
@@ -1,2 +1,2 @@
1
1
  export { TileSelect } from './TileSelect';
2
- export type { TileSelectProps, TileSelectOption } from './TileSelect';
2
+ export type { TileSelectProps, TileSelectOption, TileSelectVariant, TileSelectSize } from './types';
@@ -0,0 +1,56 @@
1
+ /**
2
+ * `size="sm"` tile classes (`.tender-tile`). rem only: 1px border + `py-2.5` +
3
+ * 17px icon + 5px gap + 14px label line + `py-2.5` + 1px border = the
4
+ * mockup's 58px. Reduced motion (OS or the POS override on `<html>`) drops
5
+ * the colour easing and the press scale.
6
+ */
7
+ export declare const smallTileClass: {
8
+ readonly grid: "gap-2";
9
+ readonly tile: "flex flex-col items-center justify-center gap-[0.3125rem] h-auto min-h-0 min-w-0 rounded-xl border px-1 py-2.5 transition-colors motion-reduce:transition-none [html[data-pos-reduce-motion=true]_&]:transition-none motion-reduce:data-[pressed=true]:scale-100 [html[data-pos-reduce-motion=true]_&]:data-[pressed=true]:scale-100";
10
+ readonly idle: "border-pos-field bg-white text-pos-ink data-[hover=true]:border-pos-line-strong data-[hover=true]:bg-white";
11
+ readonly active: "border-primary bg-primary/[.09] text-primary data-[hover=true]:bg-primary/[.09]";
12
+ readonly icon: "flex h-[1.0625rem] w-[1.0625rem] items-center justify-center";
13
+ readonly label: "text-[0.71875rem] font-medium leading-[0.875rem]";
14
+ /** `isLocked`: dashed and muted, and inert under the pointer. `pos-muted` is 4.83:1 on white. */
15
+ readonly locked: "cursor-not-allowed border-dashed border-pos-line-strong bg-white text-pos-muted data-[hover=true]:border-pos-line-strong data-[hover=true]:bg-white data-[pressed=true]:scale-100";
16
+ };
17
+ /**
18
+ * `size="md"` tile classes.
19
+ *
20
+ * Sized to the Figma spec for the payments-drop-in method picker (PP-1154):
21
+ * 48px inner content (icon 20 + gap 8 + label 20) + 32px vertical padding
22
+ * (`py-4`) = 80px. `h-auto` lets the tile grow past that floor when content
23
+ * wraps (localised long labels, a description).
24
+ *
25
+ * `bg-transparent` suppresses HeroUI's own fill so the active and hover
26
+ * surfaces come from these classes alone.
27
+ */
28
+ export declare const mediumTileClass: {
29
+ readonly tile: "flex flex-col items-center justify-center gap-2 h-auto min-h-20 px-4 py-4 border bg-transparent transition-colors motion-reduce:transition-none [html[data-pos-reduce-motion=true]_&]:transition-none";
30
+ readonly idle: "border-default-200 text-default-800 hover:bg-default-50";
31
+ readonly active: "border-primary bg-primary-50 text-primary";
32
+ readonly label: "text-sm font-medium";
33
+ /**
34
+ * The grid holds a description or a badge: every tile left-aligns, with
35
+ * the icon and badge on one row, then the label, then the description.
36
+ */
37
+ readonly detailed: "items-start justify-start gap-1 whitespace-normal text-left";
38
+ /** Wraps the badge under the icon rather than overflowing a narrow tile. */
39
+ readonly header: "mb-1 flex w-full flex-wrap items-start justify-between gap-2";
40
+ /**
41
+ * `default-600`, not 500: on the picked tile's `primary-50` tint the 500
42
+ * measured 4.498:1, a hair under the floor.
43
+ */
44
+ readonly description: "text-xs font-normal leading-snug text-default-600";
45
+ /** The locked tile's description, muted with the rest of it (4.6:1 on `default-50`). */
46
+ readonly lockedDescription: "text-default-500";
47
+ /** `default-600` on `default-100`: about 7:1. */
48
+ readonly badge: "shrink-0 whitespace-nowrap rounded-full bg-default-100 px-2 py-0.5 text-[11px] font-medium leading-4 text-default-600";
49
+ /**
50
+ * `isLocked`: dashed, muted, inert under the pointer. Muted by color, not
51
+ * opacity, so the text keeps its contrast: `default-500` on `default-50`
52
+ * measures 4.6:1. HeroUI's hover dim and press scale are switched off.
53
+ */
54
+ readonly locked: "cursor-not-allowed border-dashed border-default-300 bg-default-50 text-default-500 hover:bg-default-50 data-[hover=true]:opacity-100 data-[pressed=true]:scale-100";
55
+ readonly lockedIcon: "text-default-400";
56
+ };
@@ -0,0 +1,140 @@
1
+ import { default as React } from 'react';
2
+ export interface TileSelectOption {
3
+ /** Stable identifier returned via `onSelect`. */
4
+ key: string;
5
+ /** Visible label rendered under the icon. */
6
+ label: string;
7
+ /**
8
+ * Icon: iconify name (`'lucide:credit-card'`) or a `ReactNode` for
9
+ * fully-custom SVGs.
10
+ */
11
+ icon: string | React.ReactNode;
12
+ /**
13
+ * Disable the tile (greyed out, no click). The tile is `disabled`, so it
14
+ * also leaves the tab order. For an option that exists but cannot be
15
+ * picked yet, use `isLocked`.
16
+ */
17
+ isDisabled?: boolean;
18
+ /**
19
+ * One line of supporting copy. `variant="compact"` renders it for an
20
+ * option that ended up in the "More" menu, where the label alone
21
+ * ("Other") rarely says enough. `variant="tiles"` renders it only in a
22
+ * grid opted in to the detailed tile (some option has a `badge` or is
23
+ * `isLocked`): on the `size="md"` tile under the label, and as the item
24
+ * description in the small-viewport `<Select>`. On its own it changes
25
+ * nothing in the tile grid.
26
+ */
27
+ description?: string;
28
+ /**
29
+ * A short tag on the tile's top row: "Coming soon", "New".
30
+ * `variant="tiles"` at `size="md"`; also the end of its `<Select>` item.
31
+ * Opts the grid in to the detailed tile.
32
+ */
33
+ badge?: string;
34
+ /**
35
+ * Shown, not pickable: a dashed, muted tile that ignores presses. Unlike
36
+ * `isDisabled` it stays focusable and is `aria-disabled`, so keyboard and
37
+ * screen-reader users reach it and hear `lockedReason`. `variant="compact"`
38
+ * and the small-viewport `<Select>` treat it as disabled. Opts the grid in
39
+ * to the detailed tile.
40
+ */
41
+ isLocked?: boolean;
42
+ /** What a locked tile announces. Defaults to `badge`. */
43
+ lockedReason?: string;
44
+ /**
45
+ * `variant="compact"` only: keep this option in the "More" menu at
46
+ * every width, however much room the track has. For an action that is
47
+ * secondary by decision rather than by measurement — a payments picker
48
+ * that wants "Other" one click away so the methods people actually
49
+ * reach for own the row.
50
+ *
51
+ * The menu is rendered whenever an option asks for it, so this also
52
+ * overrides the rule that suppresses a menu holding a single option.
53
+ */
54
+ alwaysInMenu?: boolean;
55
+ /**
56
+ * `variant="compact"` only: what this option is worth keeping on the
57
+ * track. When the pill runs out of room the LOWEST priority folds into
58
+ * the menu first; equal priorities fold from the end of the list.
59
+ * Default `0`.
60
+ *
61
+ * Display order is untouched — this decides what survives a squeeze,
62
+ * not where anything sits. A payments picker can list "Other" before
63
+ * "Split payment" and still lose "Other" first, because splitting a
64
+ * payment is the rarer, weightier thing to reach for.
65
+ */
66
+ priority?: number;
67
+ /** Override per-tile test id; defaults to `${dataTestId}-${key}`. */
68
+ 'data-testid'?: string;
69
+ }
70
+ /**
71
+ * `'tiles'` — the icon-over-label grid, with a `<Select>` dropdown under
72
+ * `md`. The picker is the subject of the step.
73
+ *
74
+ * `'compact'` — a segmented pill of label-only toggles at every width,
75
+ * keeping every option the track can hold and folding the rest into a
76
+ * "More" menu rather than scrolling. The picker is a control among others.
77
+ */
78
+ export type TileSelectVariant = 'tiles' | 'compact';
79
+ /**
80
+ * Tile size for `variant="tiles"`.
81
+ *
82
+ * `'md'` (default) — the 80px icon-over-label tile of the payments drop-in.
83
+ *
84
+ * `'sm'` — the 58px tender tile of the Quick Donation / Quick Membership
85
+ * mockups (`.tender-tile`): 17px icon over an 11.5px label, 10px/4px padding,
86
+ * 12px radius, 8px between tiles; the picked tile takes a brand border, a 9%
87
+ * brand tint and brand text. DS tokens only, rem only.
88
+ */
89
+ export type TileSelectSize = 'md' | 'sm';
90
+ export interface TileSelectProps {
91
+ /** Options to render in order. */
92
+ options: readonly TileSelectOption[];
93
+ /** Currently selected option `key`. `null` = no selection. */
94
+ selectedKey: string | null;
95
+ /** Fires when a tile is selected. */
96
+ onSelect: (key: string) => void;
97
+ /** Optional heading rendered above the grid. */
98
+ heading?: string;
99
+ /**
100
+ * `aria-label` for the wrapping group when `heading` is omitted.
101
+ * Translatable. Default `'Select an option'`. When `heading` is
102
+ * provided this prop is ignored — the grid is labelled by the
103
+ * heading element.
104
+ */
105
+ ariaLabel?: string;
106
+ /**
107
+ * How the options render. Default `'tiles'`.
108
+ * See {@link TileSelectVariant}.
109
+ */
110
+ variant?: TileSelectVariant;
111
+ /**
112
+ * `variant="compact"` only: a CAP on how many options stay on the pill.
113
+ * Unset by default, and normally best left that way — the pill already
114
+ * measures the track and keeps every option that fits, folding only
115
+ * what is left over. Set it when a surface wants a shorter row than
116
+ * its width allows.
117
+ *
118
+ * The cap gives way in one case: when honouring it would leave a single
119
+ * option in the menu that the track had room for. A "More" button is
120
+ * wider than most labels, so that fold costs space and buys a click.
121
+ */
122
+ maxVisible?: number;
123
+ /**
124
+ * `variant="compact"` only: label for the overflow trigger. Shown
125
+ * until an option inside the menu is selected, after which the
126
+ * trigger carries that option's label. Translatable. Default `'More'`.
127
+ */
128
+ moreLabel?: string;
129
+ /**
130
+ * Grid columns on >= sm. Default `3`. Mobile collapses to 2.
131
+ * `5` and `6` keep a full method set on one row on a wide surface.
132
+ * Ignored by `variant="compact"`, which is a single strip.
133
+ */
134
+ columnsDesktop?: 2 | 3 | 4 | 5 | 6;
135
+ columnsMobile?: 1 | 2;
136
+ /** `variant="tiles"` only. See {@link TileSelectSize}. Default `'md'`. */
137
+ size?: TileSelectSize;
138
+ className?: string;
139
+ 'data-testid'?: string;
140
+ }
@@ -0,0 +1,6 @@
1
+ import { JSX } from 'react';
2
+ import { TimeFieldProps } from './types';
3
+ export declare function TimeField({ value: valueProp, defaultValue, onChange, label, 'aria-label': ariaLabel, placeholder, emptyContent, invalidMessage, minTime, minTimeMessage, listStart, listEnd, listStep, locale, isRequired, isDisabled, isInvalid, errorMessage, isClearable, clearLabel, onBlur, size, variant, labelPlacement, className, inputProps, popoverProps, 'data-testid': dataTestId, }: TimeFieldProps): JSX.Element;
4
+ export declare namespace TimeField {
5
+ var displayName: string;
6
+ }
@@ -0,0 +1,3 @@
1
+ export { TimeField } from './TimeField';
2
+ export { parseTimeInput } from './time';
3
+ export type { TimeFieldProps } from './types';
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The time logic behind {@link TimeField}, kept free of React so it can be
3
+ * tested and reused on its own. Every time in and out is 24-hour `"HH:mm"`.
4
+ */
5
+ /** Minutes since midnight of an `"HH:mm"` time. */
6
+ export declare function toMinutes(time: string): number;
7
+ /**
8
+ * Read typed text as a time: `"HH:mm"`, or `null` when it is not one.
9
+ *
10
+ * Forgiving on purpose: `"7:15 pm"`, `"7:15pm"`, `"715p"`, `"7p"`, `"19:15"`,
11
+ * `"1915"` and `"7"` all work; case, spaces and dots do not matter
12
+ * (`"7:15 P.M."`). Without am/pm, hours 1–6 read as afternoon (no venue opens
13
+ * at 3 AM) and every other hour as 24-hour: `"3"` is 15:00, `"7"` is 07:00,
14
+ * `"19"` is 19:00, `"0"` is midnight.
15
+ *
16
+ * @example
17
+ * parseTimeInput('715p'); // '19:15'
18
+ * parseTimeInput('3'); // '15:00'
19
+ * parseTimeInput('25'); // null
20
+ */
21
+ export declare function parseTimeInput(input: string): string | null;
22
+ /**
23
+ * The suggested times: `start` to `end` inclusive, every `step` whole
24
+ * minutes. Empty when `step` is under a minute or `end` is before `start`.
25
+ */
26
+ export declare function buildTimeOptions(start: string, end: string, step: number): string[];
27
+ /**
28
+ * Whether the list keeps `time` while `query` is typed. It compares against
29
+ * the 12-hour form (`"7:30"`) and the 24-hour forms (`"19:30"`, `"07:30"`), so
30
+ * it does not depend on how the label is formatted: `"7"` keeps 7:00 and
31
+ * 7:30 AM and PM, `"7p"` only the PM ones, `"19"` the 7 PM ones, `"p"` every
32
+ * PM time.
33
+ */
34
+ export declare function matchesTimeQuery(time: string, query: string): boolean;
35
+ /**
36
+ * The label for a time in `locale`: `"7:15 PM"` in `en-US`, `"19:15"` in
37
+ * `en-GB`, `"7:15 p. m."` in `es-CO`. No-break spaces become plain ones, so
38
+ * the label matches what people type and what tests search for.
39
+ */
40
+ export declare function formatTimeLabel(time: string, locale: string): string;
@@ -0,0 +1,77 @@
1
+ import { FocusEvent, ReactNode } from 'react';
2
+ import { AutocompleteProps } from '../../components';
3
+ /** One row of the list: the `"HH:mm"` key and its locale label. */
4
+ export interface TimeFieldOption {
5
+ key: string;
6
+ label: string;
7
+ }
8
+ export interface TimeFieldProps {
9
+ /**
10
+ * The time as 24-hour `"HH:mm"` text, or `null` for none. Omit for
11
+ * uncontrolled mode.
12
+ */
13
+ value?: string | null;
14
+ /** Starting time in uncontrolled mode. */
15
+ defaultValue?: string | null;
16
+ /** Called with the committed `"HH:mm"`, or `null` when a clearable field is emptied. */
17
+ onChange?: (time: string | null) => void;
18
+ /** Visible label. Without one, pass `aria-label`. */
19
+ label?: ReactNode;
20
+ 'aria-label'?: string;
21
+ /** "e.g. 7:15 PM". */
22
+ placeholder?: string;
23
+ /**
24
+ * Shown in the list when nothing matches the typed text, or the text was
25
+ * erased ("Type a time like 7:15 PM"). Required and non-empty: HeroUI's
26
+ * own is English, and an Autocomplete that hides an empty list loses its
27
+ * options to `aria-hidden` when they come back.
28
+ */
29
+ emptyContent: ReactNode;
30
+ /** Shown when the typed text is not a time ("Enter a time like 7:15 PM."). */
31
+ invalidMessage: ReactNode;
32
+ /**
33
+ * Earliest allowed `"HH:mm"`. Earlier times leave the list, and typing
34
+ * one, or receiving one as `value`, shows `minTimeMessage`.
35
+ */
36
+ minTime?: string;
37
+ /** Shown for a time before `minTime` ("Ends after it starts."). Defaults to `invalidMessage`. */
38
+ minTimeMessage?: ReactNode;
39
+ /** First time the list suggests. @default '07:00' */
40
+ listStart?: string;
41
+ /** Last time the list suggests, inclusive. @default '21:00' */
42
+ listEnd?: string;
43
+ /** Minutes between suggested times. @default 30 */
44
+ listStep?: number;
45
+ /**
46
+ * BCP 47 locale the times are written in: "7:15 PM" in `en-US`, "19:15"
47
+ * in `en-GB`. Pass the same one as `HeroUIProvider`. @default 'en-US'
48
+ */
49
+ locale?: string;
50
+ isRequired?: boolean;
51
+ isDisabled?: boolean;
52
+ /** Marks the field invalid from outside; `errorMessage` is shown with it. */
53
+ isInvalid?: boolean;
54
+ errorMessage?: ReactNode;
55
+ /**
56
+ * Whether the field may be emptied: a clear button shows, and leaving it
57
+ * empty commits `null`. Otherwise leaving it empty restores the time it
58
+ * had. @default false
59
+ */
60
+ isClearable?: boolean;
61
+ /** Accessible name of the clear button ("Clear time"); HeroUI gives it none. */
62
+ clearLabel?: string;
63
+ /** Called after the field has committed what was typed (react-hook-form's `field.onBlur`). */
64
+ onBlur?: (e: FocusEvent<HTMLInputElement>) => void;
65
+ size?: AutocompleteProps['size'];
66
+ /** @default 'bordered' */
67
+ variant?: AutocompleteProps['variant'];
68
+ /** @default 'outside-top' */
69
+ labelPlacement?: AutocompleteProps['labelPlacement'];
70
+ className?: string;
71
+ /** Passed to HeroUI's input: `{ classNames: { inputWrapper: 'h-11' } }`. */
72
+ inputProps?: AutocompleteProps['inputProps'];
73
+ /** Passed to HeroUI's popover. */
74
+ popoverProps?: AutocompleteProps['popoverProps'];
75
+ /** Lands on the `<input>`. Options get `${data-testid}-option-${HH:mm}`. */
76
+ 'data-testid'?: string;
77
+ }
@@ -10,6 +10,7 @@ export type ToolbarButtonProps = Omit<ComponentPropsWithoutRef<typeof Button>, '
10
10
  * count straight through without guarding it.
11
11
  */
12
12
  count?: number;
13
+ appearance?: 'pill' | 'outline';
13
14
  /** Forwarded as `data-testid`. */
14
15
  testId?: string;
15
16
  };
@@ -23,6 +24,7 @@ export declare const ToolbarButton: React.ForwardRefExoticComponent<Omit<Omit<Om
23
24
  * count straight through without guarding it.
24
25
  */
25
26
  count?: number;
27
+ appearance?: "pill" | "outline";
26
28
  /** Forwarded as `data-testid`. */
27
29
  testId?: string;
28
30
  } & React.RefAttributes<HTMLButtonElement>>;
@@ -1,4 +1,11 @@
1
1
  import { default as React } from 'react';
2
+ export type UnderlineTabsSize = 'md' | 'lg' | 'sm';
3
+ /**
4
+ * `primary`: the page's own tabs; the selected label turns ink.
5
+ * `secondary`: tabs nested inside a section; flush, padded, semibold, the
6
+ * selected label turns brand. Read by `size="sm"` only.
7
+ */
8
+ export type UnderlineTabsLevel = 'primary' | 'secondary';
2
9
  export interface UnderlineTabItem<K extends string = string> {
3
10
  key: K;
4
11
  label: React.ReactNode;
@@ -15,6 +22,20 @@ export interface UnderlineTabItem<K extends string = string> {
15
22
  * the DOM does not contain; passing `content` is the fix.
16
23
  */
17
24
  content?: React.ReactNode;
25
+ /** Not selectable: drawn at 40% and skipped by the arrow keys. */
26
+ isDisabled?: boolean;
27
+ /**
28
+ * The browser tooltip on the tab (its `title`), read out as its
29
+ * description: why a disabled tab is out of reach ("Corporate memberships
30
+ * cannot be gifted").
31
+ */
32
+ hint?: string;
33
+ /**
34
+ * Something on this tab's panel needs a fix: a warning dot after the label,
35
+ * and `needsFixLabel` read out with the tab's name. Pick the tab a panel
36
+ * opens on with `firstNeedsFixKey(items, fallback)`.
37
+ */
38
+ needsFix?: boolean;
18
39
  }
19
40
  export interface UnderlineTabsProps<K extends string = string> {
20
41
  items: UnderlineTabItem<K>[];
@@ -22,10 +43,28 @@ export interface UnderlineTabsProps<K extends string = string> {
22
43
  onChange: (key: K) => void;
23
44
  /** Names the tablist. Required — an unnamed tablist gives no context. */
24
45
  ariaLabel: string;
46
+ /**
47
+ * `md` (default): the back-office strip. `sm`: the Quick Donation / Quick
48
+ * Membership strip. `lg`: the Quick entry header strip.
49
+ */
50
+ size?: UnderlineTabsSize;
51
+ /** See {@link UnderlineTabsLevel}. Default `primary`. Read by `size="sm"` only. */
52
+ level?: UnderlineTabsLevel;
53
+ /**
54
+ * `true` (default): the strip draws its hairline and keeps its gap to what
55
+ * follows. `false`: neither, for a strip at the foot of a card.
56
+ */
57
+ showDivider?: boolean;
58
+ /**
59
+ * Spoken after the name of a tab with `needsFix` ("Needs a fix"), in place
60
+ * of the dot, which is hidden from assistive tech. Pass it whenever an
61
+ * item can need a fix: without it the state is color alone.
62
+ */
63
+ needsFixLabel?: string;
25
64
  className?: string;
26
65
  'data-testid'?: string;
27
66
  }
28
- export declare function UnderlineTabs<K extends string = string>({ items, value, onChange, ariaLabel, className, 'data-testid': dataTestId, }: UnderlineTabsProps<K>): import("react/jsx-runtime").JSX.Element;
67
+ export declare function UnderlineTabs<K extends string = string>({ items, value, onChange, ariaLabel, size, level, showDivider, needsFixLabel, className, 'data-testid': dataTestId, }: UnderlineTabsProps<K>): import("react/jsx-runtime").JSX.Element;
29
68
  export declare namespace UnderlineTabs {
30
69
  var displayName: string;
31
70
  }
@@ -1,2 +1,2 @@
1
1
  export { UnderlineTabs } from './UnderlineTabs';
2
- export type { UnderlineTabsProps, UnderlineTabItem } from './UnderlineTabs';
2
+ export type { UnderlineTabsProps, UnderlineTabItem, UnderlineTabsSize, UnderlineTabsLevel } from './UnderlineTabs';
@@ -0,0 +1,21 @@
1
+ export interface UnderlineTabsSlots {
2
+ base: string;
3
+ tabList: string;
4
+ cursor: string;
5
+ tab: string;
6
+ tabContent: string;
7
+ }
8
+ export declare const underlineTabsSlots: Record<'md' | 'lg' | 'sm-primary' | 'sm-secondary', UnderlineTabsSlots>;
9
+ /**
10
+ * Merged over any look by `showDivider={false}`: no hairline under the strip
11
+ * and no gap after it. `md` draws its hairline on the list, the other looks on
12
+ * `base`, so both slots drop theirs (and `-mb-px`, which only overlapped it).
13
+ */
14
+ export declare const underlineTabsNoDivider: Pick<UnderlineTabsSlots, 'base' | 'tabList'>;
15
+ /**
16
+ * The title of a tab with `needsFix`: the label, then the dot 6px after it
17
+ * (the prototype's `gap-1.5`), centred on the label's line.
18
+ */
19
+ export declare const underlineTabsNeedsFixTitleClass = "inline-flex items-center gap-1.5";
20
+ /** Added to the `md` cursor under reduced motion: it jumps instead of sliding. */
21
+ export declare const stillCursorClass = "data-[animated=true]:transition-none";
@@ -0,0 +1,6 @@
1
+ import { JSX } from 'react';
2
+ import { StepPagerProps } from './types';
3
+ export declare function StepPager({ steps, currentStep, onStepChange, progressLabel, nextLabel, previousLabel, finalActionLabel, onFinalAction, isFinalActionDisabled, className, 'data-testid': dataTestId, previousTestId, nextTestId, finalActionTestId, }: StepPagerProps): JSX.Element;
4
+ export declare namespace StepPager {
5
+ var displayName: string;
6
+ }
@@ -0,0 +1,15 @@
1
+ import { JSX } from 'react';
2
+ import { StepsReadinessProps } from './types';
3
+ /**
4
+ * The verdict that sits in `VerticalSteps`' `header`: ready to publish,
5
+ * N things to fix, or already live. Copy comes in as props.
6
+ *
7
+ * `role="status"` on every variant: the count changes while the user edits,
8
+ * and a polite announcement is the right weight for it. `data-ready` is
9
+ * `"true"` for `ready` and `live`, `"false"` for `fix`, so a test can wait on
10
+ * it without reading copy.
11
+ */
12
+ export declare function StepsReadiness({ variant, title, description, className, 'data-testid': dataTestId, }: StepsReadinessProps): JSX.Element;
13
+ export declare namespace StepsReadiness {
14
+ var displayName: string;
15
+ }
@@ -0,0 +1,6 @@
1
+ import { JSX } from 'react';
2
+ import { VerticalStepsProps } from './types';
3
+ export declare function VerticalSteps({ steps, currentStep: currentStepProp, defaultStep, onStepChange, isStepReachable, ariaLabel, statusLabels, header, maxHeight, className, style, 'data-testid': dataTestId, ...rest }: VerticalStepsProps): JSX.Element;
4
+ export declare namespace VerticalSteps {
5
+ var displayName: string;
6
+ }