@simpleapps-com/augur-web 2.4.0 → 2026.11.2

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 (243) 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-DCXYO3RB.js → chunk-C6K7FZNX.js} +7 -3
  31. package/dist/chunk-C6K7FZNX.js.map +1 -0
  32. package/dist/{chunk-AE4GLYJE.cjs → chunk-DMWSWL4B.cjs} +7 -3
  33. package/dist/chunk-DMWSWL4B.cjs.map +1 -0
  34. package/dist/chunk-GSR6SMQ2.cjs.map +1 -1
  35. package/dist/chunk-IO77MGHW.js +220 -0
  36. package/dist/chunk-IO77MGHW.js.map +1 -0
  37. package/dist/chunk-JXW4XE2P.cjs.map +1 -1
  38. package/dist/{chunk-OJ5G4BLS.js → chunk-KVHOMD4T.js} +15 -18
  39. package/dist/chunk-KVHOMD4T.js.map +1 -0
  40. package/dist/chunk-MAENILZP.cjs.map +1 -1
  41. package/dist/chunk-NEY26NNF.cjs.map +1 -1
  42. package/dist/chunk-QKWXJM4Q.cjs +220 -0
  43. package/dist/chunk-QKWXJM4Q.cjs.map +1 -0
  44. package/dist/chunk-T52J3SHP.cjs.map +1 -1
  45. package/dist/{chunk-I5NVZORX.cjs → chunk-TFP5RICB.cjs} +15 -18
  46. package/dist/chunk-TFP5RICB.cjs.map +1 -0
  47. package/dist/chunk-UFL6PVLI.cjs.map +1 -1
  48. package/dist/chunk-VL6L4GDA.cjs.map +1 -1
  49. package/dist/chunk-WJUDOEVB.cjs.map +1 -1
  50. package/dist/chunk-XGKBDPGD.cjs.map +1 -1
  51. package/dist/chunk-Z57QBVUC.cjs.map +1 -1
  52. package/dist/command.cjs +1 -0
  53. package/dist/command.cjs.map +1 -1
  54. package/dist/command.d.ts +13 -15
  55. package/dist/command.d.ts.map +1 -0
  56. package/dist/command.js +1 -0
  57. package/dist/command.js.map +1 -1
  58. package/dist/confirm-dialog.cjs.map +1 -1
  59. package/dist/confirm-dialog.d.ts +4 -6
  60. package/dist/confirm-dialog.d.ts.map +1 -0
  61. package/dist/data-table.cjs +35 -23
  62. package/dist/data-table.cjs.map +1 -1
  63. package/dist/data-table.d.ts +9 -11
  64. package/dist/data-table.d.ts.map +1 -0
  65. package/dist/data-table.js +34 -22
  66. package/dist/data-table.js.map +1 -1
  67. package/dist/detail-panel.cjs.map +1 -1
  68. package/dist/detail-panel.d.ts +6 -8
  69. package/dist/detail-panel.d.ts.map +1 -0
  70. package/dist/dialog.cjs.map +1 -1
  71. package/dist/dialog.d.ts +6 -8
  72. package/dist/dialog.d.ts.map +1 -0
  73. package/dist/dropdown-menu.cjs.map +1 -1
  74. package/dist/dropdown-menu.d.ts +5 -7
  75. package/dist/dropdown-menu.d.ts.map +1 -0
  76. package/dist/financing-widget.cjs +1 -3
  77. package/dist/financing-widget.cjs.map +1 -1
  78. package/dist/financing-widget.d.ts +5 -6
  79. package/dist/financing-widget.d.ts.map +1 -0
  80. package/dist/financing-widget.js +1 -3
  81. package/dist/financing-widget.js.map +1 -1
  82. package/dist/form-field.cjs.map +1 -1
  83. package/dist/form-field.d.ts +4 -5
  84. package/dist/form-field.d.ts.map +1 -0
  85. package/dist/form-input.cjs.map +1 -1
  86. package/dist/form-input.d.ts +4 -5
  87. package/dist/form-input.d.ts.map +1 -0
  88. package/dist/form-select.cjs.map +1 -1
  89. package/dist/form-select.d.ts +4 -5
  90. package/dist/form-select.d.ts.map +1 -0
  91. package/dist/form-textarea.cjs.map +1 -1
  92. package/dist/form-textarea.d.ts +4 -5
  93. package/dist/form-textarea.d.ts.map +1 -0
  94. package/dist/gtm.cjs +3 -2
  95. package/dist/gtm.cjs.map +1 -1
  96. package/dist/gtm.d.ts +12 -15
  97. package/dist/gtm.d.ts.map +1 -0
  98. package/dist/gtm.js +2 -1
  99. package/dist/input.cjs.map +1 -1
  100. package/dist/input.d.ts +4 -5
  101. package/dist/input.d.ts.map +1 -0
  102. package/dist/label.cjs.map +1 -1
  103. package/dist/label.d.ts +5 -7
  104. package/dist/label.d.ts.map +1 -0
  105. package/dist/list-view.cjs.map +1 -1
  106. package/dist/list-view.d.ts +5 -7
  107. package/dist/list-view.d.ts.map +1 -0
  108. package/dist/mdx-components.cjs +5 -2
  109. package/dist/mdx-components.cjs.map +1 -1
  110. package/dist/mdx-components.d.ts +11 -6
  111. package/dist/mdx-components.d.ts.map +1 -0
  112. package/dist/mdx-components.js +5 -2
  113. package/dist/mdx-components.js.map +1 -1
  114. package/dist/navigation-menu.cjs.map +1 -1
  115. package/dist/navigation-menu.d.ts +5 -7
  116. package/dist/navigation-menu.d.ts.map +1 -0
  117. package/dist/pagination.cjs +3 -2
  118. package/dist/pagination.cjs.map +1 -1
  119. package/dist/pagination.d.ts +10 -14
  120. package/dist/pagination.d.ts.map +1 -0
  121. package/dist/pagination.js +2 -1
  122. package/dist/payment-modal.cjs +20 -19
  123. package/dist/payment-modal.cjs.map +1 -1
  124. package/dist/payment-modal.d.ts +5 -7
  125. package/dist/payment-modal.d.ts.map +1 -0
  126. package/dist/payment-modal.js +19 -18
  127. package/dist/payment-modal.js.map +1 -1
  128. package/dist/popover.cjs.map +1 -1
  129. package/dist/popover.d.ts +4 -5
  130. package/dist/popover.d.ts.map +1 -0
  131. package/dist/price-format.cjs.map +1 -1
  132. package/dist/price-format.d.ts +4 -5
  133. package/dist/price-format.d.ts.map +1 -0
  134. package/dist/price.cjs +4 -1
  135. package/dist/price.cjs.map +1 -1
  136. package/dist/price.d.ts +8 -22
  137. package/dist/price.d.ts.map +1 -0
  138. package/dist/price.js +4 -1
  139. package/dist/price.js.map +1 -1
  140. package/dist/provider.cjs +4 -2
  141. package/dist/provider.cjs.map +1 -1
  142. package/dist/provider.d.ts +7 -10
  143. package/dist/provider.d.ts.map +1 -0
  144. package/dist/provider.js +3 -1
  145. package/dist/provider.js.map +1 -1
  146. package/dist/quantity-input.cjs +27 -40
  147. package/dist/quantity-input.cjs.map +1 -1
  148. package/dist/quantity-input.d.ts +4 -5
  149. package/dist/quantity-input.d.ts.map +1 -0
  150. package/dist/quantity-input.js +27 -40
  151. package/dist/quantity-input.js.map +1 -1
  152. package/dist/radio-group.cjs.map +1 -1
  153. package/dist/radio-group.d.ts +3 -4
  154. package/dist/radio-group.d.ts.map +1 -0
  155. package/dist/resource-tabs.cjs +1 -0
  156. package/dist/resource-tabs.cjs.map +1 -1
  157. package/dist/resource-tabs.d.ts +6 -8
  158. package/dist/resource-tabs.d.ts.map +1 -0
  159. package/dist/resource-tabs.js +1 -0
  160. package/dist/resource-tabs.js.map +1 -1
  161. package/dist/rules.d.ts +210 -0
  162. package/dist/rules.d.ts.map +1 -0
  163. package/dist/select.cjs.map +1 -1
  164. package/dist/select.d.ts +4 -5
  165. package/dist/select.d.ts.map +1 -0
  166. package/dist/separator.cjs.map +1 -1
  167. package/dist/separator.d.ts +3 -4
  168. package/dist/separator.d.ts.map +1 -0
  169. package/dist/session-replay.cjs +4 -2
  170. package/dist/session-replay.cjs.map +1 -1
  171. package/dist/session-replay.d.ts +4 -5
  172. package/dist/session-replay.d.ts.map +1 -0
  173. package/dist/session-replay.js +4 -2
  174. package/dist/session-replay.js.map +1 -1
  175. package/dist/skeleton.cjs.map +1 -1
  176. package/dist/skeleton.d.ts +2 -4
  177. package/dist/skeleton.d.ts.map +1 -0
  178. package/dist/spinner.cjs.map +1 -1
  179. package/dist/spinner.d.ts +2 -4
  180. package/dist/spinner.d.ts.map +1 -0
  181. package/dist/stock-label.cjs +14 -12
  182. package/dist/stock-label.cjs.map +1 -1
  183. package/dist/stock-label.d.ts +7 -7
  184. package/dist/stock-label.d.ts.map +1 -0
  185. package/dist/stock-label.js +14 -12
  186. package/dist/stock-label.js.map +1 -1
  187. package/dist/table.cjs.map +1 -1
  188. package/dist/table.d.ts +3 -4
  189. package/dist/table.d.ts.map +1 -0
  190. package/dist/tabs.cjs.map +1 -1
  191. package/dist/tabs.d.ts +4 -5
  192. package/dist/tabs.d.ts.map +1 -0
  193. package/dist/textarea.cjs.map +1 -1
  194. package/dist/textarea.d.ts +4 -5
  195. package/dist/textarea.d.ts.map +1 -0
  196. package/llms.txt +23 -38
  197. package/package.json +26 -17
  198. package/dist/accordion.d.cts +0 -9
  199. package/dist/add-to-cart-button.d.cts +0 -14
  200. package/dist/breadcrumb.d.cts +0 -22
  201. package/dist/breadcrumbs.d.cts +0 -31
  202. package/dist/button.d.cts +0 -27
  203. package/dist/card.d.cts +0 -10
  204. package/dist/checkbox.d.cts +0 -6
  205. package/dist/chunk-AE4GLYJE.cjs.map +0 -1
  206. package/dist/chunk-DCXYO3RB.js.map +0 -1
  207. package/dist/chunk-I5NVZORX.cjs.map +0 -1
  208. package/dist/chunk-OJ5G4BLS.js.map +0 -1
  209. package/dist/command.d.cts +0 -87
  210. package/dist/confirm-dialog.d.cts +0 -35
  211. package/dist/data-table.d.cts +0 -55
  212. package/dist/detail-panel.d.cts +0 -59
  213. package/dist/dialog.d.cts +0 -22
  214. package/dist/dropdown-menu.d.cts +0 -30
  215. package/dist/financing-widget.d.cts +0 -45
  216. package/dist/form-field.d.cts +0 -14
  217. package/dist/form-input.d.cts +0 -19
  218. package/dist/form-select.d.cts +0 -34
  219. package/dist/form-textarea.d.cts +0 -12
  220. package/dist/gtm.d.cts +0 -69
  221. package/dist/input.d.cts +0 -6
  222. package/dist/label.d.cts +0 -8
  223. package/dist/list-view.d.cts +0 -18
  224. package/dist/mdx-components.d.cts +0 -20
  225. package/dist/navigation-menu.d.cts +0 -15
  226. package/dist/pagination.d.cts +0 -50
  227. package/dist/payment-modal.d.cts +0 -30
  228. package/dist/popover.d.cts +0 -9
  229. package/dist/price-format.d.cts +0 -21
  230. package/dist/price.d.cts +0 -90
  231. package/dist/provider.d.cts +0 -47
  232. package/dist/quantity-input.d.cts +0 -33
  233. package/dist/radio-group.d.cts +0 -7
  234. package/dist/resource-tabs.d.cts +0 -33
  235. package/dist/select.d.cts +0 -15
  236. package/dist/separator.d.cts +0 -6
  237. package/dist/session-replay.d.cts +0 -44
  238. package/dist/skeleton.d.cts +0 -5
  239. package/dist/spinner.d.cts +0 -10
  240. package/dist/stock-label.d.cts +0 -47
  241. package/dist/table.d.cts +0 -12
  242. package/dist/tabs.d.cts +0 -9
  243. package/dist/textarea.d.cts +0 -6
