@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.
- package/dist/{chunk-A5H4MI3R.js → chunk-2POQFUPW.js} +2 -2
- package/dist/{chunk-B7FZH3QJ.cjs → chunk-2VGT344B.cjs} +2 -2
- package/dist/{chunk-B7FZH3QJ.cjs.map → chunk-2VGT344B.cjs.map} +1 -1
- package/dist/{chunk-GI5KDYNY.js → chunk-3UMZQPTB.js} +2 -2
- package/dist/{chunk-VBM2XJMT.cjs → chunk-53SQGRZU.cjs} +2 -2
- package/dist/{chunk-VBM2XJMT.cjs.map → chunk-53SQGRZU.cjs.map} +1 -1
- package/dist/{chunk-DT6UGKV4.cjs → chunk-57UF42KD.cjs} +2 -2
- package/dist/{chunk-DT6UGKV4.cjs.map → chunk-57UF42KD.cjs.map} +1 -1
- package/dist/{chunk-BQREA63R.js → chunk-5SZOTFTN.js} +2 -2
- package/dist/{chunk-6PSROLGA.cjs → chunk-5ZWFYZWX.cjs} +2 -2
- package/dist/{chunk-6PSROLGA.cjs.map → chunk-5ZWFYZWX.cjs.map} +1 -1
- package/dist/{chunk-LH3XNBC5.js → chunk-64CRCD2F.js} +2 -2
- package/dist/{chunk-HVV2WVNT.cjs → chunk-6FG65NIR.cjs} +2 -2
- package/dist/{chunk-HVV2WVNT.cjs.map → chunk-6FG65NIR.cjs.map} +1 -1
- package/dist/{chunk-JXJFIRXF.cjs → chunk-6VSNPADP.cjs} +2 -2
- package/dist/{chunk-JXJFIRXF.cjs.map → chunk-6VSNPADP.cjs.map} +1 -1
- package/dist/{chunk-C6CDS5PQ.js → chunk-6YP6GBJJ.js} +2 -2
- package/dist/{chunk-2HSP772B.cjs → chunk-ACXMHPQ3.cjs} +2 -2
- package/dist/{chunk-2HSP772B.cjs.map → chunk-ACXMHPQ3.cjs.map} +1 -1
- package/dist/chunk-BQOVHNOK.js +4 -0
- package/dist/chunk-BQOVHNOK.js.map +1 -0
- package/dist/{chunk-WBQ4Y5K5.js → chunk-DGLSILZC.js} +2 -2
- package/dist/{chunk-ZMALQQ3U.cjs → chunk-E5MPVODK.cjs} +2 -2
- package/dist/{chunk-ZMALQQ3U.cjs.map → chunk-E5MPVODK.cjs.map} +1 -1
- package/dist/chunk-EP5R4SFJ.js +4 -0
- package/dist/chunk-EP5R4SFJ.js.map +1 -0
- package/dist/{chunk-5W56X5HX.js → chunk-FCIQ3NDR.js} +2 -2
- package/dist/{chunk-HL2XTVPE.js → chunk-G6JMRKPA.js} +2 -2
- package/dist/{chunk-HIB3BFXI.cjs → chunk-GEGSED5I.cjs} +2 -2
- package/dist/{chunk-HIB3BFXI.cjs.map → chunk-GEGSED5I.cjs.map} +1 -1
- package/dist/{chunk-2AGUKOI4.js → chunk-GWRFSI2V.js} +2 -2
- package/dist/{chunk-X47DSANX.cjs → chunk-GYH2XRV5.cjs} +2 -2
- package/dist/{chunk-X47DSANX.cjs.map → chunk-GYH2XRV5.cjs.map} +1 -1
- package/dist/{chunk-HPWICESJ.cjs → chunk-H7RKHJW4.cjs} +2 -2
- package/dist/{chunk-HPWICESJ.cjs.map → chunk-H7RKHJW4.cjs.map} +1 -1
- package/dist/{chunk-PRWGO2PS.cjs → chunk-HCKLXU3O.cjs} +2 -2
- package/dist/{chunk-PRWGO2PS.cjs.map → chunk-HCKLXU3O.cjs.map} +1 -1
- package/dist/{chunk-5O535YRW.cjs → chunk-HD5AGH5Y.cjs} +2 -2
- package/dist/{chunk-5O535YRW.cjs.map → chunk-HD5AGH5Y.cjs.map} +1 -1
- package/dist/{chunk-II4GKC6I.cjs → chunk-HJTLMVKL.cjs} +2 -2
- package/dist/{chunk-II4GKC6I.cjs.map → chunk-HJTLMVKL.cjs.map} +1 -1
- package/dist/chunk-HPRZG47Z.cjs +4 -0
- package/dist/chunk-HPRZG47Z.cjs.map +1 -0
- package/dist/{chunk-GVN7FPA3.js → chunk-HQWHHX5G.js} +2 -2
- package/dist/{chunk-5BYAY76B.cjs → chunk-IBU23C5O.cjs} +2 -2
- package/dist/{chunk-5BYAY76B.cjs.map → chunk-IBU23C5O.cjs.map} +1 -1
- package/dist/{chunk-442G3TJT.cjs → chunk-IKACAZD6.cjs} +2 -2
- package/dist/{chunk-442G3TJT.cjs.map → chunk-IKACAZD6.cjs.map} +1 -1
- package/dist/{chunk-RNVIH5GE.cjs → chunk-ITIKNW5V.cjs} +2 -2
- package/dist/{chunk-RNVIH5GE.cjs.map → chunk-ITIKNW5V.cjs.map} +1 -1
- package/dist/{chunk-FYRU5TW5.js → chunk-LOZ7MNJB.js} +2 -2
- package/dist/chunk-MILM3WTW.cjs +4 -0
- package/dist/chunk-MILM3WTW.cjs.map +1 -0
- package/dist/chunk-NH3XHNZI.js +4 -0
- package/dist/chunk-NH3XHNZI.js.map +1 -0
- package/dist/{chunk-E7F4VIX4.js → chunk-NHBBYSIP.js} +2 -2
- package/dist/{chunk-OETOR5JL.cjs → chunk-NM6IOANT.cjs} +2 -2
- package/dist/{chunk-OETOR5JL.cjs.map → chunk-NM6IOANT.cjs.map} +1 -1
- package/dist/{chunk-66WTE4KP.js → chunk-NOEAGTZD.js} +2 -2
- package/dist/{chunk-YXONR42Y.js → chunk-OMFC7WL5.js} +2 -2
- package/dist/{chunk-Z4BV6MER.js → chunk-ORIRQN2S.js} +2 -2
- package/dist/{chunk-5P6WYPMO.cjs → chunk-OT4LNCUU.cjs} +2 -2
- package/dist/{chunk-5P6WYPMO.cjs.map → chunk-OT4LNCUU.cjs.map} +1 -1
- package/dist/{chunk-4PIL2ZIL.js → chunk-OUZD3M2B.js} +2 -2
- package/dist/{chunk-ZRURS7YW.js → chunk-PGNIIILR.js} +2 -2
- package/dist/{chunk-JZPT6HI4.cjs → chunk-QC7C2FCM.cjs} +2 -2
- package/dist/{chunk-JZPT6HI4.cjs.map → chunk-QC7C2FCM.cjs.map} +1 -1
- package/dist/{chunk-VZKBRGSY.js → chunk-QCFBAWB7.js} +2 -2
- package/dist/{chunk-TU2J3SLZ.cjs → chunk-QZ57NLHZ.cjs} +2 -2
- package/dist/{chunk-TU2J3SLZ.cjs.map → chunk-QZ57NLHZ.cjs.map} +1 -1
- package/dist/{chunk-LY7U64XG.js → chunk-R37FK3MT.js} +2 -2
- package/dist/{chunk-LEE6W35K.js → chunk-RMYZXT4P.js} +2 -2
- package/dist/{chunk-M4M5HXZW.js → chunk-RYDWH7IN.js} +2 -2
- package/dist/{chunk-4O2TRA5H.js → chunk-S4SIDGQ2.js} +2 -2
- package/dist/{chunk-ELPYGAQ6.cjs → chunk-SA3XUE4F.cjs} +2 -2
- package/dist/{chunk-ELPYGAQ6.cjs.map → chunk-SA3XUE4F.cjs.map} +1 -1
- package/dist/{chunk-UGXE62RP.cjs → chunk-T545JMFI.cjs} +2 -2
- package/dist/{chunk-UGXE62RP.cjs.map → chunk-T545JMFI.cjs.map} +1 -1
- package/dist/chunk-TJJUNG72.cjs +4 -0
- package/dist/chunk-TJJUNG72.cjs.map +1 -0
- package/dist/{chunk-6SDDML2Q.js → chunk-TKBCQH6F.js} +2 -2
- package/dist/{chunk-FVRGCOQE.cjs → chunk-TNAZRZLP.cjs} +2 -2
- package/dist/{chunk-FVRGCOQE.cjs.map → chunk-TNAZRZLP.cjs.map} +1 -1
- package/dist/{chunk-M7IRN3DO.js → chunk-TT64AG3N.js} +2 -2
- package/dist/{chunk-WHN7UIFI.cjs → chunk-WBRNLI2A.cjs} +2 -2
- package/dist/{chunk-WHN7UIFI.cjs.map → chunk-WBRNLI2A.cjs.map} +1 -1
- package/dist/{chunk-Z5V6AOA3.cjs → chunk-WINB2WI7.cjs} +2 -2
- package/dist/{chunk-Z5V6AOA3.cjs.map → chunk-WINB2WI7.cjs.map} +1 -1
- package/dist/{chunk-36WGBXBK.js → chunk-WTBHVREU.js} +2 -2
- package/dist/{chunk-MOY2EIGY.js → chunk-XTVYC2LZ.js} +2 -2
- package/dist/{chunk-IF3C3L42.js → chunk-YEYEZFIA.js} +2 -2
- package/dist/{chunk-EDTW2Z4H.cjs → chunk-Z4U3QUSD.cjs} +2 -2
- package/dist/{chunk-EDTW2Z4H.cjs.map → chunk-Z4U3QUSD.cjs.map} +1 -1
- package/dist/components/Accordion/Accordion.cjs +1 -1
- package/dist/components/Accordion/Accordion.js +1 -1
- package/dist/components/Accordion/AccordionContent.cjs +1 -1
- package/dist/components/Accordion/AccordionContent.cjs.map +1 -1
- package/dist/components/Accordion/AccordionContent.d.ts.map +1 -1
- package/dist/components/Accordion/AccordionContent.js +1 -1
- package/dist/components/Accordion/AccordionContent.props.d.ts +15 -1
- package/dist/components/Accordion/AccordionContent.props.d.ts.map +1 -1
- package/dist/components/Accordion/AccordionItem.cjs +1 -1
- package/dist/components/Accordion/AccordionItem.js +1 -1
- package/dist/components/Alert/Alert.cjs +1 -1
- package/dist/components/Alert/Alert.js +1 -1
- package/dist/components/Breadcrumbs/BreadcrumbItem.cjs +1 -1
- package/dist/components/Breadcrumbs/BreadcrumbItem.js +1 -1
- package/dist/components/Button/Button.cjs +1 -1
- package/dist/components/Button/Button.js +1 -1
- package/dist/components/CardAccordion/CardAccordion.cjs +1 -1
- package/dist/components/CardAccordion/CardAccordion.js +1 -1
- package/dist/components/CardAccordion/CardAccordionButton.cjs +1 -1
- package/dist/components/CardAccordion/CardAccordionButton.js +1 -1
- package/dist/components/CardAccordion/CardAccordionItem.cjs +1 -1
- package/dist/components/CardAccordion/CardAccordionItem.js +1 -1
- package/dist/components/Combobox/Combobox.cjs +1 -1
- package/dist/components/Combobox/Combobox.js +1 -1
- package/dist/components/CurrencyInput/CurrencyInput.cjs +1 -1
- package/dist/components/CurrencyInput/CurrencyInput.d.ts.map +1 -1
- package/dist/components/CurrencyInput/CurrencyInput.js +1 -1
- package/dist/components/DatePicker/DatePicker.cjs +1 -1
- package/dist/components/DatePicker/DatePicker.js +1 -1
- package/dist/components/DatePicker/DatePickerHeader.cjs +1 -1
- package/dist/components/DatePicker/DatePickerHeader.js +1 -1
- package/dist/components/DescriptionList/DescriptionList.cjs +1 -1
- package/dist/components/DescriptionList/DescriptionList.js +1 -1
- package/dist/components/ExpandableCard/ExpandableCard.cjs +1 -1
- package/dist/components/ExpandableCard/ExpandableCard.js +1 -1
- package/dist/components/ExpandableCard/ExpandableCardGroup.cjs +1 -1
- package/dist/components/ExpandableCard/ExpandableCardGroup.js +1 -1
- package/dist/components/IconButton/IconButton.cjs +1 -1
- package/dist/components/IconButton/IconButton.js +1 -1
- package/dist/components/List/List.cjs +1 -1
- package/dist/components/List/List.js +1 -1
- package/dist/components/Modal/Modal.cjs +1 -1
- package/dist/components/Modal/Modal.cjs.map +1 -1
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +1 -1
- package/dist/components/Modal/Modal.props.d.ts +13 -1
- package/dist/components/Modal/Modal.props.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.cjs +1 -1
- package/dist/components/Pagination/Pagination.js +1 -1
- package/dist/components/PasswordInput/PasswordInput.cjs +1 -1
- package/dist/components/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/ProgressBar/ProgressBar.cjs +1 -1
- package/dist/components/ProgressBar/ProgressBar.js +1 -1
- package/dist/components/ProgressBar/ProgressBarCircular.cjs +1 -1
- package/dist/components/ProgressBar/ProgressBarCircular.js +1 -1
- package/dist/components/ProgressBar/ProgressBarLinear.cjs +1 -1
- package/dist/components/ProgressBar/ProgressBarLinear.js +1 -1
- package/dist/components/RadioTile/RadioTile.cjs +1 -1
- package/dist/components/RadioTile/RadioTile.js +1 -1
- package/dist/components/SearchInput/SearchInput.cjs +1 -1
- package/dist/components/SearchInput/SearchInput.js +1 -1
- package/dist/components/SectionHeader/SectionHeader.cjs +1 -1
- package/dist/components/SectionHeader/SectionHeader.js +1 -1
- package/dist/components/Skeleton/SkeletonBodyText.cjs +1 -1
- package/dist/components/Skeleton/SkeletonBodyText.js +1 -1
- package/dist/components/Table/TablePagination.cjs +1 -1
- package/dist/components/Table/TablePagination.js +1 -1
- package/dist/components/TextInput/TextInput.cjs +1 -1
- package/dist/components/TextInput/TextInput.js +1 -1
- package/dist/components/VerificationInput/VerificationInput.cjs +1 -1
- package/dist/components/VerificationInput/VerificationInput.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -3
- package/public/llms/components/accordion.md +9 -5
- package/public/llms/components/modal.md +18 -1
- package/public/llms/docs/getting-started.md +1 -1
- package/dist/chunk-IKYAMUVC.js +0 -4
- package/dist/chunk-IKYAMUVC.js.map +0 -1
- package/dist/chunk-NCC6UCQ3.js +0 -4
- package/dist/chunk-NCC6UCQ3.js.map +0 -1
- package/dist/chunk-PR7YY5TA.cjs +0 -4
- package/dist/chunk-PR7YY5TA.cjs.map +0 -1
- package/dist/chunk-T2WIDWP7.cjs +0 -4
- package/dist/chunk-T2WIDWP7.cjs.map +0 -1
- package/dist/chunk-UENHGDFX.js +0 -4
- package/dist/chunk-UENHGDFX.js.map +0 -1
- package/dist/chunk-ZDNAR6RW.cjs +0 -4
- package/dist/chunk-ZDNAR6RW.cjs.map +0 -1
- /package/dist/{chunk-A5H4MI3R.js.map → chunk-2POQFUPW.js.map} +0 -0
- /package/dist/{chunk-GI5KDYNY.js.map → chunk-3UMZQPTB.js.map} +0 -0
- /package/dist/{chunk-BQREA63R.js.map → chunk-5SZOTFTN.js.map} +0 -0
- /package/dist/{chunk-LH3XNBC5.js.map → chunk-64CRCD2F.js.map} +0 -0
- /package/dist/{chunk-C6CDS5PQ.js.map → chunk-6YP6GBJJ.js.map} +0 -0
- /package/dist/{chunk-WBQ4Y5K5.js.map → chunk-DGLSILZC.js.map} +0 -0
- /package/dist/{chunk-5W56X5HX.js.map → chunk-FCIQ3NDR.js.map} +0 -0
- /package/dist/{chunk-HL2XTVPE.js.map → chunk-G6JMRKPA.js.map} +0 -0
- /package/dist/{chunk-2AGUKOI4.js.map → chunk-GWRFSI2V.js.map} +0 -0
- /package/dist/{chunk-GVN7FPA3.js.map → chunk-HQWHHX5G.js.map} +0 -0
- /package/dist/{chunk-FYRU5TW5.js.map → chunk-LOZ7MNJB.js.map} +0 -0
- /package/dist/{chunk-E7F4VIX4.js.map → chunk-NHBBYSIP.js.map} +0 -0
- /package/dist/{chunk-66WTE4KP.js.map → chunk-NOEAGTZD.js.map} +0 -0
- /package/dist/{chunk-YXONR42Y.js.map → chunk-OMFC7WL5.js.map} +0 -0
- /package/dist/{chunk-Z4BV6MER.js.map → chunk-ORIRQN2S.js.map} +0 -0
- /package/dist/{chunk-4PIL2ZIL.js.map → chunk-OUZD3M2B.js.map} +0 -0
- /package/dist/{chunk-ZRURS7YW.js.map → chunk-PGNIIILR.js.map} +0 -0
- /package/dist/{chunk-VZKBRGSY.js.map → chunk-QCFBAWB7.js.map} +0 -0
- /package/dist/{chunk-LY7U64XG.js.map → chunk-R37FK3MT.js.map} +0 -0
- /package/dist/{chunk-LEE6W35K.js.map → chunk-RMYZXT4P.js.map} +0 -0
- /package/dist/{chunk-M4M5HXZW.js.map → chunk-RYDWH7IN.js.map} +0 -0
- /package/dist/{chunk-4O2TRA5H.js.map → chunk-S4SIDGQ2.js.map} +0 -0
- /package/dist/{chunk-6SDDML2Q.js.map → chunk-TKBCQH6F.js.map} +0 -0
- /package/dist/{chunk-M7IRN3DO.js.map → chunk-TT64AG3N.js.map} +0 -0
- /package/dist/{chunk-36WGBXBK.js.map → chunk-WTBHVREU.js.map} +0 -0
- /package/dist/{chunk-MOY2EIGY.js.map → chunk-XTVYC2LZ.js.map} +0 -0
- /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"]}
|
package/dist/chunk-ZDNAR6RW.cjs
DELETED
|
@@ -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"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|