@simpleapps-com/augur-web 2.3.1 → 2026.11.1

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 (255) hide show
  1. package/EXPORTS.md +18 -189
  2. package/README.md +18 -364
  3. package/dist/accordion.cjs.map +1 -1
  4. package/dist/accordion.d.ts +4 -5
  5. package/dist/accordion.d.ts.map +1 -0
  6. package/dist/add-to-cart-button.cjs.map +1 -1
  7. package/dist/add-to-cart-button.d.ts +5 -8
  8. package/dist/add-to-cart-button.d.ts.map +1 -0
  9. package/dist/breadcrumb.cjs.map +1 -1
  10. package/dist/breadcrumb.d.ts +5 -7
  11. package/dist/breadcrumb.d.ts.map +1 -0
  12. package/dist/breadcrumbs.cjs.map +1 -1
  13. package/dist/breadcrumbs.d.ts +4 -4
  14. package/dist/breadcrumbs.d.ts.map +1 -0
  15. package/dist/button.cjs.map +1 -1
  16. package/dist/button.d.ts +7 -9
  17. package/dist/button.d.ts.map +1 -0
  18. package/dist/card.cjs.map +1 -1
  19. package/dist/card.d.ts +3 -4
  20. package/dist/card.d.ts.map +1 -0
  21. package/dist/checkbox.cjs.map +1 -1
  22. package/dist/checkbox.d.ts +3 -4
  23. package/dist/checkbox.d.ts.map +1 -0
  24. package/dist/chunk-32XB3REY.cjs.map +1 -1
  25. package/dist/chunk-5VMEEKZ5.cjs.map +1 -1
  26. package/dist/chunk-5ZITWMV4.cjs.map +1 -1
  27. package/dist/chunk-76RSVRGB.cjs.map +1 -1
  28. package/dist/chunk-7EXXNELX.cjs.map +1 -1
  29. package/dist/chunk-BXMTQGKV.cjs.map +1 -1
  30. package/dist/chunk-EEJYDSXR.cjs +220 -0
  31. package/dist/chunk-EEJYDSXR.cjs.map +1 -0
  32. package/dist/chunk-GSR6SMQ2.cjs.map +1 -1
  33. package/dist/{chunk-3VN3FX2Q.js → chunk-JWTTXZDS.js} +18 -20
  34. package/dist/chunk-JWTTXZDS.js.map +1 -0
  35. package/dist/chunk-JXW4XE2P.cjs.map +1 -1
  36. package/dist/chunk-MAENILZP.cjs.map +1 -1
  37. package/dist/chunk-NEY26NNF.cjs.map +1 -1
  38. package/dist/{chunk-NSSX7USQ.cjs → chunk-OQV27VC5.cjs} +18 -20
  39. package/dist/chunk-OQV27VC5.cjs.map +1 -0
  40. package/dist/{chunk-DCXYO3RB.js → chunk-PFEPE5UE.js} +7 -3
  41. package/dist/chunk-PFEPE5UE.js.map +1 -0
  42. package/dist/chunk-T52J3SHP.cjs.map +1 -1
  43. package/dist/chunk-UFL6PVLI.cjs.map +1 -1
  44. package/dist/chunk-VI2IE6RC.js +220 -0
  45. package/dist/chunk-VI2IE6RC.js.map +1 -0
  46. package/dist/chunk-VL6L4GDA.cjs.map +1 -1
  47. package/dist/chunk-WJUDOEVB.cjs.map +1 -1
  48. package/dist/chunk-XGKBDPGD.cjs.map +1 -1
  49. package/dist/{chunk-AE4GLYJE.cjs → chunk-YTBB63IE.cjs} +7 -3
  50. package/dist/chunk-YTBB63IE.cjs.map +1 -0
  51. package/dist/chunk-Z57QBVUC.cjs.map +1 -1
  52. package/dist/command.cjs +7 -2
  53. package/dist/command.cjs.map +1 -1
  54. package/dist/command.d.ts +17 -16
  55. package/dist/command.d.ts.map +1 -0
  56. package/dist/command.js +8 -3
  57. package/dist/command.js.map +1 -1
  58. package/dist/confirm-dialog.cjs +1 -1
  59. package/dist/confirm-dialog.cjs.map +1 -1
  60. package/dist/confirm-dialog.d.ts +4 -6
  61. package/dist/confirm-dialog.d.ts.map +1 -0
  62. package/dist/confirm-dialog.js +1 -1
  63. package/dist/confirm-dialog.js.map +1 -1
  64. package/dist/data-table.cjs +46 -34
  65. package/dist/data-table.cjs.map +1 -1
  66. package/dist/data-table.d.ts +9 -11
  67. package/dist/data-table.d.ts.map +1 -0
  68. package/dist/data-table.js +45 -33
  69. package/dist/data-table.js.map +1 -1
  70. package/dist/detail-panel.cjs +3 -3
  71. package/dist/detail-panel.cjs.map +1 -1
  72. package/dist/detail-panel.d.ts +6 -8
  73. package/dist/detail-panel.d.ts.map +1 -0
  74. package/dist/detail-panel.js +3 -3
  75. package/dist/dialog.cjs.map +1 -1
  76. package/dist/dialog.d.ts +6 -8
  77. package/dist/dialog.d.ts.map +1 -0
  78. package/dist/dropdown-menu.cjs.map +1 -1
  79. package/dist/dropdown-menu.d.ts +5 -7
  80. package/dist/dropdown-menu.d.ts.map +1 -0
  81. package/dist/financing-widget.cjs +1 -3
  82. package/dist/financing-widget.cjs.map +1 -1
  83. package/dist/financing-widget.d.ts +5 -6
  84. package/dist/financing-widget.d.ts.map +1 -0
  85. package/dist/financing-widget.js +1 -3
  86. package/dist/financing-widget.js.map +1 -1
  87. package/dist/form-field.cjs.map +1 -1
  88. package/dist/form-field.d.ts +4 -5
  89. package/dist/form-field.d.ts.map +1 -0
  90. package/dist/form-input.cjs.map +1 -1
  91. package/dist/form-input.d.ts +4 -5
  92. package/dist/form-input.d.ts.map +1 -0
  93. package/dist/form-select.cjs.map +1 -1
  94. package/dist/form-select.d.ts +4 -5
  95. package/dist/form-select.d.ts.map +1 -0
  96. package/dist/form-textarea.cjs.map +1 -1
  97. package/dist/form-textarea.d.ts +4 -5
  98. package/dist/form-textarea.d.ts.map +1 -0
  99. package/dist/gtm.cjs +3 -2
  100. package/dist/gtm.cjs.map +1 -1
  101. package/dist/gtm.d.ts +12 -15
  102. package/dist/gtm.d.ts.map +1 -0
  103. package/dist/gtm.js +2 -1
  104. package/dist/input.cjs.map +1 -1
  105. package/dist/input.d.ts +4 -5
  106. package/dist/input.d.ts.map +1 -0
  107. package/dist/label.cjs.map +1 -1
  108. package/dist/label.d.ts +5 -7
  109. package/dist/label.d.ts.map +1 -0
  110. package/dist/list-view.cjs.map +1 -1
  111. package/dist/list-view.d.ts +5 -7
  112. package/dist/list-view.d.ts.map +1 -0
  113. package/dist/mdx-components.cjs +5 -2
  114. package/dist/mdx-components.cjs.map +1 -1
  115. package/dist/mdx-components.d.ts +11 -6
  116. package/dist/mdx-components.d.ts.map +1 -0
  117. package/dist/mdx-components.js +5 -2
  118. package/dist/mdx-components.js.map +1 -1
  119. package/dist/navigation-menu.cjs.map +1 -1
  120. package/dist/navigation-menu.d.ts +5 -7
  121. package/dist/navigation-menu.d.ts.map +1 -0
  122. package/dist/pagination.cjs +3 -2
  123. package/dist/pagination.cjs.map +1 -1
  124. package/dist/pagination.d.ts +10 -14
  125. package/dist/pagination.d.ts.map +1 -0
  126. package/dist/pagination.js +2 -1
  127. package/dist/payment-modal.cjs +20 -19
  128. package/dist/payment-modal.cjs.map +1 -1
  129. package/dist/payment-modal.d.ts +5 -7
  130. package/dist/payment-modal.d.ts.map +1 -0
  131. package/dist/payment-modal.js +19 -18
  132. package/dist/payment-modal.js.map +1 -1
  133. package/dist/popover.cjs.map +1 -1
  134. package/dist/popover.d.ts +4 -5
  135. package/dist/popover.d.ts.map +1 -0
  136. package/dist/price-format.cjs +27 -5
  137. package/dist/price-format.cjs.map +1 -1
  138. package/dist/price-format.d.ts +4 -5
  139. package/dist/price-format.d.ts.map +1 -0
  140. package/dist/price-format.js +26 -4
  141. package/dist/price-format.js.map +1 -1
  142. package/dist/price.cjs +34 -5
  143. package/dist/price.cjs.map +1 -1
  144. package/dist/price.d.ts +8 -10
  145. package/dist/price.d.ts.map +1 -0
  146. package/dist/price.js +32 -3
  147. package/dist/price.js.map +1 -1
  148. package/dist/provider.cjs +4 -2
  149. package/dist/provider.cjs.map +1 -1
  150. package/dist/provider.d.ts +7 -10
  151. package/dist/provider.d.ts.map +1 -0
  152. package/dist/provider.js +3 -1
  153. package/dist/provider.js.map +1 -1
  154. package/dist/quantity-input.cjs +27 -40
  155. package/dist/quantity-input.cjs.map +1 -1
  156. package/dist/quantity-input.d.ts +4 -5
  157. package/dist/quantity-input.d.ts.map +1 -0
  158. package/dist/quantity-input.js +27 -40
  159. package/dist/quantity-input.js.map +1 -1
  160. package/dist/radio-group.cjs.map +1 -1
  161. package/dist/radio-group.d.ts +3 -4
  162. package/dist/radio-group.d.ts.map +1 -0
  163. package/dist/resource-tabs.cjs +1 -0
  164. package/dist/resource-tabs.cjs.map +1 -1
  165. package/dist/resource-tabs.d.ts +6 -8
  166. package/dist/resource-tabs.d.ts.map +1 -0
  167. package/dist/resource-tabs.js +1 -0
  168. package/dist/resource-tabs.js.map +1 -1
  169. package/dist/rules.d.ts +210 -0
  170. package/dist/rules.d.ts.map +1 -0
  171. package/dist/select.cjs.map +1 -1
  172. package/dist/select.d.ts +4 -5
  173. package/dist/select.d.ts.map +1 -0
  174. package/dist/separator.cjs.map +1 -1
  175. package/dist/separator.d.ts +3 -4
  176. package/dist/separator.d.ts.map +1 -0
  177. package/dist/session-replay.cjs +4 -2
  178. package/dist/session-replay.cjs.map +1 -1
  179. package/dist/session-replay.d.ts +4 -5
  180. package/dist/session-replay.d.ts.map +1 -0
  181. package/dist/session-replay.js +4 -2
  182. package/dist/session-replay.js.map +1 -1
  183. package/dist/skeleton.cjs.map +1 -1
  184. package/dist/skeleton.d.ts +2 -4
  185. package/dist/skeleton.d.ts.map +1 -0
  186. package/dist/spinner.cjs.map +1 -1
  187. package/dist/spinner.d.ts +2 -4
  188. package/dist/spinner.d.ts.map +1 -0
  189. package/dist/stock-label.cjs +14 -12
  190. package/dist/stock-label.cjs.map +1 -1
  191. package/dist/stock-label.d.ts +7 -7
  192. package/dist/stock-label.d.ts.map +1 -0
  193. package/dist/stock-label.js +14 -12
  194. package/dist/stock-label.js.map +1 -1
  195. package/dist/table.cjs.map +1 -1
  196. package/dist/table.d.ts +3 -4
  197. package/dist/table.d.ts.map +1 -0
  198. package/dist/tabs.cjs.map +1 -1
  199. package/dist/tabs.d.ts +4 -5
  200. package/dist/tabs.d.ts.map +1 -0
  201. package/dist/textarea.cjs.map +1 -1
  202. package/dist/textarea.d.ts +4 -5
  203. package/dist/textarea.d.ts.map +1 -0
  204. package/llms.txt +23 -38
  205. package/package.json +26 -17
  206. package/dist/accordion.d.cts +0 -9
  207. package/dist/add-to-cart-button.d.cts +0 -14
  208. package/dist/breadcrumb.d.cts +0 -22
  209. package/dist/breadcrumbs.d.cts +0 -31
  210. package/dist/button.d.cts +0 -27
  211. package/dist/card.d.cts +0 -10
  212. package/dist/checkbox.d.cts +0 -6
  213. package/dist/chunk-3VN3FX2Q.js.map +0 -1
  214. package/dist/chunk-AE4GLYJE.cjs.map +0 -1
  215. package/dist/chunk-DCXYO3RB.js.map +0 -1
  216. package/dist/chunk-DZDC4HHK.js +0 -33
  217. package/dist/chunk-DZDC4HHK.js.map +0 -1
  218. package/dist/chunk-NSSX7USQ.cjs.map +0 -1
  219. package/dist/chunk-VLZDTWPR.cjs +0 -33
  220. package/dist/chunk-VLZDTWPR.cjs.map +0 -1
  221. package/dist/command.d.cts +0 -84
  222. package/dist/confirm-dialog.d.cts +0 -35
  223. package/dist/data-table.d.cts +0 -55
  224. package/dist/detail-panel.d.cts +0 -59
  225. package/dist/dialog.d.cts +0 -22
  226. package/dist/dropdown-menu.d.cts +0 -30
  227. package/dist/financing-widget.d.cts +0 -45
  228. package/dist/form-field.d.cts +0 -14
  229. package/dist/form-input.d.cts +0 -19
  230. package/dist/form-select.d.cts +0 -34
  231. package/dist/form-textarea.d.cts +0 -12
  232. package/dist/gtm.d.cts +0 -69
  233. package/dist/input.d.cts +0 -6
  234. package/dist/label.d.cts +0 -8
  235. package/dist/list-view.d.cts +0 -18
  236. package/dist/mdx-components.d.cts +0 -20
  237. package/dist/navigation-menu.d.cts +0 -15
  238. package/dist/pagination.d.cts +0 -50
  239. package/dist/payment-modal.d.cts +0 -30
  240. package/dist/popover.d.cts +0 -9
  241. package/dist/price-format.d.cts +0 -21
  242. package/dist/price.d.cts +0 -78
  243. package/dist/provider.d.cts +0 -47
  244. package/dist/quantity-input.d.cts +0 -33
  245. package/dist/radio-group.d.cts +0 -7
  246. package/dist/resource-tabs.d.cts +0 -33
  247. package/dist/select.d.cts +0 -15
  248. package/dist/separator.d.cts +0 -6
  249. package/dist/session-replay.d.cts +0 -44
  250. package/dist/skeleton.d.cts +0 -5
  251. package/dist/spinner.d.cts +0 -10
  252. package/dist/stock-label.d.cts +0 -47
  253. package/dist/table.d.cts +0 -12
  254. package/dist/tabs.d.cts +0 -9
  255. package/dist/textarea.d.cts +0 -6
