@utilitywarehouse/hearth-react 0.35.3 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/{chunk-A5H4MI3R.js → chunk-2POQFUPW.js} +2 -2
  2. package/dist/{chunk-B7FZH3QJ.cjs → chunk-2VGT344B.cjs} +2 -2
  3. package/dist/{chunk-B7FZH3QJ.cjs.map → chunk-2VGT344B.cjs.map} +1 -1
  4. package/dist/{chunk-GI5KDYNY.js → chunk-3UMZQPTB.js} +2 -2
  5. package/dist/{chunk-VBM2XJMT.cjs → chunk-53SQGRZU.cjs} +2 -2
  6. package/dist/{chunk-VBM2XJMT.cjs.map → chunk-53SQGRZU.cjs.map} +1 -1
  7. package/dist/{chunk-DT6UGKV4.cjs → chunk-57UF42KD.cjs} +2 -2
  8. package/dist/{chunk-DT6UGKV4.cjs.map → chunk-57UF42KD.cjs.map} +1 -1
  9. package/dist/{chunk-BQREA63R.js → chunk-5SZOTFTN.js} +2 -2
  10. package/dist/{chunk-6PSROLGA.cjs → chunk-5ZWFYZWX.cjs} +2 -2
  11. package/dist/{chunk-6PSROLGA.cjs.map → chunk-5ZWFYZWX.cjs.map} +1 -1
  12. package/dist/{chunk-LH3XNBC5.js → chunk-64CRCD2F.js} +2 -2
  13. package/dist/{chunk-HVV2WVNT.cjs → chunk-6FG65NIR.cjs} +2 -2
  14. package/dist/{chunk-HVV2WVNT.cjs.map → chunk-6FG65NIR.cjs.map} +1 -1
  15. package/dist/{chunk-JXJFIRXF.cjs → chunk-6VSNPADP.cjs} +2 -2
  16. package/dist/{chunk-JXJFIRXF.cjs.map → chunk-6VSNPADP.cjs.map} +1 -1
  17. package/dist/{chunk-C6CDS5PQ.js → chunk-6YP6GBJJ.js} +2 -2
  18. package/dist/{chunk-2HSP772B.cjs → chunk-ACXMHPQ3.cjs} +2 -2
  19. package/dist/{chunk-2HSP772B.cjs.map → chunk-ACXMHPQ3.cjs.map} +1 -1
  20. package/dist/chunk-BQOVHNOK.js +4 -0
  21. package/dist/chunk-BQOVHNOK.js.map +1 -0
  22. package/dist/{chunk-WBQ4Y5K5.js → chunk-DGLSILZC.js} +2 -2
  23. package/dist/{chunk-ZMALQQ3U.cjs → chunk-E5MPVODK.cjs} +2 -2
  24. package/dist/{chunk-ZMALQQ3U.cjs.map → chunk-E5MPVODK.cjs.map} +1 -1
  25. package/dist/chunk-EP5R4SFJ.js +4 -0
  26. package/dist/chunk-EP5R4SFJ.js.map +1 -0
  27. package/dist/{chunk-5W56X5HX.js → chunk-FCIQ3NDR.js} +2 -2
  28. package/dist/{chunk-HL2XTVPE.js → chunk-G6JMRKPA.js} +2 -2
  29. package/dist/{chunk-HIB3BFXI.cjs → chunk-GEGSED5I.cjs} +2 -2
  30. package/dist/{chunk-HIB3BFXI.cjs.map → chunk-GEGSED5I.cjs.map} +1 -1
  31. package/dist/{chunk-2AGUKOI4.js → chunk-GWRFSI2V.js} +2 -2
  32. package/dist/{chunk-X47DSANX.cjs → chunk-GYH2XRV5.cjs} +2 -2
  33. package/dist/{chunk-X47DSANX.cjs.map → chunk-GYH2XRV5.cjs.map} +1 -1
  34. package/dist/{chunk-HPWICESJ.cjs → chunk-H7RKHJW4.cjs} +2 -2
  35. package/dist/{chunk-HPWICESJ.cjs.map → chunk-H7RKHJW4.cjs.map} +1 -1
  36. package/dist/{chunk-PRWGO2PS.cjs → chunk-HCKLXU3O.cjs} +2 -2
  37. package/dist/{chunk-PRWGO2PS.cjs.map → chunk-HCKLXU3O.cjs.map} +1 -1
  38. package/dist/{chunk-5O535YRW.cjs → chunk-HD5AGH5Y.cjs} +2 -2
  39. package/dist/{chunk-5O535YRW.cjs.map → chunk-HD5AGH5Y.cjs.map} +1 -1
  40. package/dist/{chunk-II4GKC6I.cjs → chunk-HJTLMVKL.cjs} +2 -2
  41. package/dist/{chunk-II4GKC6I.cjs.map → chunk-HJTLMVKL.cjs.map} +1 -1
  42. package/dist/chunk-HPRZG47Z.cjs +4 -0
  43. package/dist/chunk-HPRZG47Z.cjs.map +1 -0
  44. package/dist/{chunk-GVN7FPA3.js → chunk-HQWHHX5G.js} +2 -2
  45. package/dist/{chunk-5BYAY76B.cjs → chunk-IBU23C5O.cjs} +2 -2
  46. package/dist/{chunk-5BYAY76B.cjs.map → chunk-IBU23C5O.cjs.map} +1 -1
  47. package/dist/{chunk-442G3TJT.cjs → chunk-IKACAZD6.cjs} +2 -2
  48. package/dist/{chunk-442G3TJT.cjs.map → chunk-IKACAZD6.cjs.map} +1 -1
  49. package/dist/{chunk-RNVIH5GE.cjs → chunk-ITIKNW5V.cjs} +2 -2
  50. package/dist/{chunk-RNVIH5GE.cjs.map → chunk-ITIKNW5V.cjs.map} +1 -1
  51. package/dist/{chunk-FYRU5TW5.js → chunk-LOZ7MNJB.js} +2 -2
  52. package/dist/chunk-MILM3WTW.cjs +4 -0
  53. package/dist/chunk-MILM3WTW.cjs.map +1 -0
  54. package/dist/chunk-NH3XHNZI.js +4 -0
  55. package/dist/chunk-NH3XHNZI.js.map +1 -0
  56. package/dist/{chunk-E7F4VIX4.js → chunk-NHBBYSIP.js} +2 -2
  57. package/dist/{chunk-OETOR5JL.cjs → chunk-NM6IOANT.cjs} +2 -2
  58. package/dist/{chunk-OETOR5JL.cjs.map → chunk-NM6IOANT.cjs.map} +1 -1
  59. package/dist/{chunk-66WTE4KP.js → chunk-NOEAGTZD.js} +2 -2
  60. package/dist/{chunk-YXONR42Y.js → chunk-OMFC7WL5.js} +2 -2
  61. package/dist/{chunk-Z4BV6MER.js → chunk-ORIRQN2S.js} +2 -2
  62. package/dist/{chunk-5P6WYPMO.cjs → chunk-OT4LNCUU.cjs} +2 -2
  63. package/dist/{chunk-5P6WYPMO.cjs.map → chunk-OT4LNCUU.cjs.map} +1 -1
  64. package/dist/{chunk-4PIL2ZIL.js → chunk-OUZD3M2B.js} +2 -2
  65. package/dist/{chunk-ZRURS7YW.js → chunk-PGNIIILR.js} +2 -2
  66. package/dist/{chunk-JZPT6HI4.cjs → chunk-QC7C2FCM.cjs} +2 -2
  67. package/dist/{chunk-JZPT6HI4.cjs.map → chunk-QC7C2FCM.cjs.map} +1 -1
  68. package/dist/{chunk-VZKBRGSY.js → chunk-QCFBAWB7.js} +2 -2
  69. package/dist/{chunk-TU2J3SLZ.cjs → chunk-QZ57NLHZ.cjs} +2 -2
  70. package/dist/{chunk-TU2J3SLZ.cjs.map → chunk-QZ57NLHZ.cjs.map} +1 -1
  71. package/dist/{chunk-LY7U64XG.js → chunk-R37FK3MT.js} +2 -2
  72. package/dist/{chunk-LEE6W35K.js → chunk-RMYZXT4P.js} +2 -2
  73. package/dist/{chunk-M4M5HXZW.js → chunk-RYDWH7IN.js} +2 -2
  74. package/dist/{chunk-4O2TRA5H.js → chunk-S4SIDGQ2.js} +2 -2
  75. package/dist/{chunk-ELPYGAQ6.cjs → chunk-SA3XUE4F.cjs} +2 -2
  76. package/dist/{chunk-ELPYGAQ6.cjs.map → chunk-SA3XUE4F.cjs.map} +1 -1
  77. package/dist/{chunk-UGXE62RP.cjs → chunk-T545JMFI.cjs} +2 -2
  78. package/dist/{chunk-UGXE62RP.cjs.map → chunk-T545JMFI.cjs.map} +1 -1
  79. package/dist/chunk-TJJUNG72.cjs +4 -0
  80. package/dist/chunk-TJJUNG72.cjs.map +1 -0
  81. package/dist/{chunk-6SDDML2Q.js → chunk-TKBCQH6F.js} +2 -2
  82. package/dist/{chunk-FVRGCOQE.cjs → chunk-TNAZRZLP.cjs} +2 -2
  83. package/dist/{chunk-FVRGCOQE.cjs.map → chunk-TNAZRZLP.cjs.map} +1 -1
  84. package/dist/{chunk-M7IRN3DO.js → chunk-TT64AG3N.js} +2 -2
  85. package/dist/{chunk-WHN7UIFI.cjs → chunk-WBRNLI2A.cjs} +2 -2
  86. package/dist/{chunk-WHN7UIFI.cjs.map → chunk-WBRNLI2A.cjs.map} +1 -1
  87. package/dist/{chunk-Z5V6AOA3.cjs → chunk-WINB2WI7.cjs} +2 -2
  88. package/dist/{chunk-Z5V6AOA3.cjs.map → chunk-WINB2WI7.cjs.map} +1 -1
  89. package/dist/{chunk-36WGBXBK.js → chunk-WTBHVREU.js} +2 -2
  90. package/dist/{chunk-MOY2EIGY.js → chunk-XTVYC2LZ.js} +2 -2
  91. package/dist/{chunk-IF3C3L42.js → chunk-YEYEZFIA.js} +2 -2
  92. package/dist/{chunk-EDTW2Z4H.cjs → chunk-Z4U3QUSD.cjs} +2 -2
  93. package/dist/{chunk-EDTW2Z4H.cjs.map → chunk-Z4U3QUSD.cjs.map} +1 -1
  94. package/dist/components/Accordion/Accordion.cjs +1 -1
  95. package/dist/components/Accordion/Accordion.js +1 -1
  96. package/dist/components/Accordion/AccordionContent.cjs +1 -1
  97. package/dist/components/Accordion/AccordionContent.cjs.map +1 -1
  98. package/dist/components/Accordion/AccordionContent.d.ts.map +1 -1
  99. package/dist/components/Accordion/AccordionContent.js +1 -1
  100. package/dist/components/Accordion/AccordionContent.props.d.ts +15 -1
  101. package/dist/components/Accordion/AccordionContent.props.d.ts.map +1 -1
  102. package/dist/components/Accordion/AccordionItem.cjs +1 -1
  103. package/dist/components/Accordion/AccordionItem.js +1 -1
  104. package/dist/components/Alert/Alert.cjs +1 -1
  105. package/dist/components/Alert/Alert.js +1 -1
  106. package/dist/components/Breadcrumbs/BreadcrumbItem.cjs +1 -1
  107. package/dist/components/Breadcrumbs/BreadcrumbItem.js +1 -1
  108. package/dist/components/Button/Button.cjs +1 -1
  109. package/dist/components/Button/Button.js +1 -1
  110. package/dist/components/CardAccordion/CardAccordion.cjs +1 -1
  111. package/dist/components/CardAccordion/CardAccordion.js +1 -1
  112. package/dist/components/CardAccordion/CardAccordionButton.cjs +1 -1
  113. package/dist/components/CardAccordion/CardAccordionButton.js +1 -1
  114. package/dist/components/CardAccordion/CardAccordionItem.cjs +1 -1
  115. package/dist/components/CardAccordion/CardAccordionItem.js +1 -1
  116. package/dist/components/Combobox/Combobox.cjs +1 -1
  117. package/dist/components/Combobox/Combobox.js +1 -1
  118. package/dist/components/CurrencyInput/CurrencyInput.cjs +1 -1
  119. package/dist/components/CurrencyInput/CurrencyInput.d.ts.map +1 -1
  120. package/dist/components/CurrencyInput/CurrencyInput.js +1 -1
  121. package/dist/components/DatePicker/DatePicker.cjs +1 -1
  122. package/dist/components/DatePicker/DatePicker.js +1 -1
  123. package/dist/components/DatePicker/DatePickerHeader.cjs +1 -1
  124. package/dist/components/DatePicker/DatePickerHeader.js +1 -1
  125. package/dist/components/DescriptionList/DescriptionList.cjs +1 -1
  126. package/dist/components/DescriptionList/DescriptionList.js +1 -1
  127. package/dist/components/ExpandableCard/ExpandableCard.cjs +1 -1
  128. package/dist/components/ExpandableCard/ExpandableCard.js +1 -1
  129. package/dist/components/ExpandableCard/ExpandableCardGroup.cjs +1 -1
  130. package/dist/components/ExpandableCard/ExpandableCardGroup.js +1 -1
  131. package/dist/components/IconButton/IconButton.cjs +1 -1
  132. package/dist/components/IconButton/IconButton.js +1 -1
  133. package/dist/components/List/List.cjs +1 -1
  134. package/dist/components/List/List.js +1 -1
  135. package/dist/components/Modal/Modal.cjs +1 -1
  136. package/dist/components/Modal/Modal.cjs.map +1 -1
  137. package/dist/components/Modal/Modal.d.ts.map +1 -1
  138. package/dist/components/Modal/Modal.js +1 -1
  139. package/dist/components/Modal/Modal.props.d.ts +13 -1
  140. package/dist/components/Modal/Modal.props.d.ts.map +1 -1
  141. package/dist/components/Pagination/Pagination.cjs +1 -1
  142. package/dist/components/Pagination/Pagination.js +1 -1
  143. package/dist/components/PasswordInput/PasswordInput.cjs +1 -1
  144. package/dist/components/PasswordInput/PasswordInput.js +1 -1
  145. package/dist/components/ProgressBar/ProgressBar.cjs +1 -1
  146. package/dist/components/ProgressBar/ProgressBar.js +1 -1
  147. package/dist/components/ProgressBar/ProgressBarCircular.cjs +1 -1
  148. package/dist/components/ProgressBar/ProgressBarCircular.js +1 -1
  149. package/dist/components/ProgressBar/ProgressBarLinear.cjs +1 -1
  150. package/dist/components/ProgressBar/ProgressBarLinear.js +1 -1
  151. package/dist/components/RadioTile/RadioTile.cjs +1 -1
  152. package/dist/components/RadioTile/RadioTile.js +1 -1
  153. package/dist/components/SearchInput/SearchInput.cjs +1 -1
  154. package/dist/components/SearchInput/SearchInput.js +1 -1
  155. package/dist/components/SectionHeader/SectionHeader.cjs +1 -1
  156. package/dist/components/SectionHeader/SectionHeader.js +1 -1
  157. package/dist/components/Skeleton/SkeletonBodyText.cjs +1 -1
  158. package/dist/components/Skeleton/SkeletonBodyText.js +1 -1
  159. package/dist/components/Table/TablePagination.cjs +1 -1
  160. package/dist/components/Table/TablePagination.js +1 -1
  161. package/dist/components/TextInput/TextInput.cjs +1 -1
  162. package/dist/components/TextInput/TextInput.js +1 -1
  163. package/dist/components/VerificationInput/VerificationInput.cjs +1 -1
  164. package/dist/components/VerificationInput/VerificationInput.js +1 -1
  165. package/dist/index.cjs +1 -1
  166. package/dist/index.cjs.map +1 -1
  167. package/dist/index.js +1 -1
  168. package/package.json +3 -3
  169. package/public/llms/components/accordion.md +9 -5
  170. package/public/llms/components/modal.md +18 -1
  171. package/public/llms/docs/getting-started.md +1 -1
  172. package/dist/chunk-IKYAMUVC.js +0 -4
  173. package/dist/chunk-IKYAMUVC.js.map +0 -1
  174. package/dist/chunk-NCC6UCQ3.js +0 -4
  175. package/dist/chunk-NCC6UCQ3.js.map +0 -1
  176. package/dist/chunk-PR7YY5TA.cjs +0 -4
  177. package/dist/chunk-PR7YY5TA.cjs.map +0 -1
  178. package/dist/chunk-T2WIDWP7.cjs +0 -4
  179. package/dist/chunk-T2WIDWP7.cjs.map +0 -1
  180. package/dist/chunk-UENHGDFX.js +0 -4
  181. package/dist/chunk-UENHGDFX.js.map +0 -1
  182. package/dist/chunk-ZDNAR6RW.cjs +0 -4
  183. package/dist/chunk-ZDNAR6RW.cjs.map +0 -1
  184. /package/dist/{chunk-A5H4MI3R.js.map → chunk-2POQFUPW.js.map} +0 -0
  185. /package/dist/{chunk-GI5KDYNY.js.map → chunk-3UMZQPTB.js.map} +0 -0
  186. /package/dist/{chunk-BQREA63R.js.map → chunk-5SZOTFTN.js.map} +0 -0
  187. /package/dist/{chunk-LH3XNBC5.js.map → chunk-64CRCD2F.js.map} +0 -0
  188. /package/dist/{chunk-C6CDS5PQ.js.map → chunk-6YP6GBJJ.js.map} +0 -0
  189. /package/dist/{chunk-WBQ4Y5K5.js.map → chunk-DGLSILZC.js.map} +0 -0
  190. /package/dist/{chunk-5W56X5HX.js.map → chunk-FCIQ3NDR.js.map} +0 -0
  191. /package/dist/{chunk-HL2XTVPE.js.map → chunk-G6JMRKPA.js.map} +0 -0
  192. /package/dist/{chunk-2AGUKOI4.js.map → chunk-GWRFSI2V.js.map} +0 -0
  193. /package/dist/{chunk-GVN7FPA3.js.map → chunk-HQWHHX5G.js.map} +0 -0
  194. /package/dist/{chunk-FYRU5TW5.js.map → chunk-LOZ7MNJB.js.map} +0 -0
  195. /package/dist/{chunk-E7F4VIX4.js.map → chunk-NHBBYSIP.js.map} +0 -0
  196. /package/dist/{chunk-66WTE4KP.js.map → chunk-NOEAGTZD.js.map} +0 -0
  197. /package/dist/{chunk-YXONR42Y.js.map → chunk-OMFC7WL5.js.map} +0 -0
  198. /package/dist/{chunk-Z4BV6MER.js.map → chunk-ORIRQN2S.js.map} +0 -0
  199. /package/dist/{chunk-4PIL2ZIL.js.map → chunk-OUZD3M2B.js.map} +0 -0
  200. /package/dist/{chunk-ZRURS7YW.js.map → chunk-PGNIIILR.js.map} +0 -0
  201. /package/dist/{chunk-VZKBRGSY.js.map → chunk-QCFBAWB7.js.map} +0 -0
  202. /package/dist/{chunk-LY7U64XG.js.map → chunk-R37FK3MT.js.map} +0 -0
  203. /package/dist/{chunk-LEE6W35K.js.map → chunk-RMYZXT4P.js.map} +0 -0
  204. /package/dist/{chunk-M4M5HXZW.js.map → chunk-RYDWH7IN.js.map} +0 -0
  205. /package/dist/{chunk-4O2TRA5H.js.map → chunk-S4SIDGQ2.js.map} +0 -0
  206. /package/dist/{chunk-6SDDML2Q.js.map → chunk-TKBCQH6F.js.map} +0 -0
  207. /package/dist/{chunk-M7IRN3DO.js.map → chunk-TT64AG3N.js.map} +0 -0
  208. /package/dist/{chunk-36WGBXBK.js.map → chunk-WTBHVREU.js.map} +0 -0
  209. /package/dist/{chunk-MOY2EIGY.js.map → chunk-XTVYC2LZ.js.map} +0 -0
  210. /package/dist/{chunk-IF3C3L42.js.map → chunk-YEYEZFIA.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/CurrencyInput/CurrencyInput.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useState, useRef, useEffect } from 'react';\nimport { cn } from '../../helpers/cn';\nimport type { ChangeEvent } from 'react';\nimport { withGlobalPrefix } from '../../helpers/with-global-prefix';\nimport { TextInput } from '../TextInput/TextInput';\nimport { InputSlot } from '../InputSlot/InputSlot';\nimport type { CurrencyInputProps } from './CurrencyInput.props';\nimport { DetailText } from '../DetailText/DetailText';\nimport type { InputBaseElement } from '../InputBase/InputBase';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\n\nconst COMPONENT_NAME = 'CurrencyInput';\nconst componentClassName = withGlobalPrefix(COMPONENT_NAME);\n\n/**\n * Use CurrencyInput for entering monetary amounts, such as in Cashback and\n * payment areas. It displays values with comma-separated thousands by default\n * and returns the underlying value without formatting via `onChange`.\n *\n * For general text entry, use TextInput instead.\n *\n * @summary An input field for entering monetary amounts.\n */\nexport const CurrencyInput = forwardRef<InputBaseElement, CurrencyInputProps>(\n (\n {\n className,\n disabled,\n value: controlledValue,\n onChange,\n placeholder = '0.00',\n disableGroupSeparators,\n defaultValue,\n ...props\n },\n forwardedRef\n ) => {\n const maxDecimals = 2;\n const [internalValue, setInternalValue] = useState<string>(\n typeof defaultValue === 'string' ? defaultValue : ''\n );\n const internalRef = useRef<HTMLInputElement>(null);\n const cursorPositionRef = useRef<number | null>(null);\n\n // Merge forwarded ref (if any) with internal ref\n const inputRef = useMergedRefs(forwardedRef, internalRef);\n\n const isControlled = controlledValue !== undefined;\n const numericValue = isControlled ? String(controlledValue ?? '') : internalValue;\n\n // Format value for display\n const formatValue = (value: string): string => {\n if (!value) return '';\n\n const parts = value.split('.');\n let integerPart = parts[0] || '';\n\n if (!disableGroupSeparators) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n const decimalPart = parts[1];\n return decimalPart !== undefined ? integerPart + '.' + decimalPart : integerPart;\n };\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>): void => {\n const input = e.target.value;\n const cursorPosition = e.target.selectionStart || 0;\n const previousDisplayValue = formatValue(numericValue);\n\n // Remove all non-digits except decimal\n const cleaned = input.replace(/[^\\d.]/g, '');\n\n // Ensure only one decimal point\n const parts = cleaned.split('.');\n const sanitized = parts.length > 2 ? parts[0] + '.' + parts.slice(1).join('') : cleaned;\n\n // Limit decimal places\n const finalParts = sanitized.split('.');\n const limitedValue =\n finalParts[1] !== undefined\n ? finalParts[0] + '.' + finalParts[1].substring(0, maxDecimals)\n : sanitized;\n\n // Calculate new cursor position\n if (!disableGroupSeparators) {\n const newDisplayValue = formatValue(limitedValue);\n const oldCommasBeforeCursor = (\n previousDisplayValue\n .slice(0, Math.min(cursorPosition, previousDisplayValue.length))\n .match(/,/g) || []\n ).length;\n const newCommasBeforeCursor = (\n newDisplayValue.slice(0, Math.min(cursorPosition, newDisplayValue.length)).match(/,/g) ||\n []\n ).length;\n const commaDiff = newCommasBeforeCursor - oldCommasBeforeCursor;\n cursorPositionRef.current = cursorPosition + commaDiff;\n } else {\n cursorPositionRef.current = null;\n }\n if (!isControlled) {\n setInternalValue(limitedValue);\n }\n\n // Return numeric value WITHOUT commas\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: {\n ...e.target,\n value: limitedValue, // Raw numeric value without commas\n },\n currentTarget: {\n ...e.currentTarget,\n value: limitedValue,\n },\n } as ChangeEvent<HTMLInputElement>;\n\n onChange(syntheticEvent);\n }\n };\n\n // Restore cursor position after render\n useEffect(() => {\n if (\n internalRef &&\n typeof internalRef === 'object' &&\n internalRef.current &&\n cursorPositionRef.current !== null\n ) {\n internalRef.current.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current);\n cursorPositionRef.current = null;\n }\n });\n\n return (\n <TextInput\n ref={inputRef}\n className={cn(componentClassName, className)}\n type=\"text\"\n inputMode=\"decimal\"\n disabled={disabled}\n value={formatValue(numericValue)} // Display with commas\n onChange={handleChange}\n placeholder={placeholder}\n data-testid={componentClassName}\n {...props}\n >\n <InputSlot placement=\"prefix\">\n <DetailText size=\"3xl\">£</DetailText>\n </InputSlot>\n </TextInput>\n );\n }\n);\n\nCurrencyInput.displayName = COMPONENT_NAME;\n"],"mappings":"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","names":["forwardRef","useState","useRef","useEffect","useMergedRefs","jsx","COMPONENT_NAME","componentClassName","withGlobalPrefix","CurrencyInput","forwardRef","className","disabled","controlledValue","onChange","placeholder","disableGroupSeparators","defaultValue","props","forwardedRef","internalValue","setInternalValue","useState","internalRef","useRef","cursorPositionRef","inputRef","isControlled","numericValue","formatValue","value","parts","integerPart","decimalPart","handleChange","e","input","cursorPosition","previousDisplayValue","cleaned","sanitized","finalParts","limitedValue","newDisplayValue","oldCommasBeforeCursor","commaDiff","syntheticEvent","useEffect","TextInput","cn","InputSlot","DetailText"]}
@@ -1,4 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
2
-
3
- var _chunkZ5V6AOA3cjs = require('./chunk-Z5V6AOA3.cjs');var _chunkIZIJVD62cjs = require('./chunk-IZIJVD62.cjs');var _chunkIAFYIHVPcjs = require('./chunk-IAFYIHVP.cjs');var _chunkONNSZMWFcjs = require('./chunk-ONNSZMWF.cjs');var _chunk4Q432K4Wcjs = require('./chunk-4Q432K4W.cjs');var _react = require('react');var _useMergedRefs = require('@base-ui/utils/useMergedRefs');var _jsxruntime = require('react/jsx-runtime');var D="CurrencyInput",B=_chunk4Q432K4Wcjs.b.call(void 0, D),F= exports.a =_react.forwardRef.call(void 0, ({className:R,disabled:w,value:m,onChange:f,placeholder:N="0.00",disableGroupSeparators:g,defaultValue:d,...S},V)=>{let[b,H]=_react.useState.call(void 0, typeof d=="string"?d:""),r=_react.useRef.call(void 0, null),n=_react.useRef.call(void 0, null),L=_useMergedRefs.useMergedRefs.call(void 0, V,r),h=m!==void 0,C=h?String(_nullishCoalesce(m, () => (""))):b,l=t=>{if(!t)return"";let o=t.split("."),e=o[0]||"";g||(e=e.replace(/\B(?=(\d{3})+(?!\d))/g,","));let s=o[1];return s!==void 0?e+"."+s:e},z=t=>{let o=t.target.value,e=t.target.selectionStart||0,s=l(C),I=o.replace(/[^\d.]/g,""),c=I.split("."),y=c.length>2?c[0]+"."+c.slice(1).join(""):I,u=y.split("."),i=u[1]!==void 0?u[0]+"."+u[1].substring(0,2):y;if(g)n.current=null;else{let a=l(i),O=(s.slice(0,Math.min(e,s.length)).match(/,/g)||[]).length,j=(a.slice(0,Math.min(e,a.length)).match(/,/g)||[]).length-O;n.current=e+j}if(h||H(i),f){let a={...t,target:{...t.target,value:i},currentTarget:{...t.currentTarget,value:i}};f(a)}};return _react.useEffect.call(void 0, ()=>{r&&typeof r=="object"&&r.current&&n.current!==null&&(r.current.setSelectionRange(n.current,n.current),n.current=null)}),_jsxruntime.jsx.call(void 0, _chunkZ5V6AOA3cjs.a,{ref:L,className:_chunkONNSZMWFcjs.a.call(void 0, B,R),type:"text",inputMode:"decimal",disabled:w,value:l(C),onChange:z,placeholder:N,"data-testid":B,...S,children:_jsxruntime.jsx.call(void 0, _chunkIAFYIHVPcjs.a,{placement:"prefix",children:_jsxruntime.jsx.call(void 0, _chunkIZIJVD62cjs.a,{size:"3xl",children:"\xA3"})})})});F.displayName=D;exports.a = F;
4
- //# sourceMappingURL=chunk-ZDNAR6RW.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/hearth/hearth/packages/react/dist/chunk-ZDNAR6RW.cjs","../src/components/CurrencyInput/CurrencyInput.tsx"],"names":["COMPONENT_NAME","componentClassName","withGlobalPrefix","CurrencyInput","forwardRef","className","disabled","controlledValue","onChange","placeholder","disableGroupSeparators","defaultValue","props","forwardedRef","internalValue","setInternalValue","useState","internalRef","useRef","cursorPositionRef","inputRef","useMergedRefs","isControlled","numericValue","formatValue","value","parts","integerPart","decimalPart","handleChange","e","input","cursorPosition","previousDisplayValue","cleaned","sanitized","finalParts","limitedValue","newDisplayValue","oldCommasBeforeCursor","commaDiff","syntheticEvent","useEffect","jsx","TextInput","cn","InputSlot","DetailText"],"mappings":"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","file":"/home/runner/work/hearth/hearth/packages/react/dist/chunk-ZDNAR6RW.cjs","sourcesContent":[null,"'use client';\n\nimport { forwardRef, useState, useRef, useEffect } from 'react';\nimport { cn } from '../../helpers/cn';\nimport type { ChangeEvent } from 'react';\nimport { withGlobalPrefix } from '../../helpers/with-global-prefix';\nimport { TextInput } from '../TextInput/TextInput';\nimport { InputSlot } from '../InputSlot/InputSlot';\nimport type { CurrencyInputProps } from './CurrencyInput.props';\nimport { DetailText } from '../DetailText/DetailText';\nimport type { InputBaseElement } from '../InputBase/InputBase';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\n\nconst COMPONENT_NAME = 'CurrencyInput';\nconst componentClassName = withGlobalPrefix(COMPONENT_NAME);\n\n/**\n * Use CurrencyInput for entering monetary amounts, such as in Cashback and\n * payment areas. It displays values with comma-separated thousands by default\n * and returns the underlying value without formatting via `onChange`.\n *\n * For general text entry, use TextInput instead.\n *\n * @summary An input field for entering monetary amounts.\n */\nexport const CurrencyInput = forwardRef<InputBaseElement, CurrencyInputProps>(\n (\n {\n className,\n disabled,\n value: controlledValue,\n onChange,\n placeholder = '0.00',\n disableGroupSeparators,\n defaultValue,\n ...props\n },\n forwardedRef\n ) => {\n const maxDecimals = 2;\n const [internalValue, setInternalValue] = useState<string>(\n typeof defaultValue === 'string' ? defaultValue : ''\n );\n const internalRef = useRef<HTMLInputElement>(null);\n const cursorPositionRef = useRef<number | null>(null);\n\n // Merge forwarded ref (if any) with internal ref\n const inputRef = useMergedRefs(forwardedRef, internalRef);\n\n const isControlled = controlledValue !== undefined;\n const numericValue = isControlled ? String(controlledValue ?? '') : internalValue;\n\n // Format value for display\n const formatValue = (value: string): string => {\n if (!value) return '';\n\n const parts = value.split('.');\n let integerPart = parts[0] || '';\n\n if (!disableGroupSeparators) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n const decimalPart = parts[1];\n return decimalPart !== undefined ? integerPart + '.' + decimalPart : integerPart;\n };\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>): void => {\n const input = e.target.value;\n const cursorPosition = e.target.selectionStart || 0;\n const previousDisplayValue = formatValue(numericValue);\n\n // Remove all non-digits except decimal\n const cleaned = input.replace(/[^\\d.]/g, '');\n\n // Ensure only one decimal point\n const parts = cleaned.split('.');\n const sanitized = parts.length > 2 ? parts[0] + '.' + parts.slice(1).join('') : cleaned;\n\n // Limit decimal places\n const finalParts = sanitized.split('.');\n const limitedValue =\n finalParts[1] !== undefined\n ? finalParts[0] + '.' + finalParts[1].substring(0, maxDecimals)\n : sanitized;\n\n // Calculate new cursor position\n if (!disableGroupSeparators) {\n const newDisplayValue = formatValue(limitedValue);\n const oldCommasBeforeCursor = (\n previousDisplayValue\n .slice(0, Math.min(cursorPosition, previousDisplayValue.length))\n .match(/,/g) || []\n ).length;\n const newCommasBeforeCursor = (\n newDisplayValue.slice(0, Math.min(cursorPosition, newDisplayValue.length)).match(/,/g) ||\n []\n ).length;\n const commaDiff = newCommasBeforeCursor - oldCommasBeforeCursor;\n cursorPositionRef.current = cursorPosition + commaDiff;\n } else {\n cursorPositionRef.current = null;\n }\n if (!isControlled) {\n setInternalValue(limitedValue);\n }\n\n // Return numeric value WITHOUT commas\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: {\n ...e.target,\n value: limitedValue, // Raw numeric value without commas\n },\n currentTarget: {\n ...e.currentTarget,\n value: limitedValue,\n },\n } as ChangeEvent<HTMLInputElement>;\n\n onChange(syntheticEvent);\n }\n };\n\n // Restore cursor position after render\n useEffect(() => {\n if (\n internalRef &&\n typeof internalRef === 'object' &&\n internalRef.current &&\n cursorPositionRef.current !== null\n ) {\n internalRef.current.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current);\n cursorPositionRef.current = null;\n }\n });\n\n return (\n <TextInput\n ref={inputRef}\n className={cn(componentClassName, className)}\n type=\"text\"\n inputMode=\"decimal\"\n disabled={disabled}\n value={formatValue(numericValue)} // Display with commas\n onChange={handleChange}\n placeholder={placeholder}\n data-testid={componentClassName}\n {...props}\n >\n <InputSlot placement=\"prefix\">\n <DetailText size=\"3xl\">£</DetailText>\n </InputSlot>\n </TextInput>\n );\n }\n);\n\nCurrencyInput.displayName = COMPONENT_NAME;\n"]}