@@ -1,6 +1,15 @@
1
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
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ var _chunkQKWXJM4Qcjs = require('./chunk-QKWXJM4Q.cjs');
12
+
4
13
  // src/quantity-input.tsx
5
14
  var _react = require('react'); var React = _interopRequireWildcard(_react);
6
15
  var _web = require('@simpleapps-com/augur-utils/web');
@@ -10,6 +19,13 @@ function roundToStep(value, step) {
10
19
  if (step <= 1) return value;
11
20
  return Math.ceil(value / step) * step;
12
21
  }
22
+ function committedQuantity(raw, min, max, step, decimals) {
23
+ if (raw.trim() === "") return min;
24
+ let parsed = parseFloat(raw);
25
+ if (isNaN(parsed)) parsed = min;
26
+ parsed = _chunkQKWXJM4Qcjs.clampQuantity.call(void 0, roundToStep(parsed, step), min, max);
27
+ return parseFloat(parsed.toFixed(decimals));
28
+ }
13
29
  var QuantityInput = React.memo(
14
30
  React.forwardRef(
15
31
  ({
@@ -31,52 +47,25 @@ var QuantityInput = React.memo(
31
47
  }, [value, decimals]);
32
48
  const commit = React.useCallback(
33
49
  (raw) => {
34
- if (raw.trim() === "") {
35
- setQtyStr(min.toFixed(decimals));
36
- onChange(min);
37
- return;
38
- }
39
- let parsed = parseFloat(raw);
40
- if (isNaN(parsed)) parsed = min;
41
- parsed = roundToStep(parsed, step);
42
- if (parsed < min) parsed = min;
43
- if (max !== void 0 && parsed > max) parsed = max;
44
- const rounded = parseFloat(parsed.toFixed(decimals));
45
- setQtyStr(rounded.toFixed(decimals));
46
- onChange(rounded);
50
+ const quantity = committedQuantity(raw, min, max, step, decimals);
51
+ setQtyStr(quantity.toFixed(decimals));
52
+ onChange(quantity);
47
53
  },
48
54
  [min, max, step, decimals, onChange]
49
55
  );
50
56
  const handleKeyDown = React.useCallback(
51
57
  (e) => {
52
- const allowed = ["Backspace", "Delete", "ArrowLeft", "ArrowRight", "Tab", "Enter"];
53
- if (allowed.includes(e.key)) {
54
- if (e.key === "Enter") {
55
- commit(qtyStr);
56
- }
57
- return;
58
- }
59
- if (decimals > 0 && e.key === "." && !qtyStr.includes(".")) {
60
- return;
61
- }
62
- if (e.key >= "0" && e.key <= "9") {
58
+ if (e.key === "Enter") {
59
+ commit(qtyStr);
63
60
  return;
64
61
  }
65
- e.preventDefault();
62
+ if (!_chunkQKWXJM4Qcjs.keyAllowed.call(void 0, e.key, decimals, qtyStr.includes("."))) e.preventDefault();
66
63
  },
67
64
  [decimals, qtyStr, commit]
68
65
  );
69
66
  const handleChange = React.useCallback(
70
67
  (e) => {
71
- const pattern = decimals > 0 ? /[^0-9.]/g : /[^0-9]/g;
72
- let cleaned = e.target.value.replace(pattern, "");
73
- if (decimals > 0) {
74
- const parts = cleaned.split(".");
75
- if (parts.length > 2) {
76
- cleaned = parts[0] + "." + parts.slice(1).join("");
77
- }
78
- }
79
- setQtyStr(cleaned);
68
+ setQtyStr(_chunkQKWXJM4Qcjs.cleanQtyFrom.call(void 0, e.target.value, decimals > 0, false, 0));
80
69
  },
81
70
  [decimals]
82
71
  );
@@ -84,15 +73,13 @@ var QuantityInput = React.memo(
84
73
  commit(qtyStr);
85
74
  }, [commit, qtyStr]);
86
75
  const handleDecrement = React.useCallback(() => {
87
- const next = Math.max(value - step, min);
88
- onChange(next);
76
+ onChange(_chunkQKWXJM4Qcjs.stepDown.call(void 0, value, step, min));
89
77
  }, [value, step, min, onChange]);
90
78
  const handleIncrement = React.useCallback(() => {
91
- const next = value + step;
92
- onChange(max !== void 0 ? Math.min(next, max) : next);
79
+ onChange(_chunkQKWXJM4Qcjs.stepUp.call(void 0, value, step, max));
93
80
  }, [value, step, max, onChange]);
94
- const minDisabled = disabled || value <= min;
95
- const maxDisabled = disabled || max !== void 0 && value >= max;
81
+ const minDisabled = _chunkQKWXJM4Qcjs.decreaseDisabled.call(void 0, disabled, value, min);
82
+ const maxDisabled = _chunkQKWXJM4Qcjs.increaseDisabled.call(void 0, disabled, value, max);
96
83
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _web.cn.call(void 0, "bg-background inline-flex items-center rounded-md border", className), children: [
97
84
  showStepper && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
98
85
  "button",
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/quantity-input.cjs","../src/quantity-input.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/quantity-input.cjs","sourcesContent":[null,"\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { LuMinus, LuPlus } from \"react-icons/lu\";\n\nexport interface QuantityInputProps {\n /** Current quantity value (controlled). */\n value: number;\n /** Called with the new quantity after validation and rounding. */\n onChange: (value: number) => void;\n /** Minimum allowed quantity. Default: `0`. */\n min?: number;\n /** Maximum allowed quantity. */\n max?: number;\n /** Increment/decrement step size. Values are rounded up to the nearest step. Default: `1`. */\n step?: number;\n /** Number of decimal places to display. Default: `0`. */\n decimals?: number;\n /** Show +/- stepper buttons. Default: `true`. */\n showStepper?: boolean;\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n}\n\nfunction roundToStep(value: number, step: number): number {\n if (step <= 1) return value;\n return Math.ceil(value / step) * step;\n}\n\n/**\n * Numeric input with optional +/- stepper buttons for cart quantities.\n *\n * @example\n * ```tsx\n * <QuantityInput value={qty} onChange={setQty} min={1} step={1} />\n * ```\n */\nconst QuantityInput = React.memo(\n React.forwardRef<HTMLInputElement, QuantityInputProps>(\n (\n {\n value,\n onChange,\n min = 0,\n max,\n step = 1,\n decimals = 0,\n showStepper = true,\n disabled = false,\n className,\n inputClassName,\n buttonClassName,\n },\n ref,\n ) => {\n const [qtyStr, setQtyStr] = React.useState(() => value.toFixed(decimals));\n\n React.useEffect(() => {\n setQtyStr(value.toFixed(decimals));\n }, [value, decimals]);\n\n const commit = React.useCallback(\n (raw: string) => {\n if (raw.trim() === \"\") {\n setQtyStr(min.toFixed(decimals));\n onChange(min);\n return;\n }\n\n let parsed = parseFloat(raw);\n if (isNaN(parsed)) parsed = min;\n\n parsed = roundToStep(parsed, step);\n if (parsed < min) parsed = min;\n if (max !== undefined && parsed > max) parsed = max;\n\n const rounded = parseFloat(parsed.toFixed(decimals));\n setQtyStr(rounded.toFixed(decimals));\n onChange(rounded);\n },\n [min, max, step, decimals, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n const allowed = [\"Backspace\", \"Delete\", \"ArrowLeft\", \"ArrowRight\", \"Tab\", \"Enter\"];\n if (allowed.includes(e.key)) {\n if (e.key === \"Enter\") {\n commit(qtyStr);\n }\n return;\n }\n\n if (decimals > 0 && e.key === \".\" && !qtyStr.includes(\".\")) {\n return;\n }\n\n if (e.key >= \"0\" && e.key <= \"9\") {\n return;\n }\n\n e.preventDefault();\n },\n [decimals, qtyStr, commit],\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const pattern = decimals > 0 ? /[^0-9.]/g : /[^0-9]/g;\n let cleaned = e.target.value.replace(pattern, \"\");\n if (decimals > 0) {\n const parts = cleaned.split(\".\");\n if (parts.length > 2) {\n cleaned = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n }\n setQtyStr(cleaned);\n },\n [decimals],\n );\n\n const handleBlur = React.useCallback(() => {\n commit(qtyStr);\n }, [commit, qtyStr]);\n\n const handleDecrement = React.useCallback(() => {\n const next = Math.max(value - step, min);\n onChange(next);\n }, [value, step, min, onChange]);\n\n const handleIncrement = React.useCallback(() => {\n const next = value + step;\n onChange(max !== undefined ? Math.min(next, max) : next);\n }, [value, step, max, onChange]);\n\n const minDisabled = disabled || value <= min;\n const maxDisabled = disabled || (max !== undefined && value >= max);\n\n return (\n <div className={cn(\"bg-background inline-flex items-center rounded-md border\", className)}>\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Decrease quantity\"\n disabled={minDisabled}\n onClick={handleDecrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuMinus />\n </button>\n )}\n <input\n ref={ref}\n type=\"text\"\n inputMode={decimals > 0 ? \"decimal\" : \"numeric\"}\n value={qtyStr}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n \"h-10 w-16 bg-transparent text-center focus:outline-none\",\n inputClassName,\n )}\n />\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Increase quantity\"\n disabled={maxDisabled}\n onClick={handleIncrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuPlus />\n </button>\n )}\n </div>\n );\n },\n ),\n);\nQuantityInput.displayName = \"QuantityInput\";\n\nexport { QuantityInput };\n"]}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/quantity-input.cjs","../src/quantity-input.tsx"],"names":[],"mappings":"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","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/quantity-input.cjs","sourcesContent":[null,"\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { LuMinus, LuPlus } from \"react-icons/lu\";\nimport {\n clampQuantity,\n cleanQtyFrom,\n decreaseDisabled,\n increaseDisabled,\n keyAllowed,\n stepDown,\n stepUp,\n} from \"./rules\";\n\nexport interface QuantityInputProps {\n /** Current quantity value (controlled). */\n value: number;\n /** Called with the new quantity after validation and rounding. */\n onChange: (value: number) => void;\n /** Minimum allowed quantity. Default: `0`. */\n min?: number;\n /** Maximum allowed quantity. */\n max?: number;\n /** Increment/decrement step size. Values are rounded up to the nearest step. Default: `1`. */\n step?: number;\n /** Number of decimal places to display. Default: `0`. */\n decimals?: number;\n /** Show +/- stepper buttons. Default: `true`. */\n showStepper?: boolean;\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n}\n\nfunction roundToStep(value: number, step: number): number {\n if (step <= 1) return value;\n return Math.ceil(value / step) * step;\n}\n\n/**\n * The quantity a typed string commits to: `min` when blank, else the number (or `min` when it\n * is not one) rounded up to the step, clamped to [min, max] and to `decimals` places.\n */\nfunction committedQuantity(\n raw: string,\n min: number,\n max: number | undefined,\n step: number,\n decimals: number,\n): number {\n if (raw.trim() === \"\") return min;\n\n let parsed = parseFloat(raw);\n if (isNaN(parsed)) parsed = min;\n\n // roundToStep stays here: Math.ceil over fractional quantities has no lsc form.\n parsed = clampQuantity(roundToStep(parsed, step), min, max);\n\n return parseFloat(parsed.toFixed(decimals));\n}\n\n/**\n * Numeric input with optional +/- stepper buttons for cart quantities.\n *\n * @example\n * ```tsx\n * <QuantityInput value={qty} onChange={setQty} min={1} step={1} />\n * ```\n */\nconst QuantityInput = React.memo(\n React.forwardRef<HTMLInputElement, QuantityInputProps>(\n (\n {\n value,\n onChange,\n min = 0,\n max,\n step = 1,\n decimals = 0,\n showStepper = true,\n disabled = false,\n className,\n inputClassName,\n buttonClassName,\n },\n ref,\n ) => {\n const [qtyStr, setQtyStr] = React.useState(() => value.toFixed(decimals));\n\n React.useEffect(() => {\n setQtyStr(value.toFixed(decimals));\n }, [value, decimals]);\n\n const commit = React.useCallback(\n (raw: string) => {\n const quantity = committedQuantity(raw, min, max, step, decimals);\n setQtyStr(quantity.toFixed(decimals));\n onChange(quantity);\n },\n [min, max, step, decimals, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n commit(qtyStr);\n return;\n }\n if (!keyAllowed(e.key, decimals, qtyStr.includes(\".\"))) e.preventDefault();\n },\n [decimals, qtyStr, commit],\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setQtyStr(cleanQtyFrom(e.target.value, decimals > 0, false, 0));\n },\n [decimals],\n );\n\n const handleBlur = React.useCallback(() => {\n commit(qtyStr);\n }, [commit, qtyStr]);\n\n const handleDecrement = React.useCallback(() => {\n onChange(stepDown(value, step, min));\n }, [value, step, min, onChange]);\n\n const handleIncrement = React.useCallback(() => {\n onChange(stepUp(value, step, max));\n }, [value, step, max, onChange]);\n\n const minDisabled = decreaseDisabled(disabled, value, min);\n const maxDisabled = increaseDisabled(disabled, value, max);\n\n return (\n <div className={cn(\"bg-background inline-flex items-center rounded-md border\", className)}>\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Decrease quantity\"\n disabled={minDisabled}\n onClick={handleDecrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuMinus />\n </button>\n )}\n <input\n ref={ref}\n type=\"text\"\n inputMode={decimals > 0 ? \"decimal\" : \"numeric\"}\n value={qtyStr}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n \"h-10 w-16 bg-transparent text-center focus:outline-none\",\n inputClassName,\n )}\n />\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Increase quantity\"\n disabled={maxDisabled}\n onClick={handleIncrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuPlus />\n </button>\n )}\n </div>\n );\n },\n ),\n);\nQuantityInput.displayName = \"QuantityInput\";\n\nexport { QuantityInput };\n"]}
@@ -1,6 +1,5 @@
1
- import * as React from 'react';
2
-
3
- interface QuantityInputProps {
1
+ import * as React from "react";
2
+ export interface QuantityInputProps {
4
3
  /** Current quantity value (controlled). */
5
4
  value: number;
6
5
  /** Called with the new quantity after validation and rounding. */
@@ -29,5 +28,5 @@ interface QuantityInputProps {
29
28
  * ```
30
29
  */
31
30
  declare const QuantityInput: React.NamedExoticComponent<QuantityInputProps & React.RefAttributes<HTMLInputElement>>;
32
-
33
- export { QuantityInput, type QuantityInputProps };
31
+ export { QuantityInput };
32
+ //# sourceMappingURL=quantity-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantity-input.d.ts","sourceRoot":"","sources":["../src/quantity-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6BD;;;;;;;GAOG;AACH,QAAA,MAAM,aAAa,wFAkHlB,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,5 +1,14 @@
1
1
  "use client";
2
2
  "use client";
3
+ import {
4
+ clampQuantity,
5
+ cleanQtyFrom,
6
+ decreaseDisabled,
7
+ increaseDisabled,
8
+ keyAllowed,
9
+ stepDown,
10
+ stepUp
11
+ } from "./chunk-IO77MGHW.js";
3
12
 
4
13
  // src/quantity-input.tsx
5
14
  import * as React from "react";
@@ -10,6 +19,13 @@ function roundToStep(value, step) {
10
19
  if (step <= 1) return value;
11
20
  return Math.ceil(value / step) * step;
12
21
  }
22
+ function committedQuantity(raw, min, max, step, decimals) {
23
+ if (raw.trim() === "") return min;
24
+ let parsed = parseFloat(raw);
25
+ if (isNaN(parsed)) parsed = min;
26
+ parsed = clampQuantity(roundToStep(parsed, step), min, max);
27
+ return parseFloat(parsed.toFixed(decimals));
28
+ }
13
29
  var QuantityInput = React.memo(
14
30
  React.forwardRef(
15
31
  ({
@@ -31,52 +47,25 @@ var QuantityInput = React.memo(
31
47
  }, [value, decimals]);
32
48
  const commit = React.useCallback(
33
49
  (raw) => {
34
- if (raw.trim() === "") {
35
- setQtyStr(min.toFixed(decimals));
36
- onChange(min);
37
- return;
38
- }
39
- let parsed = parseFloat(raw);
40
- if (isNaN(parsed)) parsed = min;
41
- parsed = roundToStep(parsed, step);
42
- if (parsed < min) parsed = min;
43
- if (max !== void 0 && parsed > max) parsed = max;
44
- const rounded = parseFloat(parsed.toFixed(decimals));
45
- setQtyStr(rounded.toFixed(decimals));
46
- onChange(rounded);
50
+ const quantity = committedQuantity(raw, min, max, step, decimals);
51
+ setQtyStr(quantity.toFixed(decimals));
52
+ onChange(quantity);
47
53
  },
48
54
  [min, max, step, decimals, onChange]
49
55
  );
50
56
  const handleKeyDown = React.useCallback(
51
57
  (e) => {
52
- const allowed = ["Backspace", "Delete", "ArrowLeft", "ArrowRight", "Tab", "Enter"];
53
- if (allowed.includes(e.key)) {
54
- if (e.key === "Enter") {
55
- commit(qtyStr);
56
- }
57
- return;
58
- }
59
- if (decimals > 0 && e.key === "." && !qtyStr.includes(".")) {
60
- return;
61
- }
62
- if (e.key >= "0" && e.key <= "9") {
58
+ if (e.key === "Enter") {
59
+ commit(qtyStr);
63
60
  return;
64
61
  }
65
- e.preventDefault();
62
+ if (!keyAllowed(e.key, decimals, qtyStr.includes("."))) e.preventDefault();
66
63
  },
67
64
  [decimals, qtyStr, commit]
68
65
  );
69
66
  const handleChange = React.useCallback(
70
67
  (e) => {
71
- const pattern = decimals > 0 ? /[^0-9.]/g : /[^0-9]/g;
72
- let cleaned = e.target.value.replace(pattern, "");
73
- if (decimals > 0) {
74
- const parts = cleaned.split(".");
75
- if (parts.length > 2) {
76
- cleaned = parts[0] + "." + parts.slice(1).join("");
77
- }
78
- }
79
- setQtyStr(cleaned);
68
+ setQtyStr(cleanQtyFrom(e.target.value, decimals > 0, false, 0));
80
69
  },
81
70
  [decimals]
82
71
  );
@@ -84,15 +73,13 @@ var QuantityInput = React.memo(
84
73
  commit(qtyStr);
85
74
  }, [commit, qtyStr]);
86
75
  const handleDecrement = React.useCallback(() => {
87
- const next = Math.max(value - step, min);
88
- onChange(next);
76
+ onChange(stepDown(value, step, min));
89
77
  }, [value, step, min, onChange]);
90
78
  const handleIncrement = React.useCallback(() => {
91
- const next = value + step;
92
- onChange(max !== void 0 ? Math.min(next, max) : next);
79
+ onChange(stepUp(value, step, max));
93
80
  }, [value, step, max, onChange]);
94
- const minDisabled = disabled || value <= min;
95
- const maxDisabled = disabled || max !== void 0 && value >= max;
81
+ const minDisabled = decreaseDisabled(disabled, value, min);
82
+ const maxDisabled = increaseDisabled(disabled, value, max);
96
83
  return /* @__PURE__ */ jsxs("div", { className: cn("bg-background inline-flex items-center rounded-md border", className), children: [
97
84
  showStepper && /* @__PURE__ */ jsx(
98
85
  "button",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/quantity-input.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { LuMinus, LuPlus } from \"react-icons/lu\";\n\nexport interface QuantityInputProps {\n /** Current quantity value (controlled). */\n value: number;\n /** Called with the new quantity after validation and rounding. */\n onChange: (value: number) => void;\n /** Minimum allowed quantity. Default: `0`. */\n min?: number;\n /** Maximum allowed quantity. */\n max?: number;\n /** Increment/decrement step size. Values are rounded up to the nearest step. Default: `1`. */\n step?: number;\n /** Number of decimal places to display. Default: `0`. */\n decimals?: number;\n /** Show +/- stepper buttons. Default: `true`. */\n showStepper?: boolean;\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n}\n\nfunction roundToStep(value: number, step: number): number {\n if (step <= 1) return value;\n return Math.ceil(value / step) * step;\n}\n\n/**\n * Numeric input with optional +/- stepper buttons for cart quantities.\n *\n * @example\n * ```tsx\n * <QuantityInput value={qty} onChange={setQty} min={1} step={1} />\n * ```\n */\nconst QuantityInput = React.memo(\n React.forwardRef<HTMLInputElement, QuantityInputProps>(\n (\n {\n value,\n onChange,\n min = 0,\n max,\n step = 1,\n decimals = 0,\n showStepper = true,\n disabled = false,\n className,\n inputClassName,\n buttonClassName,\n },\n ref,\n ) => {\n const [qtyStr, setQtyStr] = React.useState(() => value.toFixed(decimals));\n\n React.useEffect(() => {\n setQtyStr(value.toFixed(decimals));\n }, [value, decimals]);\n\n const commit = React.useCallback(\n (raw: string) => {\n if (raw.trim() === \"\") {\n setQtyStr(min.toFixed(decimals));\n onChange(min);\n return;\n }\n\n let parsed = parseFloat(raw);\n if (isNaN(parsed)) parsed = min;\n\n parsed = roundToStep(parsed, step);\n if (parsed < min) parsed = min;\n if (max !== undefined && parsed > max) parsed = max;\n\n const rounded = parseFloat(parsed.toFixed(decimals));\n setQtyStr(rounded.toFixed(decimals));\n onChange(rounded);\n },\n [min, max, step, decimals, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n const allowed = [\"Backspace\", \"Delete\", \"ArrowLeft\", \"ArrowRight\", \"Tab\", \"Enter\"];\n if (allowed.includes(e.key)) {\n if (e.key === \"Enter\") {\n commit(qtyStr);\n }\n return;\n }\n\n if (decimals > 0 && e.key === \".\" && !qtyStr.includes(\".\")) {\n return;\n }\n\n if (e.key >= \"0\" && e.key <= \"9\") {\n return;\n }\n\n e.preventDefault();\n },\n [decimals, qtyStr, commit],\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const pattern = decimals > 0 ? /[^0-9.]/g : /[^0-9]/g;\n let cleaned = e.target.value.replace(pattern, \"\");\n if (decimals > 0) {\n const parts = cleaned.split(\".\");\n if (parts.length > 2) {\n cleaned = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n }\n setQtyStr(cleaned);\n },\n [decimals],\n );\n\n const handleBlur = React.useCallback(() => {\n commit(qtyStr);\n }, [commit, qtyStr]);\n\n const handleDecrement = React.useCallback(() => {\n const next = Math.max(value - step, min);\n onChange(next);\n }, [value, step, min, onChange]);\n\n const handleIncrement = React.useCallback(() => {\n const next = value + step;\n onChange(max !== undefined ? Math.min(next, max) : next);\n }, [value, step, max, onChange]);\n\n const minDisabled = disabled || value <= min;\n const maxDisabled = disabled || (max !== undefined && value >= max);\n\n return (\n <div className={cn(\"bg-background inline-flex items-center rounded-md border\", className)}>\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Decrease quantity\"\n disabled={minDisabled}\n onClick={handleDecrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuMinus />\n </button>\n )}\n <input\n ref={ref}\n type=\"text\"\n inputMode={decimals > 0 ? \"decimal\" : \"numeric\"}\n value={qtyStr}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n \"h-10 w-16 bg-transparent text-center focus:outline-none\",\n inputClassName,\n )}\n />\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Increase quantity\"\n disabled={maxDisabled}\n onClick={handleIncrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuPlus />\n </button>\n )}\n </div>\n );\n },\n ),\n);\nQuantityInput.displayName = \"QuantityInput\";\n\nexport { QuantityInput };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/quantity-input.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { LuMinus, LuPlus } from \"react-icons/lu\";\nimport {\n clampQuantity,\n cleanQtyFrom,\n decreaseDisabled,\n increaseDisabled,\n keyAllowed,\n stepDown,\n stepUp,\n} from \"./rules\";\n\nexport interface QuantityInputProps {\n /** Current quantity value (controlled). */\n value: number;\n /** Called with the new quantity after validation and rounding. */\n onChange: (value: number) => void;\n /** Minimum allowed quantity. Default: `0`. */\n min?: number;\n /** Maximum allowed quantity. */\n max?: number;\n /** Increment/decrement step size. Values are rounded up to the nearest step. Default: `1`. */\n step?: number;\n /** Number of decimal places to display. Default: `0`. */\n decimals?: number;\n /** Show +/- stepper buttons. Default: `true`. */\n showStepper?: boolean;\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n buttonClassName?: string;\n}\n\nfunction roundToStep(value: number, step: number): number {\n if (step <= 1) return value;\n return Math.ceil(value / step) * step;\n}\n\n/**\n * The quantity a typed string commits to: `min` when blank, else the number (or `min` when it\n * is not one) rounded up to the step, clamped to [min, max] and to `decimals` places.\n */\nfunction committedQuantity(\n raw: string,\n min: number,\n max: number | undefined,\n step: number,\n decimals: number,\n): number {\n if (raw.trim() === \"\") return min;\n\n let parsed = parseFloat(raw);\n if (isNaN(parsed)) parsed = min;\n\n // roundToStep stays here: Math.ceil over fractional quantities has no lsc form.\n parsed = clampQuantity(roundToStep(parsed, step), min, max);\n\n return parseFloat(parsed.toFixed(decimals));\n}\n\n/**\n * Numeric input with optional +/- stepper buttons for cart quantities.\n *\n * @example\n * ```tsx\n * <QuantityInput value={qty} onChange={setQty} min={1} step={1} />\n * ```\n */\nconst QuantityInput = React.memo(\n React.forwardRef<HTMLInputElement, QuantityInputProps>(\n (\n {\n value,\n onChange,\n min = 0,\n max,\n step = 1,\n decimals = 0,\n showStepper = true,\n disabled = false,\n className,\n inputClassName,\n buttonClassName,\n },\n ref,\n ) => {\n const [qtyStr, setQtyStr] = React.useState(() => value.toFixed(decimals));\n\n React.useEffect(() => {\n setQtyStr(value.toFixed(decimals));\n }, [value, decimals]);\n\n const commit = React.useCallback(\n (raw: string) => {\n const quantity = committedQuantity(raw, min, max, step, decimals);\n setQtyStr(quantity.toFixed(decimals));\n onChange(quantity);\n },\n [min, max, step, decimals, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n commit(qtyStr);\n return;\n }\n if (!keyAllowed(e.key, decimals, qtyStr.includes(\".\"))) e.preventDefault();\n },\n [decimals, qtyStr, commit],\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setQtyStr(cleanQtyFrom(e.target.value, decimals > 0, false, 0));\n },\n [decimals],\n );\n\n const handleBlur = React.useCallback(() => {\n commit(qtyStr);\n }, [commit, qtyStr]);\n\n const handleDecrement = React.useCallback(() => {\n onChange(stepDown(value, step, min));\n }, [value, step, min, onChange]);\n\n const handleIncrement = React.useCallback(() => {\n onChange(stepUp(value, step, max));\n }, [value, step, max, onChange]);\n\n const minDisabled = decreaseDisabled(disabled, value, min);\n const maxDisabled = increaseDisabled(disabled, value, max);\n\n return (\n <div className={cn(\"bg-background inline-flex items-center rounded-md border\", className)}>\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Decrease quantity\"\n disabled={minDisabled}\n onClick={handleDecrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuMinus />\n </button>\n )}\n <input\n ref={ref}\n type=\"text\"\n inputMode={decimals > 0 ? \"decimal\" : \"numeric\"}\n value={qtyStr}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n \"h-10 w-16 bg-transparent text-center focus:outline-none\",\n inputClassName,\n )}\n />\n {showStepper && (\n <button\n type=\"button\"\n aria-label=\"Increase quantity\"\n disabled={maxDisabled}\n onClick={handleIncrement}\n className={cn(\n \"hover:bg-accent flex h-10 w-10 items-center justify-center disabled:opacity-50\",\n buttonClassName,\n )}\n >\n <LuPlus />\n </button>\n )}\n </div>\n );\n },\n ),\n);\nQuantityInput.displayName = \"QuantityInput\";\n\nexport { QuantityInput };\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/radio-group.cjs","../src/radio-group.tsx"],"names":[],"mappings":"AAAA,uWAAY;AACZ,YAAY;AACZ;AACA;ACAA,2EAAuB;AACvB,oCAAwB;AACxB,mIAAqC;AACrC,sDAAmB;AAMV,+CAAA;AAJT,IAAM,WAAA,EAAmB,KAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,GAAQ;AAClC,EAAA,uBAAO,6BAAA,mBAAqB,CAAA,IAAA,EAApB,EAAyB,SAAA,EAAW,qBAAA,YAAG,EAAc,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,IAAA,CAAU,CAAA;AAChG,CAAC,CAAA;AACD,UAAA,CAAW,YAAA,EAAkC,mBAAA,CAAA,IAAA,CAAK,WAAA;AAElD,IAAM,eAAA,EAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,GAAQ;AAClC,EAAA,uBACE,6BAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,qBAAA;AAAA,QACT,8LAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,6BAAA,mBAAqB,CAAA,SAAA,EAApB,EAA8B,SAAA,EAAU,kCAAA,EACvC,QAAA,kBAAA,6BAAA,WAAC,EAAA,EAAQ,SAAA,EAAU,2BAAA,CAA2B,EAAA,CAChD;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AACD,cAAA,CAAe,YAAA,EAAkC,mBAAA,CAAA,IAAA,CAAK,WAAA;ADPtD;AACE;AACA;AACF,yEAAC","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/radio-group.cjs","sourcesContent":[null,"/** Styled wrapper around @radix-ui/react-radio-group. See https://www.radix-ui.com/primitives/docs/components/radio-group */\n\"use client\";\n\nimport * as React from \"react\";\nimport { LuCheck } from \"react-icons/lu\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\n\nconst RadioGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return <RadioGroupPrimitive.Root className={cn(\"grid gap-2\", className)} {...props} ref={ref} />;\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"border-primary text-primary focus-visible:ring-ring aspect-square h-4 w-4 rounded-full border shadow focus:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <LuCheck className=\"fill-primary h-3.5 w-3.5\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n"]}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/radio-group.cjs","../src/radio-group.tsx"],"names":[],"mappings":"AAAA,uWAAY;AACZ,YAAY;AACZ;AACA;ACAA,2EAAuB;AACvB,oCAAwB;AACxB,mIAAqC;AACrC,sDAAmB;AAMV,+CAAA;AAJT,IAAM,WAAA,EAAmB,KAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,GAAQ;AAClC,EAAA,uBAAO,6BAAA,mBAAqB,CAAA,IAAA,EAApB,EAAyB,SAAA,EAAW,qBAAA,YAAG,EAAc,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,IAAA,CAAU,CAAA;AAChG,CAAC,CAAA;AACD,UAAA,CAAW,YAAA,EAAkC,mBAAA,CAAA,IAAA,CAAK,WAAA;AAElD,IAAM,eAAA,EAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,GAAQ;AAClC,EAAA,uBACE,6BAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,qBAAA;AAAA,QACT,8LAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,6BAAA,mBAAqB,CAAA,SAAA,EAApB,EAA8B,SAAA,EAAU,kCAAA,EACvC,QAAA,kBAAA,6BAAA,WAAC,EAAA,EAAQ,SAAA,EAAU,2BAAA,CAA2B,EAAA,CAChD;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AACD,cAAA,CAAe,YAAA,EAAkC,mBAAA,CAAA,IAAA,CAAK,WAAA;ADPtD;AACE;AACA;AACF,yEAAC","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/radio-group.cjs","sourcesContent":[null,"/** Styled wrapper around @radix-ui/react-radio-group. See https://www.radix-ui.com/primitives/docs/components/radio-group */\n\"use client\";\n\nimport * as React from \"react\";\nimport { LuCheck } from \"react-icons/lu\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\n\nconst RadioGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return <RadioGroupPrimitive.Root className={cn(\"grid gap-2\", className)} {...props} ref={ref} />;\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"border-primary text-primary focus-visible:ring-ring aspect-square h-4 w-4 rounded-full border shadow focus:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <LuCheck className=\"fill-primary h-3.5 w-3.5\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n"]}
@@ -1,7 +1,6 @@
1
- import * as React from 'react';
2
- import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
3
-
1
+ import * as React from "react";
2
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
4
3
  declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
4
  declare const RadioGroupItem: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
-
7
5
  export { RadioGroup, RadioGroupItem };
6
+ //# sourceMappingURL=radio-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../src/radio-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AAGnE,QAAA,MAAM,UAAU,+JAKd,CAAC;AAGH,QAAA,MAAM,cAAc,yKAkBlB,CAAC;AAGH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
@@ -8,6 +8,7 @@
8
8
  var _chunkUFL6PVLIcjs = require('./chunk-UFL6PVLI.cjs');
9
9
 
10
10
  // src/resource-tabs.tsx
11
+ require('react');
11
12
  var _web = require('@simpleapps-com/augur-utils/web');
12
13
  var _jsxruntime = require('react/jsx-runtime');
13
14
  function ResourceTabs({ tabs, defaultTab, className }) {
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/resource-tabs.cjs","../src/resource-tabs.tsx"],"names":[],"mappings":"AAAA,yLAAY;AACZ,YAAY;AACZ;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACLA,sDAAmB;AAmCf,+CAAA;AANJ,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,UAAA,EAAY,UAAU,CAAA,EAAsB;AACxE,EAAA,GAAA,CAAI,IAAA,CAAK,OAAA,IAAW,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,MAAM,gBAAA,mBAAkB,UAAA,UAAc,IAAA,CAAK,CAAC,CAAA,CAAG,OAAA;AAE/C,EAAA,uBACE,8BAAA,sBAAC,EAAA,EAAK,YAAA,EAAc,eAAA,EAAiB,SAAA,EAAW,qBAAA,SAAY,CAAA,EAC1D,QAAA,EAAA;AAAA,oBAAA,6BAAA,0BAAC,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAA,mBACT,6BAAA,6BAAC,EAAA,EAA4B,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,QAAA,EAAU,GAAA,CAAI,QAAA,EAC1D,QAAA,EAAA,GAAA,CAAI,MAAA,CAAA,EADW,GAAA,CAAI,KAEtB,CACD,EAAA,CACH,CAAA;AAAA,IACC,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAA,mBACT,6BAAA,6BAAC,EAAA,EAA4B,KAAA,EAAO,GAAA,CAAI,KAAA,EACrC,QAAA,EAAA,GAAA,CAAI,QAAA,CAAA,EADW,GAAA,CAAI,KAEtB,CACD;AAAA,EAAA,EAAA,CACH,CAAA;AAEJ;AACA,YAAA,CAAa,YAAA,EAAc,cAAA;ADlC3B;AACE;AACF,oCAAC","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/resource-tabs.cjs","sourcesContent":[null,"/** Sub-resource tab layout composing Tabs. */\n\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"./tabs\";\n\nexport interface TabDef {\n value: string;\n label: string;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ResourceTabsProps {\n tabs: TabDef[];\n defaultTab?: string;\n className?: string;\n}\n\n/**\n * Standardized sub-resource tab layout for detail pages.\n *\n * @example\n * ```tsx\n * <ResourceTabs\n * tabs={[\n * { value: \"attributes\", label: \"Attributes\", content: <AttributesList /> },\n * { value: \"items\", label: \"Items\", content: <ItemsList /> },\n * ]}\n * />\n * ```\n */\nfunction ResourceTabs({ tabs, defaultTab, className }: ResourceTabsProps) {\n if (tabs.length === 0) return null;\n\n const resolvedDefault = defaultTab ?? tabs[0]!.value;\n\n return (\n <Tabs defaultValue={resolvedDefault} className={cn(className)}>\n <TabsList>\n {tabs.map((tab) => (\n <TabsTrigger key={tab.value} value={tab.value} disabled={tab.disabled}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {tabs.map((tab) => (\n <TabsContent key={tab.value} value={tab.value}>\n {tab.content}\n </TabsContent>\n ))}\n </Tabs>\n );\n}\nResourceTabs.displayName = \"ResourceTabs\";\n\nexport { ResourceTabs };\n"]}
1
+ {"version":3,"sources":["/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/resource-tabs.cjs","../src/resource-tabs.tsx"],"names":[],"mappings":"AAAA,yLAAY;AACZ,YAAY;AACZ;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACNA,iBAAuB;AACvB,sDAAmB;AAmCf,+CAAA;AANJ,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,UAAA,EAAY,UAAU,CAAA,EAAsB;AACxE,EAAA,GAAA,CAAI,IAAA,CAAK,OAAA,IAAW,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,MAAM,gBAAA,mBAAkB,UAAA,UAAc,IAAA,CAAK,CAAC,CAAA,CAAG,OAAA;AAE/C,EAAA,uBACE,8BAAA,sBAAC,EAAA,EAAK,YAAA,EAAc,eAAA,EAAiB,SAAA,EAAW,qBAAA,SAAY,CAAA,EAC1D,QAAA,EAAA;AAAA,oBAAA,6BAAA,0BAAC,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAA,mBACT,6BAAA,6BAAC,EAAA,EAA4B,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,QAAA,EAAU,GAAA,CAAI,QAAA,EAC1D,QAAA,EAAA,GAAA,CAAI,MAAA,CAAA,EADW,GAAA,CAAI,KAEtB,CACD,EAAA,CACH,CAAA;AAAA,IACC,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAA,mBACT,6BAAA,6BAAC,EAAA,EAA4B,KAAA,EAAO,GAAA,CAAI,KAAA,EACrC,QAAA,EAAA,GAAA,CAAI,QAAA,CAAA,EADW,GAAA,CAAI,KAEtB,CACD;AAAA,EAAA,EAAA,CACH,CAAA;AAEJ;AACA,YAAA,CAAa,YAAA,EAAc,cAAA;ADjC3B;AACE;AACF,oCAAC","file":"/Users/stuartjackson/Projects/simpleapps/atlas/repo/packages/augur-web/dist/resource-tabs.cjs","sourcesContent":[null,"/** Sub-resource tab layout composing Tabs. */\n\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"./tabs\";\n\nexport interface TabDef {\n value: string;\n label: string;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ResourceTabsProps {\n tabs: TabDef[];\n defaultTab?: string;\n className?: string;\n}\n\n/**\n * Standardized sub-resource tab layout for detail pages.\n *\n * @example\n * ```tsx\n * <ResourceTabs\n * tabs={[\n * { value: \"attributes\", label: \"Attributes\", content: <AttributesList /> },\n * { value: \"items\", label: \"Items\", content: <ItemsList /> },\n * ]}\n * />\n * ```\n */\nfunction ResourceTabs({ tabs, defaultTab, className }: ResourceTabsProps) {\n if (tabs.length === 0) return null;\n\n const resolvedDefault = defaultTab ?? tabs[0]!.value;\n\n return (\n <Tabs defaultValue={resolvedDefault} className={cn(className)}>\n <TabsList>\n {tabs.map((tab) => (\n <TabsTrigger key={tab.value} value={tab.value} disabled={tab.disabled}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {tabs.map((tab) => (\n <TabsContent key={tab.value} value={tab.value}>\n {tab.content}\n </TabsContent>\n ))}\n </Tabs>\n );\n}\nResourceTabs.displayName = \"ResourceTabs\";\n\nexport { ResourceTabs };\n"]}
@@ -1,13 +1,11 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as React from 'react';
3
-
4
- interface TabDef {
1
+ import * as React from "react";
2
+ export interface TabDef {
5
3
  value: string;
6
4
  label: string;
7
5
  content: React.ReactNode;
8
6
  disabled?: boolean;
9
7
  }
10
- interface ResourceTabsProps {
8
+ export interface ResourceTabsProps {
11
9
  tabs: TabDef[];
12
10
  defaultTab?: string;
13
11
  className?: string;
@@ -25,9 +23,9 @@ interface ResourceTabsProps {
25
23
  * />
26
24
  * ```
27
25
  */
28
- declare function ResourceTabs({ tabs, defaultTab, className }: ResourceTabsProps): react_jsx_runtime.JSX.Element | null;
26
+ declare function ResourceTabs({ tabs, defaultTab, className }: ResourceTabsProps): React.JSX.Element | null;
29
27
  declare namespace ResourceTabs {
30
28
  var displayName: string;
31
29
  }
32
-
33
- export { ResourceTabs, type ResourceTabsProps, type TabDef };
30
+ export { ResourceTabs };
31
+ //# sourceMappingURL=resource-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-tabs.d.ts","sourceRoot":"","sources":["../src/resource-tabs.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,iBAAS,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,iBAAiB,4BAqBvE;kBArBQ,YAAY;;;AAwBrB,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -8,6 +8,7 @@ import {
8
8
  } from "./chunk-KHIHHL3A.js";
9
9
 
10
10
  // src/resource-tabs.tsx
11
+ import "react";
11
12
  import { cn } from "@simpleapps-com/augur-utils/web";
12
13
  import { jsx, jsxs } from "react/jsx-runtime";
13
14
  function ResourceTabs({ tabs, defaultTab, className }) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resource-tabs.tsx"],"sourcesContent":["/** Sub-resource tab layout composing Tabs. */\n\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"./tabs\";\n\nexport interface TabDef {\n value: string;\n label: string;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ResourceTabsProps {\n tabs: TabDef[];\n defaultTab?: string;\n className?: string;\n}\n\n/**\n * Standardized sub-resource tab layout for detail pages.\n *\n * @example\n * ```tsx\n * <ResourceTabs\n * tabs={[\n * { value: \"attributes\", label: \"Attributes\", content: <AttributesList /> },\n * { value: \"items\", label: \"Items\", content: <ItemsList /> },\n * ]}\n * />\n * ```\n */\nfunction ResourceTabs({ tabs, defaultTab, className }: ResourceTabsProps) {\n if (tabs.length === 0) return null;\n\n const resolvedDefault = defaultTab ?? tabs[0]!.value;\n\n return (\n <Tabs defaultValue={resolvedDefault} className={cn(className)}>\n <TabsList>\n {tabs.map((tab) => (\n <TabsTrigger key={tab.value} value={tab.value} disabled={tab.disabled}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {tabs.map((tab) => (\n <TabsContent key={tab.value} value={tab.value}>\n {tab.content}\n </TabsContent>\n ))}\n </Tabs>\n );\n}\nResourceTabs.displayName = \"ResourceTabs\";\n\nexport { ResourceTabs };\n"],"mappings":";;;;;;;;;;AAIA,SAAS,UAAU;AAmCf,SAGM,KAHN;AANJ,SAAS,aAAa,EAAE,MAAM,YAAY,UAAU,GAAsB;AACxE,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,kBAAkB,cAAc,KAAK,CAAC,EAAG;AAE/C,SACE,qBAAC,QAAK,cAAc,iBAAiB,WAAW,GAAG,SAAS,GAC1D;AAAA,wBAAC,YACE,eAAK,IAAI,CAAC,QACT,oBAAC,eAA4B,OAAO,IAAI,OAAO,UAAU,IAAI,UAC1D,cAAI,SADW,IAAI,KAEtB,CACD,GACH;AAAA,IACC,KAAK,IAAI,CAAC,QACT,oBAAC,eAA4B,OAAO,IAAI,OACrC,cAAI,WADW,IAAI,KAEtB,CACD;AAAA,KACH;AAEJ;AACA,aAAa,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/resource-tabs.tsx"],"sourcesContent":["/** Sub-resource tab layout composing Tabs. */\n\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"./tabs\";\n\nexport interface TabDef {\n value: string;\n label: string;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ResourceTabsProps {\n tabs: TabDef[];\n defaultTab?: string;\n className?: string;\n}\n\n/**\n * Standardized sub-resource tab layout for detail pages.\n *\n * @example\n * ```tsx\n * <ResourceTabs\n * tabs={[\n * { value: \"attributes\", label: \"Attributes\", content: <AttributesList /> },\n * { value: \"items\", label: \"Items\", content: <ItemsList /> },\n * ]}\n * />\n * ```\n */\nfunction ResourceTabs({ tabs, defaultTab, className }: ResourceTabsProps) {\n if (tabs.length === 0) return null;\n\n const resolvedDefault = defaultTab ?? tabs[0]!.value;\n\n return (\n <Tabs defaultValue={resolvedDefault} className={cn(className)}>\n <TabsList>\n {tabs.map((tab) => (\n <TabsTrigger key={tab.value} value={tab.value} disabled={tab.disabled}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {tabs.map((tab) => (\n <TabsContent key={tab.value} value={tab.value}>\n {tab.content}\n </TabsContent>\n ))}\n </Tabs>\n );\n}\nResourceTabs.displayName = \"ResourceTabs\";\n\nexport { ResourceTabs };\n"],"mappings":";;;;;;;;;;AAGA,OAAuB;AACvB,SAAS,UAAU;AAmCf,SAGM,KAHN;AANJ,SAAS,aAAa,EAAE,MAAM,YAAY,UAAU,GAAsB;AACxE,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,kBAAkB,cAAc,KAAK,CAAC,EAAG;AAE/C,SACE,qBAAC,QAAK,cAAc,iBAAiB,WAAW,GAAG,SAAS,GAC1D;AAAA,wBAAC,YACE,eAAK,IAAI,CAAC,QACT,oBAAC,eAA4B,OAAO,IAAI,OAAO,UAAU,IAAI,UAC1D,cAAI,SADW,IAAI,KAEtB,CACD,GACH;AAAA,IACC,KAAK,IAAI,CAAC,QACT,oBAAC,eAA4B,OAAO,IAAI,OACrC,cAAI,WADW,IAAI,KAEtB,CACD;AAAA,KACH;AAEJ;AACA,aAAa,cAAc;","names":[]}