@@ -1,11 +1,7 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as React from 'react';
3
- import { ButtonProps } from './button.js';
4
- import 'class-variance-authority/types';
5
- import 'class-variance-authority';
6
-
1
+ import * as React from "react";
2
+ import { type ButtonProps } from "./button";
7
3
  declare const Pagination: {
8
- ({ className, ...props }: React.ComponentProps<"nav">): react_jsx_runtime.JSX.Element;
4
+ ({ className, ...props }: React.ComponentProps<"nav">): React.JSX.Element;
9
5
  displayName: string;
10
6
  };
11
7
  declare const PaginationContent: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & React.RefAttributes<HTMLUListElement>>;
@@ -14,19 +10,19 @@ type PaginationLinkProps = {
14
10
  isActive?: boolean;
15
11
  } & Pick<ButtonProps, "size"> & React.ComponentProps<"a">;
16
12
  declare const PaginationLink: {
17
- ({ className, isActive, size, ...props }: PaginationLinkProps): react_jsx_runtime.JSX.Element;
13
+ ({ className, isActive, size, ...props }: PaginationLinkProps): React.JSX.Element;
18
14
  displayName: string;
19
15
  };
20
16
  declare const PaginationPrevious: {
21
- ({ className, ...props }: React.ComponentProps<typeof PaginationLink>): react_jsx_runtime.JSX.Element;
17
+ ({ className, ...props }: React.ComponentProps<typeof PaginationLink>): React.JSX.Element;
22
18
  displayName: string;
23
19
  };
24
20
  declare const PaginationNext: {
25
- ({ className, ...props }: React.ComponentProps<typeof PaginationLink>): react_jsx_runtime.JSX.Element;
21
+ ({ className, ...props }: React.ComponentProps<typeof PaginationLink>): React.JSX.Element;
26
22
  displayName: string;
27
23
  };
28
24
  declare const PaginationEllipsis: {
29
- ({ className, ...props }: React.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
25
+ ({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
30
26
  displayName: string;
31
27
  };
32
28
  /** Build an array of page numbers and ellipsis markers for pagination UI. */
@@ -43,8 +39,8 @@ type ListPaginationProps = {
43
39
  className?: string;
44
40
  };
45
41
  declare const ListPagination: {
46
- ({ page, totalPages, getHref, onPageChange, className, }: ListPaginationProps): react_jsx_runtime.JSX.Element | null;
42
+ ({ page, totalPages, getHref, onPageChange, className, }: ListPaginationProps): React.JSX.Element | null;
47
43
  displayName: string;
48
44
  };
49
-
50
- export { ListPagination, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, getPageNumbers };
45
+ export { Pagination, PaginationContent, PaginationLink, PaginationItem, PaginationPrevious, PaginationNext, PaginationEllipsis, getPageNumbers, ListPagination, };
46
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,UAAU,CAAC;AAG5D,QAAA,MAAM,UAAU;8BAA6B,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;;CAOvE,CAAC;AAGF,QAAA,MAAM,iBAAiB,yKAItB,CAAC;AAGF,QAAA,MAAM,cAAc,kKAEnB,CAAC;AAGF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAC3B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAE5B,QAAA,MAAM,cAAc;8CAAsD,mBAAmB;;CAY5F,CAAC;AAGF,QAAA,MAAM,kBAAkB;8BAGrB,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC;;CAU7C,CAAC;AAGF,QAAA,MAAM,cAAc;8BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC;;CAU3F,CAAC;AAGF,QAAA,MAAM,kBAAkB;8BAA6B,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;;CAShF,CAAC;AAGF,6EAA6E;AAC7E,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAI/E;AAED,KAAK,mBAAmB,GAAG;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,uEAAuE;IACvE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,cAAc;8DAMjB,mBAAmB;;CA2DrB,CAAC;AAGF,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,CAAC"}
@@ -10,7 +10,8 @@ import {
10
10
  PaginationNext,
11
11
  PaginationPrevious,
12
12
  getPageNumbers
13
- } from "./chunk-3VN3FX2Q.js";
13
+ } from "./chunk-JWTTXZDS.js";
14
+ import "./chunk-VI2IE6RC.js";
14
15
  import "./chunk-QICSGVX3.js";
15
16
  export {
16
17
  ListPagination,
@@ -1,7 +1,10 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }"use client";
2
2
  "use client";
3
3
 
4
4
 
5
+ var _chunkEEJYDSXRcjs = require('./chunk-EEJYDSXR.cjs');
6
+
7
+
5
8
 
6
9
 
7
10
 
@@ -13,26 +16,24 @@ var _chunkT52J3SHPcjs = require('./chunk-T52J3SHP.cjs');
13
16
  var _react = require('react'); var React = _interopRequireWildcard(_react);
14
17
  var _jsxruntime = require('react/jsx-runtime');
15
18
  function extractBin(data) {
16
- if (typeof data === "string") {
17
- const match = /[?&]Bin=([^&]+)/.exec(data);
18
- return _optionalChain([match, 'optionalAccess', _ => _[1]]) || void 0;
19
- }
20
- if (typeof data === "object" && data !== null) {
21
- const obj = data;
22
- for (const key of ["Bin", "bin", "CardBIN", "cardBin"]) {
23
- if (typeof obj[key] === "string" && obj[key]) {
24
- return obj[key];
25
- }
26
- }
27
- if (typeof obj["data"] === "object" && obj["data"] !== null) {
28
- const nested = obj["data"];
29
- if (typeof nested["Bin"] === "string" && nested["Bin"]) {
30
- return nested["Bin"];
31
- }
32
- }
33
- }
19
+ if (typeof data === "string") return _chunkEEJYDSXRcjs.binFromString.call(void 0, data);
20
+ if (isRecord(data)) return binFromObject(data);
34
21
  return void 0;
35
22
  }
23
+ function isRecord(value) {
24
+ return typeof value === "object" && value !== null;
25
+ }
26
+ function nonEmptyString(value) {
27
+ return typeof value === "string" && value ? value : void 0;
28
+ }
29
+ function binFromObject(obj) {
30
+ for (const key of ["Bin", "bin", "CardBIN", "cardBin"]) {
31
+ const bin = nonEmptyString(obj[key]);
32
+ if (bin) return bin;
33
+ }
34
+ const nested = obj["data"];
35
+ return isRecord(nested) ? nonEmptyString(nested["Bin"]) : void 0;
36
+ }
36
37
  function PaymentModal({
37
38
  open,
38
39
  onOpenChange,
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/payment-modal.cjs","../src/payment-modal.tsx"],"names":[],"mappings":"AAAA,22BAAY;AACZ,YAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACTA,2EAAuB;AAmGf,+CAAA;AA9ED,SAAS,UAAA,CAAW,IAAA,EAAmC;AAC5D,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,QAAA,EAAU;AAC5B,IAAA,MAAM,MAAA,EAAQ,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,uBAAO,KAAA,0BAAA,CAAQ,CAAC,IAAA,GAAK,KAAA,CAAA;AAAA,EACvB;AAEA,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,SAAA,GAAY,KAAA,IAAS,IAAA,EAAM;AAC7C,IAAA,MAAM,IAAA,EAAM,IAAA;AAEZ,IAAA,IAAA,CAAA,MAAW,IAAA,GAAO,CAAC,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,SAAS,CAAA,EAAG;AACtD,MAAA,GAAA,CAAI,OAAO,GAAA,CAAI,GAAG,EAAA,IAAM,SAAA,GAAY,GAAA,CAAI,GAAG,CAAA,EAAG;AAC5C,QAAA,OAAO,GAAA,CAAI,GAAG,CAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,OAAO,GAAA,CAAI,MAAM,EAAA,IAAM,SAAA,GAAY,GAAA,CAAI,MAAM,EAAA,IAAM,IAAA,EAAM;AAC3D,MAAA,MAAM,OAAA,EAAS,GAAA,CAAI,MAAM,CAAA;AACzB,MAAA,GAAA,CAAI,OAAO,MAAA,CAAO,KAAK,EAAA,IAAM,SAAA,GAAY,MAAA,CAAO,KAAK,CAAA,EAAG;AACtD,QAAA,OAAO,MAAA,CAAO,KAAK,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAA;AACT;AAyBO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,2BAAA;AAAA,EACR,WAAA,EAAa;AACf,CAAA,EAAsB;AACpB,EAAM,KAAA,CAAA,SAAA,CAAU,CAAA,EAAA,GAAM;AACpB,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,CAAC,YAAA,EAAc,MAAA;AAE5B,IAAA,SAAS,aAAA,CAAc,KAAA,EAAqB;AAC1C,MAAA,MAAM,IAAA,EAAM,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACjC,MAAA,GAAA,CAAI,GAAA,EAAK;AACP,QAAA,YAAA,CAAc,GAAG,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,aAAa,CAAA;AAChD,IAAA,OAAO,CAAA,EAAA,GAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAEvB,EAAA,MAAM,UAAA,EAAY,QAAA,EACd,CAAA,EAAA;AAID,EAAA;AAEI,oBAAA;AACE,sBAAA;AACA,sBAAA;AACH,IAAA;AAEE,IAAA;AAMD,oBAAA;AACE,MAAA;AAAA,MAAA;AACM,QAAA;AACU,QAAA;AACL,QAAA;AAET,QAAA;AAAA,MAAA;AAEL,IAAA;AAEJ,EAAA;AAEJ;ADpD+B;AACA;AACA;AACA","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/payment-modal.cjs","sourcesContent":[null,"\"use client\";\n\nimport * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\n// ---------------------------------------------------------------------------\n// BIN extraction utility\n// ---------------------------------------------------------------------------\n\n/**\n * Extract a card BIN from a postMessage payload.\n * Handles multiple formats returned by Element/Unified iframes:\n * - URL-encoded string with Bin= parameter\n * - Object with Bin, bin, CardBIN, or cardBin property\n * - Nested data.Bin structure\n */\nexport function extractBin(data: unknown): string | undefined {\n if (typeof data === \"string\") {\n const match = /[?&]Bin=([^&]+)/.exec(data);\n return match?.[1] || undefined;\n }\n\n if (typeof data === \"object\" && data !== null) {\n const obj = data as Record<string, unknown>;\n\n for (const key of [\"Bin\", \"bin\", \"CardBIN\", \"cardBin\"]) {\n if (typeof obj[key] === \"string\" && obj[key]) {\n return obj[key] as string;\n }\n }\n\n if (typeof obj[\"data\"] === \"object\" && obj[\"data\"] !== null) {\n const nested = obj[\"data\"] as Record<string, unknown>;\n if (typeof nested[\"Bin\"] === \"string\" && nested[\"Bin\"]) {\n return nested[\"Bin\"];\n }\n }\n }\n\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal types\n// ---------------------------------------------------------------------------\n\nexport interface PaymentModalProps {\n /** Whether the modal is open. */\n open: boolean;\n /** Callback when open state changes. */\n onOpenChange: (open: boolean) => void;\n /** Unified/Element iframe configuration. Modal shows loading when null. */\n unified: { uiEndpoint: string; transactionSetupId: string } | null;\n /** Called when a card BIN is captured from the iframe postMessage. */\n onBinCapture?: (bin: string) => void;\n /** Modal title. Defaults to \"Enter Credit Card Details\". */\n title?: string;\n /** Close button label. Defaults to \"Close\". */\n closeLabel?: string;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal component\n// ---------------------------------------------------------------------------\n\nexport function PaymentModal({\n open,\n onOpenChange,\n unified,\n onBinCapture,\n title = \"Enter Credit Card Details\",\n closeLabel = \"Close\",\n}: PaymentModalProps) {\n React.useEffect(() => {\n if (!open || !onBinCapture) return;\n\n function handleMessage(event: MessageEvent) {\n const bin = extractBin(event.data);\n if (bin) {\n onBinCapture!(bin);\n }\n }\n\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [open, onBinCapture]);\n\n const iframeSrc = unified\n ? `${unified.uiEndpoint}?TransactionSetupID=${unified.transactionSetupId}`\n : undefined;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">Secure credit card entry form</DialogDescription>\n </DialogHeader>\n {iframeSrc ? (\n <iframe src={iframeSrc} title=\"Payment\" className=\"h-[400px] w-full border-0\" />\n ) : (\n <div className=\"flex h-[400px] items-center justify-center\">\n <p className=\"text-muted-foreground\">Loading payment form...</p>\n </div>\n )}\n <DialogFooter>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"bg-secondary text-secondary-foreground hover:bg-secondary/80 inline-flex h-10 items-center justify-center rounded-md px-4 py-2 text-sm font-medium\"\n >\n {closeLabel}\n </button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/payment-modal.cjs","../src/payment-modal.tsx"],"names":[],"mappings":"AAAA,uWAAY;AACZ,YAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACZA,2EAAuB;AAmGf,+CAAA;AA7ED,SAAS,UAAA,CAAW,IAAA,EAAmC;AAC5D,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,QAAA,EAAU,OAAO,6CAAA,IAAkB,CAAA;AACvD,EAAA,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,aAAA,CAAc,IAAI,CAAA;AAC7C,EAAA,OAAO,KAAA,CAAA;AACT;AAEA,SAAS,QAAA,CAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,MAAA,IAAU,SAAA,GAAY,MAAA,IAAU,IAAA;AAChD;AAGA,SAAS,cAAA,CAAe,KAAA,EAAoC;AAC1D,EAAA,OAAO,OAAO,MAAA,IAAU,SAAA,GAAY,MAAA,EAAQ,MAAA,EAAQ,KAAA,CAAA;AACtD;AAGA,SAAS,aAAA,CAAc,GAAA,EAAkD;AACvE,EAAA,IAAA,CAAA,MAAW,IAAA,GAAO,CAAC,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAA,EAAM,cAAA,CAAe,GAAA,CAAI,GAAG,CAAC,CAAA;AACnC,IAAA,GAAA,CAAI,GAAA,EAAK,OAAO,GAAA;AAAA,EAClB;AACA,EAAA,MAAM,OAAA,EAAS,GAAA,CAAI,MAAM,CAAA;AACzB,EAAA,OAAO,QAAA,CAAS,MAAM,EAAA,EAAI,cAAA,CAAe,MAAA,CAAO,KAAK,CAAC,EAAA,EAAI,KAAA,CAAA;AAC5D;AAyBO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,2BAAA;AAAA,EACR,WAAA,EAAa;AACf,CAAA,EAAsB;AACpB,EAAM,KAAA,CAAA,SAAA,CAAU,CAAA,EAAA,GAAM;AACpB,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,CAAC,YAAA,EAAc,MAAA;AAE5B,IAAA,SAAS,aAAA,CAAc,KAAA,EAAqB;AAC1C,MAAA,MAAM,IAAA,EAAM,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACjC,MAAA,GAAA,CAAI,GAAA,EAAK;AACP,QAAA,YAAA,CAAc,GAAG,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,aAAa,CAAA;AAChD,IAAA,OAAO,CAAA,EAAA,GAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAEvB,EAAA,MAAM,UAAA,EAAY,QAAA,EACd,CAAA,EAAA;AAID,EAAA;AAEI,oBAAA;AACE,sBAAA;AACA,sBAAA;AACH,IAAA;AAEE,IAAA;AAMD,oBAAA;AACE,MAAA;AAAA,MAAA;AACM,QAAA;AACU,QAAA;AACL,QAAA;AAET,QAAA;AAAA,MAAA;AAEL,IAAA;AAEJ,EAAA;AAEJ;ADnD+B;AACA;AACA;AACA","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/payment-modal.cjs","sourcesContent":[null,"\"use client\";\n\nimport * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\nimport { binFromString } from \"./rules\";\n\n// ---------------------------------------------------------------------------\n// BIN extraction utility\n// ---------------------------------------------------------------------------\n\n/**\n * Extract a card BIN from a postMessage payload.\n * Handles multiple formats returned by Element/Unified iframes:\n * - URL-encoded string with Bin= parameter\n * - Object with Bin, bin, CardBIN, or cardBin property\n * - Nested data.Bin structure\n */\nexport function extractBin(data: unknown): string | undefined {\n if (typeof data === \"string\") return binFromString(data);\n if (isRecord(data)) return binFromObject(data);\n return undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The value when it is a non-empty string. */\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : undefined;\n}\n\n/** The first non-empty of Bin, bin, CardBIN, cardBin, else a non-empty data.Bin. */\nfunction binFromObject(obj: Record<string, unknown>): string | undefined {\n for (const key of [\"Bin\", \"bin\", \"CardBIN\", \"cardBin\"]) {\n const bin = nonEmptyString(obj[key]);\n if (bin) return bin;\n }\n const nested = obj[\"data\"];\n return isRecord(nested) ? nonEmptyString(nested[\"Bin\"]) : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal types\n// ---------------------------------------------------------------------------\n\nexport interface PaymentModalProps {\n /** Whether the modal is open. */\n open: boolean;\n /** Callback when open state changes. */\n onOpenChange: (open: boolean) => void;\n /** Unified/Element iframe configuration. Modal shows loading when null. */\n unified: { uiEndpoint: string; transactionSetupId: string } | null;\n /** Called when a card BIN is captured from the iframe postMessage. */\n onBinCapture?: (bin: string) => void;\n /** Modal title. Defaults to \"Enter Credit Card Details\". */\n title?: string;\n /** Close button label. Defaults to \"Close\". */\n closeLabel?: string;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal component\n// ---------------------------------------------------------------------------\n\nexport function PaymentModal({\n open,\n onOpenChange,\n unified,\n onBinCapture,\n title = \"Enter Credit Card Details\",\n closeLabel = \"Close\",\n}: PaymentModalProps) {\n React.useEffect(() => {\n if (!open || !onBinCapture) return;\n\n function handleMessage(event: MessageEvent) {\n const bin = extractBin(event.data);\n if (bin) {\n onBinCapture!(bin);\n }\n }\n\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [open, onBinCapture]);\n\n const iframeSrc = unified\n ? `${unified.uiEndpoint}?TransactionSetupID=${unified.transactionSetupId}`\n : undefined;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">Secure credit card entry form</DialogDescription>\n </DialogHeader>\n {iframeSrc ? (\n <iframe src={iframeSrc} title=\"Payment\" className=\"h-[400px] w-full border-0\" />\n ) : (\n <div className=\"flex h-[400px] items-center justify-center\">\n <p className=\"text-muted-foreground\">Loading payment form...</p>\n </div>\n )}\n <DialogFooter>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"bg-secondary text-secondary-foreground hover:bg-secondary/80 inline-flex h-10 items-center justify-center rounded-md px-4 py-2 text-sm font-medium\"\n >\n {closeLabel}\n </button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
@@ -1,5 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
-
1
+ import * as React from "react";
3
2
  /**
4
3
  * Extract a card BIN from a postMessage payload.
5
4
  * Handles multiple formats returned by Element/Unified iframes:
@@ -7,8 +6,8 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
7
6
  * - Object with Bin, bin, CardBIN, or cardBin property
8
7
  * - Nested data.Bin structure
9
8
  */
10
- declare function extractBin(data: unknown): string | undefined;
11
- interface PaymentModalProps {
9
+ export declare function extractBin(data: unknown): string | undefined;
10
+ export interface PaymentModalProps {
12
11
  /** Whether the modal is open. */
13
12
  open: boolean;
14
13
  /** Callback when open state changes. */
@@ -25,6 +24,5 @@ interface PaymentModalProps {
25
24
  /** Close button label. Defaults to "Close". */
26
25
  closeLabel?: string;
27
26
  }
28
- declare function PaymentModal({ open, onOpenChange, unified, onBinCapture, title, closeLabel, }: PaymentModalProps): react_jsx_runtime.JSX.Element;
29
-
30
- export { PaymentModal, type PaymentModalProps, extractBin };
27
+ export declare function PaymentModal({ open, onOpenChange, unified, onBinCapture, title, closeLabel, }: PaymentModalProps): React.JSX.Element;
28
+ //# sourceMappingURL=payment-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-modal.d.ts","sourceRoot":"","sources":["../src/payment-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI5D;AAyBD,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,wCAAwC;IACxC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,2EAA2E;IAC3E,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,sEAAsE;IACtE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,KAAmC,EACnC,UAAoB,GACrB,EAAE,iBAAiB,qBA6CnB"}
@@ -1,5 +1,8 @@
1
1
  "use client";
2
2
  "use client";
3
+ import {
4
+ binFromString
5
+ } from "./chunk-VI2IE6RC.js";
3
6
  import {
4
7
  Dialog,
5
8
  DialogContent,
@@ -13,26 +16,24 @@ import {
13
16
  import * as React from "react";
14
17
  import { jsx, jsxs } from "react/jsx-runtime";
15
18
  function extractBin(data) {
16
- if (typeof data === "string") {
17
- const match = /[?&]Bin=([^&]+)/.exec(data);
18
- return match?.[1] || void 0;
19
- }
20
- if (typeof data === "object" && data !== null) {
21
- const obj = data;
22
- for (const key of ["Bin", "bin", "CardBIN", "cardBin"]) {
23
- if (typeof obj[key] === "string" && obj[key]) {
24
- return obj[key];
25
- }
26
- }
27
- if (typeof obj["data"] === "object" && obj["data"] !== null) {
28
- const nested = obj["data"];
29
- if (typeof nested["Bin"] === "string" && nested["Bin"]) {
30
- return nested["Bin"];
31
- }
32
- }
33
- }
19
+ if (typeof data === "string") return binFromString(data);
20
+ if (isRecord(data)) return binFromObject(data);
34
21
  return void 0;
35
22
  }
23
+ function isRecord(value) {
24
+ return typeof value === "object" && value !== null;
25
+ }
26
+ function nonEmptyString(value) {
27
+ return typeof value === "string" && value ? value : void 0;
28
+ }
29
+ function binFromObject(obj) {
30
+ for (const key of ["Bin", "bin", "CardBIN", "cardBin"]) {
31
+ const bin = nonEmptyString(obj[key]);
32
+ if (bin) return bin;
33
+ }
34
+ const nested = obj["data"];
35
+ return isRecord(nested) ? nonEmptyString(nested["Bin"]) : void 0;
36
+ }
36
37
  function PaymentModal({
37
38
  open,
38
39
  onOpenChange,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/payment-modal.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\n// ---------------------------------------------------------------------------\n// BIN extraction utility\n// ---------------------------------------------------------------------------\n\n/**\n * Extract a card BIN from a postMessage payload.\n * Handles multiple formats returned by Element/Unified iframes:\n * - URL-encoded string with Bin= parameter\n * - Object with Bin, bin, CardBIN, or cardBin property\n * - Nested data.Bin structure\n */\nexport function extractBin(data: unknown): string | undefined {\n if (typeof data === \"string\") {\n const match = /[?&]Bin=([^&]+)/.exec(data);\n return match?.[1] || undefined;\n }\n\n if (typeof data === \"object\" && data !== null) {\n const obj = data as Record<string, unknown>;\n\n for (const key of [\"Bin\", \"bin\", \"CardBIN\", \"cardBin\"]) {\n if (typeof obj[key] === \"string\" && obj[key]) {\n return obj[key] as string;\n }\n }\n\n if (typeof obj[\"data\"] === \"object\" && obj[\"data\"] !== null) {\n const nested = obj[\"data\"] as Record<string, unknown>;\n if (typeof nested[\"Bin\"] === \"string\" && nested[\"Bin\"]) {\n return nested[\"Bin\"];\n }\n }\n }\n\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal types\n// ---------------------------------------------------------------------------\n\nexport interface PaymentModalProps {\n /** Whether the modal is open. */\n open: boolean;\n /** Callback when open state changes. */\n onOpenChange: (open: boolean) => void;\n /** Unified/Element iframe configuration. Modal shows loading when null. */\n unified: { uiEndpoint: string; transactionSetupId: string } | null;\n /** Called when a card BIN is captured from the iframe postMessage. */\n onBinCapture?: (bin: string) => void;\n /** Modal title. Defaults to \"Enter Credit Card Details\". */\n title?: string;\n /** Close button label. Defaults to \"Close\". */\n closeLabel?: string;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal component\n// ---------------------------------------------------------------------------\n\nexport function PaymentModal({\n open,\n onOpenChange,\n unified,\n onBinCapture,\n title = \"Enter Credit Card Details\",\n closeLabel = \"Close\",\n}: PaymentModalProps) {\n React.useEffect(() => {\n if (!open || !onBinCapture) return;\n\n function handleMessage(event: MessageEvent) {\n const bin = extractBin(event.data);\n if (bin) {\n onBinCapture!(bin);\n }\n }\n\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [open, onBinCapture]);\n\n const iframeSrc = unified\n ? `${unified.uiEndpoint}?TransactionSetupID=${unified.transactionSetupId}`\n : undefined;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">Secure credit card entry form</DialogDescription>\n </DialogHeader>\n {iframeSrc ? (\n <iframe src={iframeSrc} title=\"Payment\" className=\"h-[400px] w-full border-0\" />\n ) : (\n <div className=\"flex h-[400px] items-center justify-center\">\n <p className=\"text-muted-foreground\">Loading payment form...</p>\n </div>\n )}\n <DialogFooter>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"bg-secondary text-secondary-foreground hover:bg-secondary/80 inline-flex h-10 items-center justify-center rounded-md px-4 py-2 text-sm font-medium\"\n >\n {closeLabel}\n </button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAEA,YAAY,WAAW;AAmGf,SACE,KADF;AA9ED,SAAS,WAAW,MAAmC;AAC5D,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,QAAQ,kBAAkB,KAAK,IAAI;AACzC,WAAO,QAAQ,CAAC,KAAK;AAAA,EACvB;AAEA,MAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,UAAM,MAAM;AAEZ,eAAW,OAAO,CAAC,OAAO,OAAO,WAAW,SAAS,GAAG;AACtD,UAAI,OAAO,IAAI,GAAG,MAAM,YAAY,IAAI,GAAG,GAAG;AAC5C,eAAO,IAAI,GAAG;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,OAAO,IAAI,MAAM,MAAM,YAAY,IAAI,MAAM,MAAM,MAAM;AAC3D,YAAM,SAAS,IAAI,MAAM;AACzB,UAAI,OAAO,OAAO,KAAK,MAAM,YAAY,OAAO,KAAK,GAAG;AACtD,eAAO,OAAO,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAyBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AACf,GAAsB;AACpB,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,QAAQ,CAAC,aAAc;AAE5B,aAAS,cAAc,OAAqB;AAC1C,YAAM,MAAM,WAAW,MAAM,IAAI;AACjC,UAAI,KAAK;AACP,qBAAc,GAAG;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,MAAM,YAAY,CAAC;AAEvB,QAAM,YAAY,UACd,GAAG,QAAQ,UAAU,uBAAuB,QAAQ,kBAAkB,KACtE;AAEJ,SACE,oBAAC,UAAO,MAAY,cAClB,+BAAC,iBAAc,WAAU,eACvB;AAAA,yBAAC,gBACC;AAAA,0BAAC,eAAa,iBAAM;AAAA,MACpB,oBAAC,qBAAkB,WAAU,WAAU,2CAA6B;AAAA,OACtE;AAAA,IACC,YACC,oBAAC,YAAO,KAAK,WAAW,OAAM,WAAU,WAAU,6BAA4B,IAE9E,oBAAC,SAAI,WAAU,8CACb,8BAAC,OAAE,WAAU,yBAAwB,qCAAuB,GAC9D;AAAA,IAEF,oBAAC,gBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM,aAAa,KAAK;AAAA,QACjC,WAAU;AAAA,QAET;AAAA;AAAA,IACH,GACF;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/payment-modal.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\nimport { binFromString } from \"./rules\";\n\n// ---------------------------------------------------------------------------\n// BIN extraction utility\n// ---------------------------------------------------------------------------\n\n/**\n * Extract a card BIN from a postMessage payload.\n * Handles multiple formats returned by Element/Unified iframes:\n * - URL-encoded string with Bin= parameter\n * - Object with Bin, bin, CardBIN, or cardBin property\n * - Nested data.Bin structure\n */\nexport function extractBin(data: unknown): string | undefined {\n if (typeof data === \"string\") return binFromString(data);\n if (isRecord(data)) return binFromObject(data);\n return undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The value when it is a non-empty string. */\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : undefined;\n}\n\n/** The first non-empty of Bin, bin, CardBIN, cardBin, else a non-empty data.Bin. */\nfunction binFromObject(obj: Record<string, unknown>): string | undefined {\n for (const key of [\"Bin\", \"bin\", \"CardBIN\", \"cardBin\"]) {\n const bin = nonEmptyString(obj[key]);\n if (bin) return bin;\n }\n const nested = obj[\"data\"];\n return isRecord(nested) ? nonEmptyString(nested[\"Bin\"]) : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal types\n// ---------------------------------------------------------------------------\n\nexport interface PaymentModalProps {\n /** Whether the modal is open. */\n open: boolean;\n /** Callback when open state changes. */\n onOpenChange: (open: boolean) => void;\n /** Unified/Element iframe configuration. Modal shows loading when null. */\n unified: { uiEndpoint: string; transactionSetupId: string } | null;\n /** Called when a card BIN is captured from the iframe postMessage. */\n onBinCapture?: (bin: string) => void;\n /** Modal title. Defaults to \"Enter Credit Card Details\". */\n title?: string;\n /** Close button label. Defaults to \"Close\". */\n closeLabel?: string;\n}\n\n// ---------------------------------------------------------------------------\n// PaymentModal component\n// ---------------------------------------------------------------------------\n\nexport function PaymentModal({\n open,\n onOpenChange,\n unified,\n onBinCapture,\n title = \"Enter Credit Card Details\",\n closeLabel = \"Close\",\n}: PaymentModalProps) {\n React.useEffect(() => {\n if (!open || !onBinCapture) return;\n\n function handleMessage(event: MessageEvent) {\n const bin = extractBin(event.data);\n if (bin) {\n onBinCapture!(bin);\n }\n }\n\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [open, onBinCapture]);\n\n const iframeSrc = unified\n ? `${unified.uiEndpoint}?TransactionSetupID=${unified.transactionSetupId}`\n : undefined;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"sr-only\">Secure credit card entry form</DialogDescription>\n </DialogHeader>\n {iframeSrc ? (\n <iframe src={iframeSrc} title=\"Payment\" className=\"h-[400px] w-full border-0\" />\n ) : (\n <div className=\"flex h-[400px] items-center justify-center\">\n <p className=\"text-muted-foreground\">Loading payment form...</p>\n </div>\n )}\n <DialogFooter>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"bg-secondary text-secondary-foreground hover:bg-secondary/80 inline-flex h-10 items-center justify-center rounded-md px-4 py-2 text-sm font-medium\"\n >\n {closeLabel}\n </button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAEA,YAAY,WAAW;AAmGf,SACE,KADF;AA7ED,SAAS,WAAW,MAAmC;AAC5D,MAAI,OAAO,SAAS,SAAU,QAAO,cAAc,IAAI;AACvD,MAAI,SAAS,IAAI,EAAG,QAAO,cAAc,IAAI;AAC7C,SAAO;AACT;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAGA,SAAS,eAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,QAAQ,QAAQ;AACtD;AAGA,SAAS,cAAc,KAAkD;AACvE,aAAW,OAAO,CAAC,OAAO,OAAO,WAAW,SAAS,GAAG;AACtD,UAAM,MAAM,eAAe,IAAI,GAAG,CAAC;AACnC,QAAI,IAAK,QAAO;AAAA,EAClB;AACA,QAAM,SAAS,IAAI,MAAM;AACzB,SAAO,SAAS,MAAM,IAAI,eAAe,OAAO,KAAK,CAAC,IAAI;AAC5D;AAyBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AACf,GAAsB;AACpB,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,QAAQ,CAAC,aAAc;AAE5B,aAAS,cAAc,OAAqB;AAC1C,YAAM,MAAM,WAAW,MAAM,IAAI;AACjC,UAAI,KAAK;AACP,qBAAc,GAAG;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,MAAM,YAAY,CAAC;AAEvB,QAAM,YAAY,UACd,GAAG,QAAQ,UAAU,uBAAuB,QAAQ,kBAAkB,KACtE;AAEJ,SACE,oBAAC,UAAO,MAAY,cAClB,+BAAC,iBAAc,WAAU,eACvB;AAAA,yBAAC,gBACC;AAAA,0BAAC,eAAa,iBAAM;AAAA,MACpB,oBAAC,qBAAkB,WAAU,WAAU,2CAA6B;AAAA,OACtE;AAAA,IACC,YACC,oBAAC,YAAO,KAAK,WAAW,OAAM,WAAU,WAAU,6BAA4B,IAE9E,oBAAC,SAAI,WAAU,8CACb,8BAAC,OAAE,WAAU,yBAAwB,qCAAuB,GAC9D;AAAA,IAEF,oBAAC,gBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM,aAAa,KAAK;AAAA,QACjC,WAAU;AAAA,QAET;AAAA;AAAA,IACH,GACF;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/popover.cjs","../src/popover.tsx"],"names":[],"mappings":"AAAA,uWAAY;AACZ,YAAY;AACZ;AACA;ACAA,2EAAuB;AACvB,sHAAkC;AAClC,sDAAmB;AAaf,+CAAA;AAXJ,IAAM,QAAA,EAA2B,gBAAA,CAAA,IAAA;AAEjC,IAAM,eAAA,EAAkC,gBAAA,CAAA,OAAA;AAExC,IAAM,cAAA,EAAiC,gBAAA,CAAA,MAAA;AAEvC,IAAM,eAAA,EAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,CAAA,EAAG,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,mBAC5D,6BAAA,gBAAkB,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAA,6BAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,qBAAA;AAAA,MACT,4aAAA;AAAA,MACA;AAAA,IACF,CAAA;AAAA,IACC,GAAG;AAAA,EAAA;AACN,EAAA,CACF,CACD,CAAA;AACD,cAAA,CAAe,YAAA,EAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA;ADLtD;AACE;AACA;AACA;AACA;AACF,mJAAC","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/popover.cjs","sourcesContent":[null,"/** Styled wrapper around @radix-ui/react-popover. See https://www.radix-ui.com/primitives/docs/components/popover */\n\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n"]}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/popover.cjs","../src/popover.tsx"],"names":[],"mappings":"AAAA,uWAAY;AACZ,YAAY;AACZ;AACA;ACAA,2EAAuB;AACvB,sHAAkC;AAClC,sDAAmB;AAaf,+CAAA;AAXJ,IAAM,QAAA,EAA2B,gBAAA,CAAA,IAAA;AAEjC,IAAM,eAAA,EAAkC,gBAAA,CAAA,OAAA;AAExC,IAAM,cAAA,EAAiC,gBAAA,CAAA,MAAA;AAEvC,IAAM,eAAA,EAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,CAAA,EAAG,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,mBAC5D,6BAAA,gBAAkB,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAA,6BAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,qBAAA;AAAA,MACT,4aAAA;AAAA,MACA;AAAA,IACF,CAAA;AAAA,IACC,GAAG;AAAA,EAAA;AACN,EAAA,CACF,CACD,CAAA;AACD,cAAA,CAAe,YAAA,EAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA;ADLtD;AACE;AACA;AACA;AACA;AACF,mJAAC","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/popover.cjs","sourcesContent":[null,"/** Styled wrapper around @radix-ui/react-popover. See https://www.radix-ui.com/primitives/docs/components/popover */\n\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n"]}
package/dist/popover.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- import * as React from 'react';
2
- import * as PopoverPrimitive from '@radix-ui/react-popover';
3
-
1
+ import * as React from "react";
2
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
4
3
  declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
5
4
  declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
6
5
  declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
7
6
  declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
-
9
- export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
7
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
8
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../src/popover.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAG5D,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,QAAA,MAAM,aAAa,4GAA0B,CAAC;AAE9C,QAAA,MAAM,cAAc,gKAgBlB,CAAC;AAGH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -1,8 +1,30 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/price-format.ts
2
+ var formatDefaults = {
3
+ currency: "USD",
4
+ locale: "en-US",
5
+ precision: 2
6
+ };
7
+ function createFormatPrice(config = {}) {
8
+ const {
9
+ currency,
10
+ locale,
11
+ precision: defaultPrecision
12
+ } = {
13
+ ...formatDefaults,
14
+ ...config
15
+ };
16
+ return function formatPrice(value, options) {
17
+ const p = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.precision]), () => ( defaultPrecision));
18
+ const displayValue = _optionalChain([options, 'optionalAccess', _2 => _2.quantity]) !== void 0 ? value * options.quantity : value;
19
+ return new Intl.NumberFormat(locale, {
20
+ style: "currency",
21
+ currency,
22
+ minimumFractionDigits: p,
23
+ maximumFractionDigits: p
24
+ }).format(displayValue);
25
+ };
26
+ }
2
27
 
3
28
 
4
- var _chunkVLZDTWPRcjs = require('./chunk-VLZDTWPR.cjs');
5
-
6
-
7
- exports.createFormatPrice = _chunkVLZDTWPRcjs.createFormatPrice;
29
+ exports.createFormatPrice = createFormatPrice;
8
30
  //# sourceMappingURL=price-format.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/price-format.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,gEAAC","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/price-format.cjs"}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/price-format.cjs","../src/price-format.ts"],"names":[],"mappings":"AAAA;ACqBA,IAAM,eAAA,EAA8C;AAAA,EAClD,QAAA,EAAU,KAAA;AAAA,EACV,MAAA,EAAQ,OAAA;AAAA,EACR,SAAA,EAAW;AACb,CAAA;AAMO,SAAS,iBAAA,CACd,OAAA,EAA4B,CAAC,CAAA,EAC4B;AACzD,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA,EAAW;AAAA,EACb,EAAA,EAAI;AAAA,IACF,GAAG,cAAA;AAAA,IACH,GAAG;AAAA,EACL,CAAA;AAEA,EAAA,OAAO,SAAS,WAAA,CAAY,KAAA,EAAe,OAAA,EAAsC;AAC/E,IAAA,MAAM,EAAA,mCAAI,OAAA,2BAAS,WAAA,UAAa,kBAAA;AAChC,IAAA,MAAM,aAAA,kBAAe,OAAA,6BAAS,WAAA,IAAa,KAAA,EAAA,EAAY,MAAA,EAAQ,OAAA,CAAQ,SAAA,EAAW,KAAA;AAClF,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,MACnC,KAAA,EAAO,UAAA;AAAA,MACP,QAAA;AAAA,MACA,qBAAA,EAAuB,CAAA;AAAA,MACvB,qBAAA,EAAuB;AAAA,IACzB,CAAC,CAAA,CAAE,MAAA,CAAO,YAAY,CAAA;AAAA,EACxB,CAAA;AACF;AD3BA;AACE;AACF,8CAAC","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/price-format.cjs","sourcesContent":[null,"// ---------------------------------------------------------------------------\n// Pure formatting logic — no React, no \"use client\".\n// Safe to import in server components.\n// ---------------------------------------------------------------------------\n\nexport interface PriceFormatConfig {\n /** ISO 4217 currency code. Default: `\"USD\"`. */\n currency?: string;\n /** BCP 47 locale. Default: `\"en-US\"`. */\n locale?: string;\n /** Decimal places. Default: `2`. */\n precision?: number;\n}\n\nexport interface FormatPriceOptions {\n /** Override precision for this call. */\n precision?: number;\n /** Multiply value by quantity before formatting. */\n quantity?: number;\n}\n\nconst formatDefaults: Required<PriceFormatConfig> = {\n currency: \"USD\",\n locale: \"en-US\",\n precision: 2,\n};\n\n/**\n * Create a pure price-formatting function. Server-safe (no React dependency).\n * Use {@link createPrice} in client components for the full Price component.\n */\nexport function createFormatPrice(\n config: PriceFormatConfig = {},\n): (value: number, options?: FormatPriceOptions) => string {\n const {\n currency,\n locale,\n precision: defaultPrecision,\n } = {\n ...formatDefaults,\n ...config,\n };\n\n return function formatPrice(value: number, options?: FormatPriceOptions): string {\n const p = options?.precision ?? defaultPrecision;\n const displayValue = options?.quantity !== undefined ? value * options.quantity : value;\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n minimumFractionDigits: p,\n maximumFractionDigits: p,\n }).format(displayValue);\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- interface PriceFormatConfig {
1
+ export interface PriceFormatConfig {
2
2
  /** ISO 4217 currency code. Default: `"USD"`. */
3
3
  currency?: string;
4
4
  /** BCP 47 locale. Default: `"en-US"`. */
@@ -6,7 +6,7 @@ interface PriceFormatConfig {
6
6
  /** Decimal places. Default: `2`. */
7
7
  precision?: number;
8
8
  }
9
- interface FormatPriceOptions {
9
+ export interface FormatPriceOptions {
10
10
  /** Override precision for this call. */
11
11
  precision?: number;
12
12
  /** Multiply value by quantity before formatting. */
@@ -16,6 +16,5 @@ interface FormatPriceOptions {
16
16
  * Create a pure price-formatting function. Server-safe (no React dependency).
17
17
  * Use {@link createPrice} in client components for the full Price component.
18
18
  */
19
- declare function createFormatPrice(config?: PriceFormatConfig): (value: number, options?: FormatPriceOptions) => string;
20
-
21
- export { type FormatPriceOptions, type PriceFormatConfig, createFormatPrice };
19
+ export declare function createFormatPrice(config?: PriceFormatConfig): (value: number, options?: FormatPriceOptions) => string;
20
+ //# sourceMappingURL=price-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-format.d.ts","sourceRoot":"","sources":["../src/price-format.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,GAAE,iBAAsB,GAC7B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,MAAM,CAoBzD"}
@@ -1,7 +1,29 @@
1
- "use client";
2
- import {
3
- createFormatPrice
4
- } from "./chunk-DZDC4HHK.js";
1
+ // src/price-format.ts
2
+ var formatDefaults = {
3
+ currency: "USD",
4
+ locale: "en-US",
5
+ precision: 2
6
+ };
7
+ function createFormatPrice(config = {}) {
8
+ const {
9
+ currency,
10
+ locale,
11
+ precision: defaultPrecision
12
+ } = {
13
+ ...formatDefaults,
14
+ ...config
15
+ };
16
+ return function formatPrice(value, options) {
17
+ const p = options?.precision ?? defaultPrecision;
18
+ const displayValue = options?.quantity !== void 0 ? value * options.quantity : value;
19
+ return new Intl.NumberFormat(locale, {
20
+ style: "currency",
21
+ currency,
22
+ minimumFractionDigits: p,
23
+ maximumFractionDigits: p
24
+ }).format(displayValue);
25
+ };
26
+ }
5
27
  export {
6
28
  createFormatPrice
7
29
  };
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../src/price-format.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Pure formatting logic — no React, no \"use client\".\n// Safe to import in server components.\n// ---------------------------------------------------------------------------\n\nexport interface PriceFormatConfig {\n /** ISO 4217 currency code. Default: `\"USD\"`. */\n currency?: string;\n /** BCP 47 locale. Default: `\"en-US\"`. */\n locale?: string;\n /** Decimal places. Default: `2`. */\n precision?: number;\n}\n\nexport interface FormatPriceOptions {\n /** Override precision for this call. */\n precision?: number;\n /** Multiply value by quantity before formatting. */\n quantity?: number;\n}\n\nconst formatDefaults: Required<PriceFormatConfig> = {\n currency: \"USD\",\n locale: \"en-US\",\n precision: 2,\n};\n\n/**\n * Create a pure price-formatting function. Server-safe (no React dependency).\n * Use {@link createPrice} in client components for the full Price component.\n */\nexport function createFormatPrice(\n config: PriceFormatConfig = {},\n): (value: number, options?: FormatPriceOptions) => string {\n const {\n currency,\n locale,\n precision: defaultPrecision,\n } = {\n ...formatDefaults,\n ...config,\n };\n\n return function formatPrice(value: number, options?: FormatPriceOptions): string {\n const p = options?.precision ?? defaultPrecision;\n const displayValue = options?.quantity !== undefined ? value * options.quantity : value;\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n minimumFractionDigits: p,\n maximumFractionDigits: p,\n }).format(displayValue);\n };\n}\n"],"mappings":";AAqBA,IAAM,iBAA8C;AAAA,EAClD,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AACb;AAMO,SAAS,kBACd,SAA4B,CAAC,GAC4B;AACzD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb,IAAI;AAAA,IACF,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,SAAO,SAAS,YAAY,OAAe,SAAsC;AAC/E,UAAM,IAAI,SAAS,aAAa;AAChC,UAAM,eAAe,SAAS,aAAa,SAAY,QAAQ,QAAQ,WAAW;AAClF,WAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,MACnC,OAAO;AAAA,MACP;AAAA,MACA,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,IACzB,CAAC,EAAE,OAAO,YAAY;AAAA,EACxB;AACF;","names":[]}
package/dist/price.cjs CHANGED
@@ -1,11 +1,40 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
  "use client";
3
3
 
4
4
 
5
- var _chunkVLZDTWPRcjs = require('./chunk-VLZDTWPR.cjs');
5
+ var _chunkEEJYDSXRcjs = require('./chunk-EEJYDSXR.cjs');
6
6
 
7
7
  // src/price.tsx
8
8
  var _web = require('@simpleapps-com/augur-utils/web');
9
+
10
+ // src/price-format.ts
11
+ var formatDefaults = {
12
+ currency: "USD",
13
+ locale: "en-US",
14
+ precision: 2
15
+ };
16
+ function createFormatPrice(config = {}) {
17
+ const {
18
+ currency,
19
+ locale,
20
+ precision: defaultPrecision
21
+ } = {
22
+ ...formatDefaults,
23
+ ...config
24
+ };
25
+ return function formatPrice(value, options) {
26
+ const p = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.precision]), () => ( defaultPrecision));
27
+ const displayValue = _optionalChain([options, 'optionalAccess', _2 => _2.quantity]) !== void 0 ? value * options.quantity : value;
28
+ return new Intl.NumberFormat(locale, {
29
+ style: "currency",
30
+ currency,
31
+ minimumFractionDigits: p,
32
+ maximumFractionDigits: p
33
+ }).format(displayValue);
34
+ };
35
+ }
36
+
37
+ // src/price.tsx
9
38
  var _jsxruntime = require('react/jsx-runtime');
10
39
  var defaults = {
11
40
  currency: "USD",
@@ -23,7 +52,7 @@ function createPrice(config = {}) {
23
52
  uomSeparator,
24
53
  classNames: factoryClassNames
25
54
  } = { ...defaults, ...config };
26
- const formatPrice = _chunkVLZDTWPRcjs.createFormatPrice.call(void 0, { currency, locale, precision });
55
+ const formatPrice = createFormatPrice({ currency, locale, precision });
27
56
  const slotKeys = [
28
57
  "amount",
29
58
  "uom",
@@ -36,7 +65,7 @@ function createPrice(config = {}) {
36
65
  if (!factoryClassNames && !instance) return {};
37
66
  const result = {};
38
67
  for (const key of slotKeys) {
39
- const merged = _web.cn.call(void 0, _optionalChain([factoryClassNames, 'optionalAccess', _ => _[key]]), _optionalChain([instance, 'optionalAccess', _2 => _2[key]]));
68
+ const merged = _web.cn.call(void 0, _optionalChain([factoryClassNames, 'optionalAccess', _3 => _3[key]]), _optionalChain([instance, 'optionalAccess', _4 => _4[key]]));
40
69
  if (merged) result[key] = merged;
41
70
  }
42
71
  return result;
@@ -65,7 +94,7 @@ function createPrice(config = {}) {
65
94
  classNames: instanceClassNames
66
95
  } = props;
67
96
  const slots = mergeClassNames(instanceClassNames);
68
- if (value === 0 && originalValue === void 0) {
97
+ if (_chunkEEJYDSXRcjs.priceViewOf.call(void 0, false, value === 0, originalValue !== void 0) === "zero-label") {
69
98
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _web.cn.call(void 0, "text-muted-foreground", slots.zero, className), children: zeroLabel });
70
99
  }
71
100
  const formatted = formatPrice(value, {
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/price.cjs","../src/price.tsx"],"names":["slots"],"mappings":"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","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/price.cjs","sourcesContent":[null,"\"use client\";\n\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { createFormatPrice } from \"./price-format\";\nimport type { FormatPriceOptions } from \"./price-format\";\n\n// Re-export server-safe types so client consumers get everything from one path\nexport type { PriceFormatConfig, FormatPriceOptions } from \"./price-format\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PriceClassNames {\n /** The formatted amount text. */\n amount?: string;\n /** The UOM label (e.g. \"EACH\"). */\n uom?: string;\n /** The separator between price and UOM (e.g. \"/\"). */\n separator?: string;\n /** The zero-price label (e.g. \"Call for Price\"). */\n zero?: string;\n /** The loading skeleton. */\n skeleton?: string;\n /** The strikethrough original price. */\n original?: string;\n}\n\nexport interface PriceConfig {\n /** ISO 4217 currency code. Default: `\"USD\"`. */\n currency?: string;\n /** BCP 47 locale. Default: `\"en-US\"`. */\n locale?: string;\n /** Decimal places. Default: `2`. */\n precision?: number;\n /** Label shown when value is 0. Default: `\"Call for Price\"`. */\n zeroLabel?: string;\n /** Separator between price and UOM. Default: `\"/\"`. */\n uomSeparator?: string;\n /** Default class names for sub-elements. */\n classNames?: PriceClassNames;\n}\n\ntype PricePropsBase = {\n /** Unit price. */\n value?: number;\n /** Quantity — multiplied by value for extended price. */\n quantity?: number;\n /** Unit of measure label (e.g. \"EACH\", \"FT\"). */\n uom?: string;\n /** Override precision for this instance. */\n precision?: number;\n /** Original price shown as strikethrough for sale display. */\n originalValue?: number;\n /** Additional class names for the root element. */\n className?: string;\n /** Class names for sub-elements, merged with factory defaults. */\n classNames?: PriceClassNames;\n};\n\nexport type PriceProps =\n | (PricePropsBase & { loading?: false })\n | { loading: true; className?: string; classNames?: PriceClassNames };\n\nexport interface CreatePriceResult {\n Price: React.FC<PriceProps>;\n formatPrice: (value: number, options?: FormatPriceOptions) => string;\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nconst defaults = {\n currency: \"USD\",\n locale: \"en-US\",\n precision: 2,\n zeroLabel: \"Call for Price\",\n uomSeparator: \"/\",\n} as const;\n\n/**\n * Factory that creates a `Price` component and a `formatPrice` function\n * pre-configured with site-level currency/locale/precision.\n *\n * @example\n * ```tsx\n * // lib/price.ts -- one-time site config\n * import { createPrice } from \"@simpleapps-com/augur-web/price\";\n * export const { Price, formatPrice } = createPrice({\n * currency: \"USD\",\n * zeroLabel: \"Call for Price\",\n * });\n *\n * // components/ProductCard.tsx\n * <Price value={item.price1} uom={item.default_selling_unit} />\n * ```\n */\nexport function createPrice(config: PriceConfig = {}): CreatePriceResult {\n const {\n currency,\n locale,\n precision,\n zeroLabel,\n uomSeparator,\n classNames: factoryClassNames,\n } = { ...defaults, ...config };\n\n const formatPrice = createFormatPrice({ currency, locale, precision });\n\n const slotKeys: (keyof PriceClassNames)[] = [\n \"amount\",\n \"uom\",\n \"separator\",\n \"zero\",\n \"skeleton\",\n \"original\",\n ];\n\n function mergeClassNames(instance?: PriceClassNames): PriceClassNames {\n if (!factoryClassNames && !instance) return {};\n const result: PriceClassNames = {};\n for (const key of slotKeys) {\n const merged = cn(factoryClassNames?.[key], instance?.[key]);\n if (merged) result[key] = merged;\n }\n return result;\n }\n\n function Price(props: PriceProps) {\n if (\"loading\" in props && props.loading) {\n const slots = mergeClassNames(props.classNames);\n return (\n <span\n className={cn(\n \"bg-muted inline-block h-4 w-16 animate-pulse rounded\",\n slots.skeleton,\n props.className,\n )}\n />\n );\n }\n\n const {\n value = 0,\n quantity,\n uom,\n precision: instancePrecision,\n originalValue,\n className,\n classNames: instanceClassNames,\n } = props as PricePropsBase;\n\n const slots = mergeClassNames(instanceClassNames);\n\n if (value === 0 && originalValue === undefined) {\n return (\n <span className={cn(\"text-muted-foreground\", slots.zero, className)}>{zeroLabel}</span>\n );\n }\n\n const formatted = formatPrice(value, {\n precision: instancePrecision,\n quantity,\n });\n\n return (\n <span className={className}>\n {originalValue !== undefined && (\n <s className={cn(\"text-muted-foreground mr-1\", slots.original)}>\n {formatPrice(originalValue, { precision: instancePrecision })}\n </s>\n )}\n <span className={slots.amount}>{formatted}</span>\n {uom && (\n <>\n <span className={cn(\"ml-1\", slots.separator)}>{uomSeparator}</span>\n <span className={cn(\"text-muted-foreground ml-1\", slots.uom)}>{uom}</span>\n </>\n )}\n </span>\n );\n }\n\n Price.displayName = \"Price\";\n\n return { Price, formatPrice };\n}\n"]}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/price.cjs","../src/price.tsx","../src/price-format.ts"],"names":["slots"],"mappings":"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","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/price.cjs","sourcesContent":[null,"\"use client\";\n\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { createFormatPrice } from \"./price-format\";\nimport type { FormatPriceOptions } from \"./price-format\";\nimport { priceViewOf } from \"./rules\";\n\n// Re-export server-safe types so client consumers get everything from one path\nexport type { PriceFormatConfig, FormatPriceOptions } from \"./price-format\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PriceClassNames {\n /** The formatted amount text. */\n amount?: string;\n /** The UOM label (e.g. \"EACH\"). */\n uom?: string;\n /** The separator between price and UOM (e.g. \"/\"). */\n separator?: string;\n /** The zero-price label (e.g. \"Call for Price\"). */\n zero?: string;\n /** The loading skeleton. */\n skeleton?: string;\n /** The strikethrough original price. */\n original?: string;\n}\n\nexport interface PriceConfig {\n /** ISO 4217 currency code. Default: `\"USD\"`. */\n currency?: string;\n /** BCP 47 locale. Default: `\"en-US\"`. */\n locale?: string;\n /** Decimal places. Default: `2`. */\n precision?: number;\n /** Label shown when value is 0. Default: `\"Call for Price\"`. */\n zeroLabel?: string;\n /** Separator between price and UOM. Default: `\"/\"`. */\n uomSeparator?: string;\n /** Default class names for sub-elements. */\n classNames?: PriceClassNames;\n}\n\ntype PricePropsBase = {\n /** Unit price. */\n value?: number;\n /** Quantity — multiplied by value for extended price. */\n quantity?: number;\n /** Unit of measure label (e.g. \"EACH\", \"FT\"). */\n uom?: string;\n /** Override precision for this instance. */\n precision?: number;\n /** Original price shown as strikethrough for sale display. */\n originalValue?: number;\n /** Additional class names for the root element. */\n className?: string;\n /** Class names for sub-elements, merged with factory defaults. */\n classNames?: PriceClassNames;\n};\n\nexport type PriceProps =\n | (PricePropsBase & { loading?: false })\n | { loading: true; className?: string; classNames?: PriceClassNames };\n\nexport interface CreatePriceResult {\n Price: React.FC<PriceProps>;\n formatPrice: (value: number, options?: FormatPriceOptions) => string;\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nconst defaults = {\n currency: \"USD\",\n locale: \"en-US\",\n precision: 2,\n zeroLabel: \"Call for Price\",\n uomSeparator: \"/\",\n} as const;\n\n/**\n * Factory that creates a `Price` component and a `formatPrice` function\n * pre-configured with site-level currency/locale/precision.\n *\n * @example\n * ```tsx\n * // lib/price.ts -- one-time site config\n * import { createPrice } from \"@simpleapps-com/augur-web/price\";\n * export const { Price, formatPrice } = createPrice({\n * currency: \"USD\",\n * zeroLabel: \"Call for Price\",\n * });\n *\n * // components/ProductCard.tsx\n * <Price value={item.price1} uom={item.default_selling_unit} />\n * ```\n */\nexport function createPrice(config: PriceConfig = {}): CreatePriceResult {\n const {\n currency,\n locale,\n precision,\n zeroLabel,\n uomSeparator,\n classNames: factoryClassNames,\n } = { ...defaults, ...config };\n\n const formatPrice = createFormatPrice({ currency, locale, precision });\n\n const slotKeys: (keyof PriceClassNames)[] = [\n \"amount\",\n \"uom\",\n \"separator\",\n \"zero\",\n \"skeleton\",\n \"original\",\n ];\n\n function mergeClassNames(instance?: PriceClassNames): PriceClassNames {\n if (!factoryClassNames && !instance) return {};\n const result: PriceClassNames = {};\n for (const key of slotKeys) {\n const merged = cn(factoryClassNames?.[key], instance?.[key]);\n if (merged) result[key] = merged;\n }\n return result;\n }\n\n function Price(props: PriceProps) {\n if (\"loading\" in props && props.loading) {\n const slots = mergeClassNames(props.classNames);\n return (\n <span\n className={cn(\n \"bg-muted inline-block h-4 w-16 animate-pulse rounded\",\n slots.skeleton,\n props.className,\n )}\n />\n );\n }\n\n const {\n value = 0,\n quantity,\n uom,\n precision: instancePrecision,\n originalValue,\n className,\n classNames: instanceClassNames,\n } = props as PricePropsBase;\n\n const slots = mergeClassNames(instanceClassNames);\n\n // The loading skeleton is rendered above, so the view here is never \"skeleton\".\n if (priceViewOf(false, value === 0, originalValue !== undefined) === \"zero-label\") {\n return (\n <span className={cn(\"text-muted-foreground\", slots.zero, className)}>{zeroLabel}</span>\n );\n }\n\n const formatted = formatPrice(value, {\n precision: instancePrecision,\n quantity,\n });\n\n return (\n <span className={className}>\n {originalValue !== undefined && (\n <s className={cn(\"text-muted-foreground mr-1\", slots.original)}>\n {formatPrice(originalValue, { precision: instancePrecision })}\n </s>\n )}\n <span className={slots.amount}>{formatted}</span>\n {uom && (\n <>\n <span className={cn(\"ml-1\", slots.separator)}>{uomSeparator}</span>\n <span className={cn(\"text-muted-foreground ml-1\", slots.uom)}>{uom}</span>\n </>\n )}\n </span>\n );\n }\n\n Price.displayName = \"Price\";\n\n return { Price, formatPrice };\n}\n","// ---------------------------------------------------------------------------\n// Pure formatting logic — no React, no \"use client\".\n// Safe to import in server components.\n// ---------------------------------------------------------------------------\n\nexport interface PriceFormatConfig {\n /** ISO 4217 currency code. Default: `\"USD\"`. */\n currency?: string;\n /** BCP 47 locale. Default: `\"en-US\"`. */\n locale?: string;\n /** Decimal places. Default: `2`. */\n precision?: number;\n}\n\nexport interface FormatPriceOptions {\n /** Override precision for this call. */\n precision?: number;\n /** Multiply value by quantity before formatting. */\n quantity?: number;\n}\n\nconst formatDefaults: Required<PriceFormatConfig> = {\n currency: \"USD\",\n locale: \"en-US\",\n precision: 2,\n};\n\n/**\n * Create a pure price-formatting function. Server-safe (no React dependency).\n * Use {@link createPrice} in client components for the full Price component.\n */\nexport function createFormatPrice(\n config: PriceFormatConfig = {},\n): (value: number, options?: FormatPriceOptions) => string {\n const {\n currency,\n locale,\n precision: defaultPrecision,\n } = {\n ...formatDefaults,\n ...config,\n };\n\n return function formatPrice(value: number, options?: FormatPriceOptions): string {\n const p = options?.precision ?? defaultPrecision;\n const displayValue = options?.quantity !== undefined ? value * options.quantity : value;\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n minimumFractionDigits: p,\n maximumFractionDigits: p,\n }).format(displayValue);\n };\n}\n"]}
package/dist/price.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- import { FormatPriceOptions } from './price-format.js';
2
- export { PriceFormatConfig } from './price-format.js';
3
-
4
- interface PriceClassNames {
1
+ import type { FormatPriceOptions } from "./price-format";
2
+ export type { PriceFormatConfig, FormatPriceOptions } from "./price-format";
3
+ export interface PriceClassNames {
5
4
  /** The formatted amount text. */
6
5
  amount?: string;
7
6
  /** The UOM label (e.g. "EACH"). */
@@ -15,7 +14,7 @@ interface PriceClassNames {
15
14
  /** The strikethrough original price. */
16
15
  original?: string;
17
16
  }
18
- interface PriceConfig {
17
+ export interface PriceConfig {
19
18
  /** ISO 4217 currency code. Default: `"USD"`. */
20
19
  currency?: string;
21
20
  /** BCP 47 locale. Default: `"en-US"`. */
@@ -45,14 +44,14 @@ type PricePropsBase = {
45
44
  /** Class names for sub-elements, merged with factory defaults. */
46
45
  classNames?: PriceClassNames;
47
46
  };
48
- type PriceProps = (PricePropsBase & {
47
+ export type PriceProps = (PricePropsBase & {
49
48
  loading?: false;
50
49
  }) | {
51
50
  loading: true;
52
51
  className?: string;
53
52
  classNames?: PriceClassNames;
54
53
  };
55
- interface CreatePriceResult {
54
+ export interface CreatePriceResult {
56
55
  Price: React.FC<PriceProps>;
57
56
  formatPrice: (value: number, options?: FormatPriceOptions) => string;
58
57
  }
@@ -73,6 +72,5 @@ interface CreatePriceResult {
73
72
  * <Price value={item.price1} uom={item.default_selling_unit} />
74
73
  * ```
75
74
  */
76
- declare function createPrice(config?: PriceConfig): CreatePriceResult;
77
-
78
- export { type CreatePriceResult, FormatPriceOptions, type PriceClassNames, type PriceConfig, type PriceProps, createPrice };
75
+ export declare function createPrice(config?: PriceConfig): CreatePriceResult;
76
+ //# sourceMappingURL=price.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../src/price.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAM5E,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,KAAK,cAAc,GAAG;IACpB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,CAAC,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACtC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,MAAM,CAAC;CACtE;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAE,WAAgB,GAAG,iBAAiB,CA0FvE"}