@servicetitan/anvil2 2.0.4 → 2.2.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 (225) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/{Calendar-jO-0jbbt.js → Calendar-D0CczOpQ.js} +3 -835
  3. package/dist/Calendar-D0CczOpQ.js.map +1 -0
  4. package/dist/{Calendar-DxLrWESu.js → Calendar-oNlBgZKB.js} +2 -2
  5. package/dist/{Calendar-DxLrWESu.js.map → Calendar-oNlBgZKB.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-9VbydUcM.js → Checkbox-DIY-6agd.js} +12 -12
  8. package/dist/Checkbox-DIY-6agd.js.map +1 -0
  9. package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DuzAqrE7.js} +2 -2
  10. package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-CNObHLjp.js → Combobox-CSGn20KQ.js} +14 -7
  13. package/dist/Combobox-CSGn20KQ.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-CQpySyDq.js → DataTable-D30sE1Xt.js} +223 -19
  16. package/dist/DataTable-D30sE1Xt.js.map +1 -0
  17. package/dist/{DateFieldRange-BG86w0pX.js → DateFieldRange-DBOiqaML.js} +46 -36
  18. package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-Byu_jyye.js → DateFieldSingle-C4hU55MP.js} +38 -29
  21. package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-BXkUiHIR.js} +14 -13
  24. package/dist/DateFieldYearless-BXkUiHIR.js.map +1 -0
  25. package/dist/DateFieldYearless.js +1 -1
  26. package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-CGffFnVT.js} +14 -13
  27. package/dist/DateFieldYearlessRange-CGffFnVT.js.map +1 -0
  28. package/dist/DateFieldYearlessRange.js +1 -1
  29. package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-DJEDopC9.js} +9 -5
  30. package/dist/DaysOfTheWeek-DJEDopC9.js.map +1 -0
  31. package/dist/DaysOfTheWeek.js +1 -1
  32. package/dist/{Dialog-DZPaz84r.js → Dialog-BbsZMnCA.js} +4 -4
  33. package/dist/{Dialog-DZPaz84r.js.map → Dialog-BbsZMnCA.js.map} +1 -1
  34. package/dist/Dialog.js +1 -1
  35. package/dist/{Drawer-pMQOa2jH.js → Drawer-Dhq76ot3.js} +4 -4
  36. package/dist/{Drawer-pMQOa2jH.js.map → Drawer-Dhq76ot3.js.map} +1 -1
  37. package/dist/Drawer.js +1 -1
  38. package/dist/DrillDown.js +1 -1
  39. package/dist/{FieldDialog-Be54L3E-.js → FieldDialog-CAuhkCZY.js} +541 -142
  40. package/dist/FieldDialog-CAuhkCZY.js.map +1 -0
  41. package/dist/FieldDialog.css +58 -28
  42. package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
  43. package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
  44. package/dist/FieldLabel.js +1 -1
  45. package/dist/FieldMessage-DS0COrjp.js +132 -0
  46. package/dist/FieldMessage-DS0COrjp.js.map +1 -0
  47. package/dist/FieldMessage.css +18 -4
  48. package/dist/FieldMessage.js +2 -1
  49. package/dist/FieldMessage.js.map +1 -1
  50. package/dist/{Helper-CK-XjpR3.js → Helper-PNGm_U2X.js} +7 -4
  51. package/dist/Helper-PNGm_U2X.js.map +1 -0
  52. package/dist/{InputMask-DoqWRi3t.js → InputMask-Ds0W2fKy.js} +2 -2
  53. package/dist/{InputMask-DoqWRi3t.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
  54. package/dist/InputMask.js +1 -1
  55. package/dist/{ListView-CtRhYAls.js → ListView-MMmJDM--.js} +2 -2
  56. package/dist/{ListView-CtRhYAls.js.map → ListView-MMmJDM--.js.map} +1 -1
  57. package/dist/ListView.js +1 -1
  58. package/dist/MultiSelectField.js +1 -1
  59. package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bey99LzJ.js} +178 -58
  60. package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
  61. package/dist/NumberField-CDkEUfXW.js +237 -0
  62. package/dist/NumberField-CDkEUfXW.js.map +1 -0
  63. package/dist/NumberField.js +1 -1
  64. package/dist/{Page-vc7zs4tn.js → Page-BVxybI-j.js} +6 -6
  65. package/dist/{Page-vc7zs4tn.js.map → Page-BVxybI-j.js.map} +1 -1
  66. package/dist/Page.js +1 -1
  67. package/dist/{Popover-OOLK0hUz.js → Popover-4C5IVk8T.js} +7 -6
  68. package/dist/{Popover-OOLK0hUz.js.map → Popover-4C5IVk8T.js.map} +1 -1
  69. package/dist/Popover.css +15 -14
  70. package/dist/Popover.js +1 -1
  71. package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-BGwp-qnf.js} +16 -11
  72. package/dist/ProgressBar-BGwp-qnf.js.map +1 -0
  73. package/dist/ProgressBar.js +1 -1
  74. package/dist/{Radio-31wKzlZ4.js → Radio-BRcpSu-d.js} +12 -12
  75. package/dist/Radio-BRcpSu-d.js.map +1 -0
  76. package/dist/{Radio-BwWDJuLF.js → Radio-D7hNws2b.js} +2 -2
  77. package/dist/{Radio-BwWDJuLF.js.map → Radio-D7hNws2b.js.map} +1 -1
  78. package/dist/Radio.js +1 -1
  79. package/dist/{SelectCard-C91twG1S.js → SelectCard-Bag44PmE.js} +3 -3
  80. package/dist/{SelectCard-C91twG1S.js.map → SelectCard-Bag44PmE.js.map} +1 -1
  81. package/dist/SelectCard.js +1 -1
  82. package/dist/SelectField.js +1 -1
  83. package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-CigqXq3T.js} +67 -50
  84. package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
  85. package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DgsvUfyl.js} +2 -2
  86. package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
  87. package/dist/SelectTrigger.js +1 -1
  88. package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-OxfNqdIq.js} +12 -7
  89. package/dist/SelectTriggerBase-OxfNqdIq.js.map +1 -0
  90. package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
  91. package/dist/Stepper-D8lkCP8Y.js.map +1 -0
  92. package/dist/Stepper.js +1 -1
  93. package/dist/{Switch-DQICcdAv.js → Switch-D0zwZCg4.js} +2 -2
  94. package/dist/{Switch-DQICcdAv.js.map → Switch-D0zwZCg4.js.map} +1 -1
  95. package/dist/Switch.js +1 -1
  96. package/dist/Table.js +1 -1
  97. package/dist/{TextField-CDiiYSlT.js → TextField-BycenT6H.js} +13 -12
  98. package/dist/TextField-BycenT6H.js.map +1 -0
  99. package/dist/{TextField-CnYxS52Y.js → TextField-Dfzn2HeL.js} +2 -2
  100. package/dist/{TextField-CnYxS52Y.js.map → TextField-Dfzn2HeL.js.map} +1 -1
  101. package/dist/TextField.js +1 -1
  102. package/dist/{Textarea-BnHIDj2P.js → Textarea-BwbwJP6z.js} +13 -12
  103. package/dist/Textarea-BwbwJP6z.js.map +1 -0
  104. package/dist/Textarea.js +1 -1
  105. package/dist/{TimeField-ChqK40k_.js → TimeField-B0WSzSfJ.js} +4 -4
  106. package/dist/{TimeField-ChqK40k_.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
  107. package/dist/TimeField.js +1 -1
  108. package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
  109. package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
  110. package/dist/TimezoneMessage.css +7 -0
  111. package/dist/Toast.js +2 -2
  112. package/dist/{Toaster-BlycAc63.js → Toaster-9Q_yaKGu.js} +18 -18
  113. package/dist/Toaster-9Q_yaKGu.js.map +1 -0
  114. package/dist/{Toaster-DW_bi2L9.js → Toaster-DHo8dnWH.js} +2 -2
  115. package/dist/{Toaster-DW_bi2L9.js.map → Toaster-DHo8dnWH.js.map} +1 -1
  116. package/dist/{Toolbar-vBomnRKG.js → Toolbar-CVOenuCF.js} +70 -23
  117. package/dist/Toolbar-CVOenuCF.js.map +1 -0
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
  120. package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
  121. package/dist/Tooltip.css +9 -8
  122. package/dist/Tooltip.js +1 -1
  123. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-ztozRk-X.js} +3 -3
  124. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
  125. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
  126. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
  127. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
  128. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
  129. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
  130. package/dist/beta/components/MultiSelectField/types.d.ts +52 -8
  131. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
  132. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
  133. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
  134. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  135. package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
  136. package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
  137. package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
  138. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
  139. package/dist/beta/components/SelectField/types.d.ts +24 -6
  140. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
  141. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
  142. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  143. package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
  144. package/dist/beta/components/Table/types.d.ts +54 -4
  145. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
  146. package/dist/beta.js +7 -7
  147. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  148. package/dist/components/Checkbox/Checkbox.d.ts +2 -1
  149. package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
  150. package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
  151. package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
  152. package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
  153. package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
  154. package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
  155. package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
  156. package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
  157. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
  158. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
  159. package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
  160. package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
  161. package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
  162. package/dist/components/FieldMessage/index.d.ts +1 -0
  163. package/dist/components/FieldMessage/utils.d.ts +7 -0
  164. package/dist/components/NumberField/NumberField.d.ts +24 -2
  165. package/dist/components/Page/Page.d.ts +2 -2
  166. package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
  167. package/dist/components/Radio/Radio.d.ts +2 -1
  168. package/dist/components/Radio/RadioGroup.d.ts +16 -8
  169. package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
  170. package/dist/components/Stepper/Stepper.d.ts +6 -2
  171. package/dist/components/TextField/internal/TextField.d.ts +12 -1
  172. package/dist/components/Textarea/Textarea.d.ts +8 -5
  173. package/dist/index-DXeGMe23.js +836 -0
  174. package/dist/index-DXeGMe23.js.map +1 -0
  175. package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
  176. package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
  177. package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-K9kxJhLx.js} +88 -94
  178. package/dist/index.esm-K9kxJhLx.js.map +1 -0
  179. package/dist/index.js +31 -30
  180. package/dist/index.js.map +1 -1
  181. package/dist/internal/components/Helper/Helper.d.ts +12 -3
  182. package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
  183. package/dist/internal/components/StatusIcon/index.d.ts +1 -0
  184. package/dist/internal/functions/index.d.ts +1 -0
  185. package/dist/internal/functions/warnOnce.d.ts +5 -0
  186. package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
  187. package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-jbU4Cs5l.js} +2 -598
  188. package/dist/useDrilldown-jbU4Cs5l.js.map +1 -0
  189. package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-BRRbylek.js} +2 -2
  190. package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
  191. package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
  192. package/dist/useNumberField-eMyk7MB8.js.map +1 -0
  193. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  194. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  195. package/dist/utils-pudAMGnO.js +25 -0
  196. package/dist/utils-pudAMGnO.js.map +1 -0
  197. package/package.json +9 -8
  198. package/dist/Calendar-jO-0jbbt.js.map +0 -1
  199. package/dist/Checkbox-9VbydUcM.js.map +0 -1
  200. package/dist/Combobox-CNObHLjp.js.map +0 -1
  201. package/dist/DataTable-CQpySyDq.js.map +0 -1
  202. package/dist/DateFieldRange-BG86w0pX.js.map +0 -1
  203. package/dist/DateFieldSingle-Byu_jyye.js.map +0 -1
  204. package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
  205. package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
  206. package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
  207. package/dist/FieldDialog-Be54L3E-.js.map +0 -1
  208. package/dist/FieldMessage-tEr6rWXS.js +0 -54
  209. package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
  210. package/dist/Helper-CK-XjpR3.js.map +0 -1
  211. package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
  212. package/dist/NumberField-W1k8V5Qq.js.map +0 -1
  213. package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
  214. package/dist/Radio-31wKzlZ4.js.map +0 -1
  215. package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
  216. package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
  217. package/dist/Stepper-Jv9A3Ned.js.map +0 -1
  218. package/dist/TextField-CDiiYSlT.js.map +0 -1
  219. package/dist/Textarea-BnHIDj2P.js.map +0 -1
  220. package/dist/Toaster-BlycAc63.js.map +0 -1
  221. package/dist/Toolbar-vBomnRKG.js.map +0 -1
  222. package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
  223. package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
  224. package/dist/utils-BHKRoLps.js +0 -60
  225. package/dist/utils-BHKRoLps.js.map +0 -1
@@ -1,23 +1,10 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import * as React from 'react';
3
- import { useState, useEffect, useMemo, useRef, useCallback, forwardRef, useId } from 'react';
4
- import { c as cx } from './index-SvGbrGuT.js';
5
- import { S as Spinner } from './Spinner-CpEm3Lud.js';
6
- import { t as textFieldStyles } from './TextField.module-pD1felN8.js';
7
- import { B as Button } from './Button-l7pTJdPc.js';
8
- import { I as Icon } from './Icon-Bcil6aBo.js';
9
- import { F as FieldLabel } from './FieldLabel-DSrHbw9U.js';
10
- import { g as maskitoNumberOptionsGenerator, h as maskitoParseNumber, i as maskitoStringifyNumber, u as useMaskito } from './index.esm-BMOZFPwN.js';
1
+ import { useState, useEffect, useMemo, useRef, useCallback } from 'react';
2
+ import { d as maskitoNumberOptionsGenerator, e as maskitoParseNumber, f as maskitoStringifyNumber, u as useMaskito } from './index.esm-C2ZhC_8d.js';
11
3
  import { u as usePrevious } from './usePrevious-Bvq-5auG.js';
12
4
  import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
13
5
  import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
14
- import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-loxbyklF.js';
15
- import { u as useFocusWithin } from './useFocusWithin-hi77jsrB.js';
16
- import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
17
- import { useTrackingId } from './useTrackingId.js';
18
- import { H as Helper } from './Helper-CK-XjpR3.js';
19
6
 
20
- import './NumberField.css';function usePlatform() {
7
+ function usePlatform() {
21
8
  const [platform, setPlatform] = useState(detectPlatform());
22
9
  useEffect(() => {
23
10
  setPlatform(detectPlatform());
@@ -1571,222 +1558,5 @@ function convertValueProp(v, { maskitoParams }) {
1571
1558
  );
1572
1559
  }
1573
1560
 
1574
- const small = "_small_wkha4_24";
1575
- const large = "_large_wkha4_41";
1576
- const numberFieldStyles = {
1577
- "stepper-buttons": "_stepper-buttons_wkha4_2",
1578
- small: small,
1579
- large: large
1580
- };
1581
-
1582
- const SvgAdd = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z" }));
1583
-
1584
- const SvgRemove = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M18 13H6c-.55 0-1-.45-1-1s.45-1 1-1h12c.55 0 1 .45 1 1s-.45 1-1 1z" }));
1585
-
1586
- const NumberField = forwardRef(
1587
- (props, ref) => {
1588
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
1589
- const {
1590
- className,
1591
- error,
1592
- errorAriaLive: errorAriaLiveProp = "assertive",
1593
- defaultValue: defaultValueProp,
1594
- value: valueProp,
1595
- label,
1596
- moreInfo,
1597
- prefix,
1598
- suffix,
1599
- size,
1600
- required,
1601
- onChange: onChangeProp,
1602
- onFocus: onFocusProp,
1603
- onBlur: onBlurProp,
1604
- id: idProp,
1605
- description,
1606
- hint,
1607
- loading,
1608
- disabled,
1609
- readOnly,
1610
- labelProps,
1611
- style,
1612
- placeholder,
1613
- minValue,
1614
- maxValue,
1615
- maximumFractionDigits = 0,
1616
- minimumFractionDigits = 0,
1617
- step = 1,
1618
- hideControls = false,
1619
- ...rest
1620
- } = componentProps;
1621
- const numberFieldRef = useRef(null);
1622
- const [openInfo, setOpenInfo] = useState(false);
1623
- const [errorAriaLive, setErrorAriaLive] = useState("off");
1624
- const { props: wrapperProps } = useFocusWithin({
1625
- onFocus: (e) => {
1626
- setOpenInfo(true);
1627
- setErrorAriaLive(errorAriaLiveProp);
1628
- onFocusProp?.(e);
1629
- },
1630
- onBlur: (e) => {
1631
- setOpenInfo(false);
1632
- setErrorAriaLive("off");
1633
- onBlurProp?.(e);
1634
- }
1635
- });
1636
- const { inputProps, inputRef, incrementButtonProps, decrementButtonProps } = useNumberField({
1637
- minValue,
1638
- maxValue,
1639
- maximumFractionDigits,
1640
- minimumFractionDigits,
1641
- step,
1642
- value: valueProp,
1643
- defaultValue: defaultValueProp,
1644
- onChange: onChangeProp,
1645
- label
1646
- });
1647
- const combinedInputRef = useMergeRefs([numberFieldRef, inputRef, ref]);
1648
- const labelUid = useId();
1649
- const id = idProp ?? labelUid;
1650
- const prefixUid = useId();
1651
- const suffixUid = useId();
1652
- const helperUid = useId();
1653
- const errorMessage = typeof error !== "boolean" ? error : void 0;
1654
- const hasHelperText = hint || errorMessage || description;
1655
- const styleCombined = { ...style, ...layoutStyles };
1656
- const data = {
1657
- label: childrenToString(props.label),
1658
- prefix: childrenToString(props.prefix),
1659
- suffix: childrenToString(props.suffix),
1660
- description: childrenToString(props.description),
1661
- size: props.size,
1662
- minValue: props.minValue,
1663
- maxValue: props.maxValue,
1664
- step: props.step,
1665
- maximumFractionDigits: props.maximumFractionDigits,
1666
- minimumFractionDigits: props.minimumFractionDigits
1667
- };
1668
- const trackingId = useTrackingId({
1669
- name: "NumberField",
1670
- data,
1671
- hasOverride: !!props["data-tracking-id"]
1672
- });
1673
- return /* @__PURE__ */ jsxs(
1674
- "div",
1675
- {
1676
- className: cx(textFieldStyles["textfield"], className),
1677
- "data-anv": "number-field",
1678
- style: styleCombined,
1679
- ...wrapperProps,
1680
- children: [
1681
- label && /* @__PURE__ */ jsx(
1682
- FieldLabel,
1683
- {
1684
- moreInfo,
1685
- moreInfoOpen: openInfo,
1686
- required,
1687
- htmlFor: id,
1688
- ...labelProps,
1689
- children: label
1690
- }
1691
- ),
1692
- /* @__PURE__ */ jsxs(
1693
- "div",
1694
- {
1695
- className: cx(textFieldStyles["input-wrapper"], {
1696
- [textFieldStyles["small"]]: size === "small",
1697
- [textFieldStyles["large"]]: size === "large",
1698
- [numberFieldStyles["small"]]: size === "small",
1699
- [numberFieldStyles["large"]]: size === "large"
1700
- }),
1701
- role: "presentation",
1702
- onClick: () => numberFieldRef.current?.focus(),
1703
- children: [
1704
- prefix ? /* @__PURE__ */ jsx(
1705
- "div",
1706
- {
1707
- "aria-hidden": true,
1708
- className: textFieldStyles["prefix"],
1709
- id: `prefix${prefixUid}`,
1710
- children: prefix
1711
- }
1712
- ) : null,
1713
- /* @__PURE__ */ jsx(
1714
- "input",
1715
- {
1716
- id,
1717
- className: cx(textFieldStyles["input"], {
1718
- [textFieldStyles["error"]]: error
1719
- }),
1720
- "data-tracking-id": trackingId,
1721
- ...rest,
1722
- ...inputProps,
1723
- required,
1724
- placeholder,
1725
- readOnly,
1726
- disabled,
1727
- ref: combinedInputRef,
1728
- "aria-label": label ? void 0 : placeholder,
1729
- "aria-describedby": hasHelperText ? helperUid : void 0,
1730
- "aria-invalid": error ? !!error : void 0
1731
- }
1732
- ),
1733
- loading ? /* @__PURE__ */ jsx(
1734
- "div",
1735
- {
1736
- className: textFieldStyles["loading-spinner-wrapper"],
1737
- "data-testid": "spinner",
1738
- children: /* @__PURE__ */ jsx(Spinner, { size: "small" })
1739
- }
1740
- ) : null,
1741
- suffix ? /* @__PURE__ */ jsx(
1742
- "div",
1743
- {
1744
- className: textFieldStyles["suffix"],
1745
- "aria-hidden": true,
1746
- id: `suffix${suffixUid}`,
1747
- children: suffix
1748
- }
1749
- ) : null,
1750
- !hideControls && !disabled && !readOnly && /* @__PURE__ */ jsxs("div", { className: numberFieldStyles["stepper-buttons"], children: [
1751
- /* @__PURE__ */ jsx(
1752
- Button,
1753
- {
1754
- appearance: "secondary",
1755
- size: "small",
1756
- ...decrementButtonProps,
1757
- children: /* @__PURE__ */ jsx(Icon, { svg: SvgRemove })
1758
- }
1759
- ),
1760
- /* @__PURE__ */ jsx(
1761
- Button,
1762
- {
1763
- appearance: "secondary",
1764
- size: "small",
1765
- ...incrementButtonProps,
1766
- children: /* @__PURE__ */ jsx(Icon, { svg: SvgAdd })
1767
- }
1768
- )
1769
- ] })
1770
- ]
1771
- }
1772
- ),
1773
- hasHelperText ? /* @__PURE__ */ jsx(
1774
- Helper,
1775
- {
1776
- id: helperUid,
1777
- hint,
1778
- showCounter: false,
1779
- errorMessage,
1780
- errorAriaLive,
1781
- description
1782
- }
1783
- ) : null
1784
- ]
1785
- }
1786
- );
1787
- }
1788
- );
1789
- NumberField.displayName = "NumberField";
1790
-
1791
- export { NumberField as N };
1792
- //# sourceMappingURL=NumberField-W1k8V5Qq.js.map
1561
+ export { useNumberField as u };
1562
+ //# sourceMappingURL=useNumberField-eMyk7MB8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNumberField-eMyk7MB8.js","sources":["../src/internal/hooks/usePlatform/usePlatform.ts","../src/internal/hooks/useNumberField/internal/useNumberFieldInputMode.ts","../src/internal/hooks/useNumberField/internal/numberMaskUtils.ts","../src/internal/hooks/useNumberField/internal/createTrailingDecimalHandlers.ts","../src/internal/hooks/useNumberField/internal/createTrailingZerosHandlers.ts","../src/internal/hooks/useNumberField/internal/createNumberMaskOptions.ts","../src/internal/hooks/useNumberField/internal/useNumberFieldKeys.ts","../../../node_modules/.pnpm/big.js@7.0.1/node_modules/big.js/big.mjs","../src/internal/hooks/useNumberField/useNumberField.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport interface UsePlatformReturnValue {\n /** True if the user is on an iPhone */\n isIPhone: boolean;\n /** True if the user is on an iPad */\n isIPad: boolean;\n /** True if the user is on any iOS device (iPhone or iPad) */\n isIOS: boolean;\n /** True if the user is on a Mac computer */\n isMac: boolean;\n /** True if the user is on any Apple device (iPhone, iPad, or Mac) */\n isAppleDevice: boolean;\n /** True if the browser is WebKit-based (Safari, Chrome, etc.) */\n isWebKit: boolean;\n /** True if the browser is Chrome */\n isChrome: boolean;\n /** True if the browser is Firefox */\n isFirefox: boolean;\n /** True if the user is on an Android device */\n isAndroid: boolean;\n}\n\n/**\n * Custom hook for detecting the user's platform and browser.\n *\n * This hook provides platform and browser detection capabilities for implementing\n * platform-specific behavior in components. It detects:\n * - iOS devices (iPhone, iPad)\n * - macOS computers\n * - Android devices\n * - WebKit-based browsers (Safari, Chrome)\n * - Specific browsers (Chrome, Firefox)\n *\n * @internal This hook is not exported because it hasn't been rigorously tested.\n *\n * @returns Object containing boolean flags for different platforms and browsers\n *\n * @example\n * const {\n * isIPhone,\n * isIPad,\n * isIOS,\n * isMac,\n * isAppleDevice,\n * isWebKit,\n * isChrome,\n * isFirefox,\n * isAndroid\n * } = usePlatform();\n *\n * if (isIOS) {\n * // Handle iOS-specific logic\n * }\n */\nexport function usePlatform(): UsePlatformReturnValue {\n const [platform, setPlatform] =\n useState<UsePlatformReturnValue>(detectPlatform());\n\n useEffect(() => {\n setPlatform(detectPlatform());\n }, []);\n return platform;\n}\n\n/**\n * Detects the current platform and browser based on user agent and platform information.\n *\n * This function analyzes the navigator.userAgent and navigator.platform to determine\n * the user's device type and browser. It handles edge cases like:\n * - MSStream detection for Windows Phone\n * - iPad detection using maxTouchPoints\n * - WebKit vs Chrome differentiation\n *\n * @returns Object containing boolean flags for different platforms and browsers\n */\nexport function detectPlatform(): UsePlatformReturnValue {\n // Check if we're in a browser environment\n if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\n return {\n isIPhone: false,\n isIPad: false,\n isIOS: false,\n isMac: false,\n isAppleDevice: false,\n isWebKit: false,\n isChrome: false,\n isFirefox: false,\n isAndroid: false,\n };\n }\n\n const userAgent = navigator.userAgent;\n const platform = navigator.platform;\n\n // iOS Detection\n const isIPhone =\n /iPhone/.test(userAgent) &&\n !(window as Window & typeof globalThis & { MSStream: Blob }).MSStream;\n const isIPad =\n /iPad/.test(userAgent) ||\n (!!navigator.maxTouchPoints &&\n navigator.maxTouchPoints > 2 &&\n /MacIntel/.test(platform));\n const isIOS = isIPhone || isIPad;\n\n // Mac Detection\n const isMac = /Mac/.test(platform) && !isIOS;\n\n // Apple Device Detection\n const isAppleDevice = isIOS || isMac;\n\n // WebKit Detection\n const isWebKit = /WebKit/.test(userAgent) && !/Chrome/.test(userAgent);\n\n // Browser Detection\n const isChrome =\n /Chrome/.test(userAgent) &&\n !/Edge/.test(userAgent) &&\n !/Edg/.test(userAgent);\n const isFirefox = /Firefox/.test(userAgent);\n\n // Android Detection\n const isAndroid = /Android/.test(userAgent);\n\n return {\n isIPhone,\n isIPad,\n isIOS,\n isMac,\n isAppleDevice,\n isWebKit,\n isChrome,\n isFirefox,\n isAndroid,\n };\n}\n","import { useMemo } from \"react\";\nimport { usePlatform } from \"../../usePlatform\";\n\nexport type InputMode = \"decimal\" | \"numeric\" | \"text\";\n\n/**\n * Custom hook that determines the optimal inputMode attribute for number fields based on platform and requirements.\n *\n * The inputMode attribute tells the device what type of software keyboard to show.\n * There are inconsistencies in what each software keyboard includes across different platforms:\n * - iPhone lacks a minus sign in both numeric and decimal keyboards\n * - Android numeric keyboard has both decimal point and minus sign\n * - iPad has different keyboard behavior than iPhone\n *\n * @param hasDecimals - Whether the number field allows decimal values\n * @param hasNegative - Whether the number field allows negative values\n * @returns The optimal inputMode attribute to use on the number field\n *\n * @example\n * const inputMode = useNumberFieldInputMode({\n * hasDecimals: true,\n * hasNegative: false\n * });\n */\nexport const useNumberFieldInputMode = ({\n hasDecimals,\n hasNegative,\n}: {\n hasDecimals: boolean;\n hasNegative: boolean;\n}) => {\n const platform = usePlatform();\n\n const inputMode: InputMode = useMemo(() => {\n let value: InputMode = \"decimal\";\n\n if (platform.isIPhone) {\n // iPhone only. iPad has a different software keyboard.\n if (hasNegative) {\n // iPhone lacks a minus sign in both numeric and decimal. So we use text.\n value = \"text\";\n } else if (hasDecimals) {\n value = \"decimal\";\n }\n } else if (platform.isAndroid) {\n if (hasNegative) {\n // Android numeric has both a decimal point and a minus sign so it's safe to use in all cases.\n value = \"numeric\";\n } else if (hasDecimals) {\n // If we don't have negative numbers, we can use decimal (which does not have a minus sign).\n value = \"decimal\";\n }\n }\n\n return value;\n }, [hasDecimals, hasNegative, platform.isAndroid, platform.isIPhone]);\n\n return inputMode;\n};\n","/**\n * Utility predicates for number mask processing.\n */\n\n/** Returns true if the string contains one or more zeros and nothing else. */\nexport const isAllZeros = (str: string): boolean => /^0+$/.test(str);\n\n/** Returns true if the string is empty or contains only zeros. */\nexport const isEmptyOrAllZeros = (str: string): boolean =>\n str === \"\" || /^0*$/.test(str);\n\n/** Returns true if the string is a single non-zero digit (1-9). */\nexport const isNonZeroDigit = (str: string): boolean => /^[1-9]$/.test(str);\n","import type { MaskitoPostprocessor, MaskitoPreprocessor } from \"@maskito/core\";\n\nimport { isAllZeros } from \"./numberMaskUtils\";\n\nexport interface TrailingDecimalHandlers {\n preprocessor: MaskitoPreprocessor;\n postprocessor: MaskitoPostprocessor;\n}\n\n/**\n * Creates processors to preserve trailing decimals during input.\n *\n * When `minimumFractionDigits` is 0, Maskito rejects trailing decimals (\"123.\").\n * This factory returns processors that temporarily append \"0\" to pass validation,\n * then trim it for display.\n */\nexport function createTrailingDecimalHandlers(): TrailingDecimalHandlers {\n /**\n * Appends \"0\" to trailing decimals so Maskito accepts them.\n * The postprocessor then trims this \"0\" for display.\n */\n const preprocessor: MaskitoPreprocessor = (\n { elementState, data },\n actionType,\n ) => {\n const { value, selection } = elementState;\n const [selStart, selEnd] = selection;\n\n // Typing \".\" that would result in trailing decimal\n if (data === \".\" && actionType === \"insert\") {\n const afterCursor = value.slice(selStart);\n if (!afterCursor || !/^\\d/.test(afterCursor)) {\n return { elementState, data: \".0\" };\n }\n }\n\n // Deletion that would result in trailing decimal\n if (actionType === \"deleteBackward\" || actionType === \"deleteForward\") {\n let simulatedValue: string;\n let newCursorPos: number;\n let charBeingDeleted: string;\n\n if (actionType === \"deleteBackward\") {\n if (selStart === selEnd && selStart > 0) {\n charBeingDeleted = value[selStart - 1];\n simulatedValue = value.slice(0, selStart - 1) + value.slice(selStart);\n newCursorPos = selStart - 1;\n } else {\n charBeingDeleted = value.slice(selStart, selEnd);\n simulatedValue = value.slice(0, selStart) + value.slice(selEnd);\n newCursorPos = selStart;\n }\n } else {\n if (selStart === selEnd && selStart < value.length) {\n charBeingDeleted = value[selStart];\n simulatedValue = value.slice(0, selStart) + value.slice(selStart + 1);\n } else {\n charBeingDeleted = value.slice(selStart, selEnd);\n simulatedValue = value.slice(0, selStart) + value.slice(selEnd);\n }\n newCursorPos = selStart;\n }\n\n // Append \"0\" unless user is explicitly deleting trailing zeros\n if (simulatedValue.endsWith(\".\")) {\n const decimalIndex = value.indexOf(\".\");\n const afterDecimal =\n decimalIndex !== -1 ? value.slice(decimalIndex + 1) : \"\";\n const isDeletingTrailingZeros =\n isAllZeros(afterDecimal) && isAllZeros(charBeingDeleted);\n\n if (!isDeletingTrailingZeros) {\n return {\n elementState: {\n value: simulatedValue + \"0\",\n selection: [newCursorPos, newCursorPos] as const,\n },\n data: \"\",\n };\n }\n }\n }\n\n return { elementState, data };\n };\n\n /**\n * Trims \".0\" back to \".\" when the preprocessor added \"0\" to pass the mask.\n * Only applies when the initial value didn't already end with \".0\".\n */\n const postprocessor: MaskitoPostprocessor = (\n { value, selection },\n initialElementState,\n ) => {\n const initialValue = initialElementState.value;\n\n if (value.endsWith(\".0\")) {\n const initialDecimalIndex = initialValue.indexOf(\".\");\n const hasDigitsAfterDecimal =\n initialDecimalIndex !== -1 &&\n initialValue.slice(initialDecimalIndex + 1).length > 0;\n\n if (!initialValue.includes(\".\") || hasDigitsAfterDecimal) {\n return {\n value: value.slice(0, -1),\n selection: [selection[0], selection[1]],\n };\n }\n }\n\n return { value, selection };\n };\n\n return {\n preprocessor,\n postprocessor,\n };\n}\n","import type {\n MaskitoPlugin,\n MaskitoPostprocessor,\n MaskitoPreprocessor,\n} from \"@maskito/core\";\nimport type { MaskitoNumberParams } from \"@maskito/kit\";\n\nimport {\n isAllZeros,\n isEmptyOrAllZeros,\n isNonZeroDigit,\n} from \"./numberMaskUtils\";\n\n/**\n * State for tracking trailing zeros across Maskito's multi-pass validation.\n *\n * This state coordinates between the preprocessor (which detects trailing zero\n * scenarios) and postprocessor (which restores stripped zeros) to preserve\n * user-typed trailing zeros until they leave the field.\n */\ninterface TrailingZerosState {\n /**\n * The target value to restore if Maskito strips trailing zeros.\n */\n expectedValue: string | null;\n /**\n * Whether to preserve trailing zeros until the input loses focus.\n */\n preserveUntilBlur: boolean;\n}\n\nexport interface TrailingZerosHandlers {\n preprocessor: MaskitoPreprocessor;\n postprocessor: MaskitoPostprocessor;\n blurPlugin: MaskitoPlugin;\n}\n\n/**\n * Creates processors to preserve trailing zeros during decimal input.\n *\n * When `minimumFractionDigits` is 0, Maskito's multi-pass validation strips\n * trailing zeros (e.g., \"123.0\" → \"123.\"). This factory returns coordinated\n * processors that detect and restore trailing zeros, using closure state to\n * support multiple NumberField instances.\n */\nexport function createTrailingZerosHandlers(\n params: Pick<\n MaskitoNumberParams,\n \"minimumFractionDigits\" | \"maximumFractionDigits\"\n >,\n): TrailingZerosHandlers {\n const maximumFractionDigits = params.maximumFractionDigits ?? 0;\n\n const state: TrailingZerosState = {\n expectedValue: null,\n preserveUntilBlur: false,\n };\n\n /** Detects trailing zero scenarios during user input. */\n const preprocessor: MaskitoPreprocessor = (\n { elementState, data },\n actionType,\n ) => {\n const { value, selection } = elementState;\n const [selStart, selEnd] = selection;\n const decimalIndex = value.indexOf(\".\");\n\n // Typing \"0\" after decimal with only zeros or nothing after it\n if (actionType === \"insert\" && data === \"0\" && decimalIndex !== -1) {\n const afterDecimal = value.slice(decimalIndex + 1);\n\n if (isEmptyOrAllZeros(afterDecimal)) {\n const zerosNeeded = afterDecimal.length + 1;\n if (zerosNeeded <= maximumFractionDigits) {\n state.expectedValue =\n value.slice(0, decimalIndex + 1) + \"0\".repeat(zerosNeeded);\n state.preserveUntilBlur = true;\n }\n }\n }\n\n // Deletion that results in trailing zeros\n if (\n (actionType === \"deleteBackward\" || actionType === \"deleteForward\") &&\n decimalIndex !== -1\n ) {\n let simulatedValue: string;\n\n if (selStart !== selEnd) {\n simulatedValue = value.slice(0, selStart) + value.slice(selEnd);\n } else if (actionType === \"deleteBackward\" && selStart > 0) {\n simulatedValue = value.slice(0, selStart - 1) + value.slice(selStart);\n } else if (actionType === \"deleteForward\" && selStart < value.length) {\n simulatedValue = value.slice(0, selStart) + value.slice(selStart + 1);\n } else {\n return { elementState, data };\n }\n\n const simDecimalIndex = simulatedValue.indexOf(\".\");\n if (simDecimalIndex !== -1) {\n const simAfterDecimal = simulatedValue.slice(simDecimalIndex + 1);\n const currentAfterDecimal = value.slice(decimalIndex + 1);\n\n const deletionCreatesTrailingZeros = isAllZeros(simAfterDecimal);\n const deletionRemovesAllTrailingZeros =\n simAfterDecimal === \"\" && isAllZeros(currentAfterDecimal);\n\n if (deletionCreatesTrailingZeros) {\n // Deleting a non-zero digit leaves trailing zeros (e.g., \"123.50\" → \"123.0\")\n // Preserve them so user can continue editing\n state.expectedValue = simulatedValue;\n state.preserveUntilBlur = true;\n } else if (deletionRemovesAllTrailingZeros) {\n // Deleting the last trailing zero (e.g., \"456.0\" → \"456.\")\n // Clear preservation since user is intentionally removing zeros\n state.expectedValue = null;\n state.preserveUntilBlur = false;\n }\n }\n }\n\n // Clear state on non-zero digit input\n if (actionType === \"insert\" && isNonZeroDigit(data)) {\n state.expectedValue = null;\n state.preserveUntilBlur = false;\n }\n\n return { elementState, data };\n };\n\n /** Restores trailing zeros if Maskito stripped them. */\n const postprocessor: MaskitoPostprocessor = ({ value, selection }) => {\n if (state.expectedValue !== null && state.preserveUntilBlur) {\n const targetValue = state.expectedValue;\n\n if (\n targetValue.startsWith(value) ||\n value.startsWith(targetValue.replace(/0+$/, \"\"))\n ) {\n return {\n value: targetValue,\n selection: [targetValue.length, targetValue.length],\n };\n }\n }\n\n return { value, selection };\n };\n\n /** Clears preservation state on blur. */\n const blurPlugin: MaskitoPlugin = (element) => {\n const onBlur = () => {\n state.expectedValue = null;\n state.preserveUntilBlur = false;\n };\n\n element.addEventListener(\"blur\", onBlur);\n\n return () => {\n element.removeEventListener(\"blur\", onBlur);\n };\n };\n\n return {\n preprocessor,\n postprocessor,\n blurPlugin,\n };\n}\n","import type { MaskitoOptions } from \"@maskito/core\";\nimport type { MaskitoNumberParams } from \"@maskito/kit\";\nimport { maskitoNumberOptionsGenerator } from \"@maskito/kit\";\n\nimport { createTrailingDecimalHandlers } from \"./createTrailingDecimalHandlers\";\nimport { createTrailingZerosHandlers } from \"./createTrailingZerosHandlers\";\n\n/**\n * Creates Maskito options for number input with trailing decimal and zero support.\n *\n * When `minimumFractionDigits` is 0, Maskito rejects trailing decimals (\"123.\")\n * and strips trailing zeros (\"123.0\" → \"123.\"). This extends the base options\n * with processors to allow natural decimal input during typing.\n */\nexport function createNumberMaskOptions(\n params: MaskitoNumberParams,\n): MaskitoOptions {\n const baseOptions = maskitoNumberOptionsGenerator(params);\n const minimumFractionDigits = params.minimumFractionDigits ?? 0;\n\n // When minimumFractionDigits > 0, Maskito handles everything correctly\n if (minimumFractionDigits > 0) {\n return baseOptions;\n }\n\n // Only add custom processors when minimumFractionDigits is 0\n const trailingDecimalHandlers = createTrailingDecimalHandlers();\n const trailingZerosHandlers = createTrailingZerosHandlers(params);\n\n return {\n ...baseOptions,\n preprocessors: [\n trailingDecimalHandlers.preprocessor,\n trailingZerosHandlers.preprocessor,\n ...(baseOptions.preprocessors ?? []),\n ],\n postprocessors: [\n ...(baseOptions.postprocessors ?? []),\n trailingDecimalHandlers.postprocessor,\n trailingZerosHandlers.postprocessor,\n ],\n plugins: [...(baseOptions.plugins ?? []), trailingZerosHandlers.blurPlugin],\n };\n}\n","import { useRef, useEffect } from \"react\";\n\n/**\n * Configuration for the useNumberFieldKeys hook\n */\nexport type UseNumberFieldKeysConfig = {\n /** Function to increment the value by a specified amount */\n increment: (amount: number) => void;\n /** Function to decrement the value by a specified amount */\n decrement: (amount: number) => void;\n /** Function to set the value to the minimum allowed value */\n setToMin: () => void;\n /** Function to set the value to the maximum allowed value */\n setToMax: () => void;\n /** The step value for increment/decrement operations */\n step: number;\n /** Multiplier for large step operations (PageUp/PageDown) */\n largeStepMultiplier: number;\n};\n\n/**\n * Custom hook that handles keyboard interactions for number fields.\n *\n * This hook provides keyboard navigation support for number input fields:\n * - Arrow Up/Down: Increment/decrement by step value\n * - Page Up/Down: Increment/decrement by step * largeStepMultiplier\n * - Home: Set to minimum value\n * - End: Set to maximum value\n *\n * @param config - Configuration object containing increment/decrement functions and step values\n * @returns Object containing the input ref to attach to the input element\n *\n * @example\n * const { inputRef } = useNumberFieldKeys({\n * increment: (amount) => setValue(prev => prev + amount),\n * decrement: (amount) => setValue(prev => prev - amount),\n * setToMin: () => setValue(minValue),\n * setToMax: () => setValue(maxValue),\n * step: 1,\n * largeStepMultiplier: 10\n * });\n */\nfunction useNumberFieldKeys(config: UseNumberFieldKeysConfig) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Handle keyboard interactions (Up/Down arrows, PageUp/PageDown, Home/End)\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowUp\":\n event.preventDefault();\n config.increment(config.step);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n config.decrement(config.step);\n break;\n case \"PageUp\":\n event.preventDefault();\n config.increment(config.step * config.largeStepMultiplier);\n break;\n case \"PageDown\":\n event.preventDefault();\n config.decrement(config.step * config.largeStepMultiplier);\n break;\n case \"Home\":\n event.preventDefault();\n config.setToMin();\n break;\n case \"End\":\n event.preventDefault();\n config.setToMax();\n break;\n default:\n break;\n }\n };\n\n const inputElement = inputRef.current;\n if (inputElement) {\n inputElement.addEventListener(\"keydown\", handleKeyDown);\n }\n return () => {\n if (inputElement) {\n inputElement.removeEventListener(\"keydown\", handleKeyDown);\n }\n };\n }, [config]);\n\n return {\n inputRef,\n };\n}\n\nexport default useNumberFieldKeys;\n","/*\r\n * big.js v7.0.1\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2025 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) {\r\n return n === UNDEFINED && arguments.length === 0 ? _Big_() : new Big(n);\r\n }\r\n\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(+stringify(x, true, true));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\nif (typeof Symbol !== \"undefined\") {\r\n P[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON;\r\n}\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitive number.\r\n */\r\nP.toNumber = function () {\r\n var n = +stringify(this, true, true);\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMergeRefs } from \"../../../hooks\";\nimport { useOptionallyControlledState } from \"../useOptionallyControlledState\";\nimport { useNumberFieldInputMode } from \"./internal/useNumberFieldInputMode\";\nimport { useMaskito } from \"@maskito/react\";\nimport {\n MaskitoNumberParams,\n maskitoParseNumber,\n maskitoStringifyNumber,\n} from \"@maskito/kit\";\nimport { createNumberMaskOptions } from \"./internal/createNumberMaskOptions\";\nimport useNumberFieldKeys from \"./internal/useNumberFieldKeys\";\nimport Big from \"big.js\";\nimport { usePrevious } from \"../usePrevious\";\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100_000_000_000_000;\n\n/**\n * Configuration options for the useNumberField hook\n */\nexport type UseNumberFieldConfig = {\n /**\n * The label for the number field.\n * Important for accessibility and button labeling.\n */\n label?: string;\n /**\n * The minimum value for the number field.\n * @default 0\n */\n minValue?: number;\n /**\n * The maximum value for the number field.\n * @default 100000000000000\n */\n maxValue?: number;\n /**\n * The step value for the number field.\n * @default 1\n */\n step?: number;\n /**\n * The controlled value for the number field.\n */\n value?: number | null;\n /**\n * The default (uncontrolled) value for the number field.\n */\n defaultValue?: number | null;\n /**\n * The maximum number of decimal places for the number field.\n * @default 0\n */\n maximumFractionDigits?: number;\n /**\n * The minimum number of decimal places for the number field.\n * @default 0\n */\n minimumFractionDigits?: number;\n /**\n * A callback that is called when the value changes.\n * @param value The new numeric value or null if invalid/empty\n */\n onChange?: (value: number | null) => void;\n};\n\n/**\n * Return value from the useNumberField hook\n */\nexport type UseNumberFieldReturnValue = {\n /** The current numeric value of the number field. */\n value: number | null;\n /** A ref that should be attached to the input element. */\n inputRef: React.RefObject<HTMLInputElement>;\n /** The props to pass to the input element. */\n inputProps: Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n | \"value\"\n | \"onChange\"\n | \"inputMode\"\n | \"aria-valuenow\"\n | \"aria-valuemin\"\n | \"aria-valuemax\"\n | \"min\"\n | \"max\"\n | \"step\"\n | \"role\"\n | \"pattern\"\n | \"type\"\n | \"autoComplete\"\n >;\n /** The props to pass to the increment button. */\n incrementButtonProps: React.ButtonHTMLAttributes<HTMLButtonElement>;\n /** The props to pass to the decrement button. */\n decrementButtonProps: React.ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\n/**\n * Custom hook that provides the functionality for number input fields with increment and decrement controls.\n *\n * This hook handles:\n * - Precise decimal arithmetic using Big.js\n * - Number formatting with thousand separators and decimal precision\n * - Input validation and value clamping\n * - Keyboard navigation (arrows, PageUp/Down, Home/End)\n * - Platform-specific input modes for mobile devices\n * - Accessibility attributes and button states\n * - Controlled and uncontrolled value management\n *\n * @param config - Configuration options for the number field\n * @returns Object containing the current value, input ref, and props for input and buttons\n *\n * @example\n * const { value, inputRef, inputProps, incrementButtonProps, decrementButtonProps } = useNumberField({\n * label: \"Quantity\",\n * minValue: 0,\n * maxValue: 100,\n * step: 1,\n * onChange: (value) => console.log(value)\n * });\n */\nexport const useNumberField = (config: UseNumberFieldConfig) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const {\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n label = \"\",\n } = config;\n\n const step = config.step ? Math.abs(config.step) : 1;\n\n const minimumFractionDigits = Math.abs(config.minimumFractionDigits ?? 0);\n const maximumFractionDigits = Math.max(\n Math.abs(config.maximumFractionDigits ?? 0),\n minimumFractionDigits,\n );\n\n const previousMinimumFractionDigits = usePrevious(\n minimumFractionDigits,\n minimumFractionDigits,\n );\n\n const params: MaskitoNumberParams = useMemo(\n () => ({\n decimalSeparator: \".\",\n thousandSeparator: \",\",\n minusSign: \"-\",\n minimumFractionDigits,\n maximumFractionDigits,\n }),\n [minimumFractionDigits, maximumFractionDigits],\n );\n const options = useMemo(() => createNumberMaskOptions(params), [params]);\n\n const [isBeginningNegativeEntry, setIsBeginningNegativeEntry] =\n useState(false);\n\n // Tracks values like \"123.\" or \"123.0\" that would lose precision on controlled round-trip\n const [isIncompleteDecimalEntry, setIsIncompleteDecimalEntry] =\n useState(false);\n const [incompleteDecimalValue, setIncompleteDecimalValue] = useState<\n string | null\n >(null);\n\n const [inputValue, setInputValue] = useOptionallyControlledState<\n string | null\n >({\n controlledValue: convertValueProp(config.value, { maskitoParams: params }),\n defaultValue:\n convertValueProp(config.defaultValue, { maskitoParams: params }) ?? null,\n onChange: (value) => {\n if (value === \"-\") {\n setIsBeginningNegativeEntry(true);\n return;\n }\n setIsBeginningNegativeEntry(false);\n if (value === null) {\n setIsIncompleteDecimalEntry(false);\n setIncompleteDecimalValue(null);\n return config.onChange?.(null);\n }\n const parsedValue = maskitoParseNumber(value, params);\n const nanSafeValue = isNaN(parsedValue) ? null : parsedValue;\n\n // Detect incomplete decimal entries that would lose precision on round-trip\n if (\n minimumFractionDigits === 0 &&\n value.includes(\".\") &&\n nanSafeValue !== null\n ) {\n const formatted = maskitoStringifyNumber(nanSafeValue, params);\n if (formatted !== value) {\n setIsIncompleteDecimalEntry(true);\n setIncompleteDecimalValue(value);\n } else {\n setIsIncompleteDecimalEntry(false);\n setIncompleteDecimalValue(null);\n }\n } else {\n setIsIncompleteDecimalEntry(false);\n setIncompleteDecimalValue(null);\n }\n\n config.onChange?.(nanSafeValue);\n },\n });\n const previousInputValue = usePrevious(inputValue, inputValue);\n\n useEffect(() => {\n if (isBeginningNegativeEntry && previousInputValue !== inputValue) {\n setIsBeginningNegativeEntry(false);\n }\n }, [isBeginningNegativeEntry, inputValue, previousInputValue]);\n\n // Clear incomplete decimal state when controlled value changes externally\n useEffect(() => {\n if (isIncompleteDecimalEntry && incompleteDecimalValue) {\n const incompleteNumeric = maskitoParseNumber(\n incompleteDecimalValue,\n params,\n );\n const currentNumeric = inputValue\n ? maskitoParseNumber(inputValue, params)\n : null;\n\n const incompleteNanSafe = isNaN(incompleteNumeric)\n ? null\n : incompleteNumeric;\n if (incompleteNanSafe !== currentNumeric) {\n setIsIncompleteDecimalEntry(false);\n setIncompleteDecimalValue(null);\n }\n }\n }, [isIncompleteDecimalEntry, incompleteDecimalValue, inputValue, params]);\n\n // Reformat when minimumFractionDigits changes (e.g., 10 → 10.00)\n useEffect(() => {\n if (previousMinimumFractionDigits === minimumFractionDigits) return;\n setInputValue((previous) => {\n if (previous === null || previous === undefined) return null;\n const parsedValue = maskitoParseNumber(previous, params);\n const nanSafeValue = isNaN(parsedValue) ? 0 : parsedValue;\n return maskitoStringifyNumber(nanSafeValue, params);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [minimumFractionDigits, previousMinimumFractionDigits]);\n\n const maskedInputRef = useMaskito({\n options,\n });\n\n const computedValue: Big | null = useMemo(() => {\n if (inputValue === null) return null;\n const parsedValue = maskitoParseNumber(inputValue, params);\n if (isNaN(parsedValue)) {\n return null;\n }\n const bigValue = new Big(parsedValue);\n return bigValue;\n }, [inputValue, params]);\n\n const clamp = useCallback(\n (value: number) => {\n return Math.min(Math.max(value, minValue), maxValue);\n },\n [minValue, maxValue],\n );\n\n const increment = useCallback(\n (amount: number) => {\n setInputValue((prevValue) => {\n const parsedValue = maskitoParseNumber(prevValue ?? \"0\", params);\n const nanSafeValue = isNaN(parsedValue) ? 0 : parsedValue;\n const incrementedValue = new Big(nanSafeValue).plus(amount);\n const clampedValue = clamp(incrementedValue.toNumber());\n return maskitoStringifyNumber(clampedValue, params);\n });\n },\n [clamp, params, setInputValue],\n );\n\n const decrement = useCallback(\n (amount: number) => {\n setInputValue((prevValue) => {\n const parsedValue = maskitoParseNumber(prevValue ?? \"0\", params);\n const nanSafeValue = isNaN(parsedValue) ? 0 : parsedValue;\n const decrementedValue = new Big(nanSafeValue).minus(amount);\n const clampedValue = clamp(decrementedValue.toNumber());\n return maskitoStringifyNumber(clampedValue, params);\n });\n },\n [clamp, params, setInputValue],\n );\n\n const setToMin = useCallback(() => {\n setInputValue(maskitoStringifyNumber(minValue, params));\n }, [minValue, params, setInputValue]);\n\n const setToMax = useCallback(() => {\n setInputValue(maskitoStringifyNumber(maxValue, params));\n }, [maxValue, params, setInputValue]);\n\n const { inputRef: keysInputRef } = useNumberFieldKeys({\n increment,\n decrement,\n setToMin,\n setToMax,\n step,\n largeStepMultiplier: 10,\n });\n\n const combinedInputRef = useMergeRefs([\n inputRef,\n maskedInputRef,\n keysInputRef,\n ]);\n\n const hasDecimals = minimumFractionDigits > 0 || maximumFractionDigits > 0;\n const hasNegative = minValue < 0;\n\n const inputMode = useNumberFieldInputMode({\n hasDecimals,\n hasNegative,\n });\n\n const pattern = useMemo(() => {\n if (hasNegative) {\n return `-?[0-9]*(.[0-9]{0,${maximumFractionDigits}})?`;\n }\n if (hasDecimals) {\n return `[0-9]*(.[0-9]{0,${maximumFractionDigits}})?`;\n }\n return \"[0-9]*\";\n }, [maximumFractionDigits, hasDecimals, hasNegative]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (newValue === \"\") {\n setInputValue(null);\n } else {\n setInputValue(newValue);\n }\n };\n\n return {\n value: computedValue?.toNumber() ?? null,\n inputRef: combinedInputRef,\n inputProps: {\n value: isBeginningNegativeEntry\n ? \"-\"\n : isIncompleteDecimalEntry\n ? (incompleteDecimalValue ?? \"\")\n : (inputValue ?? \"\"),\n onChange: handleInputChange,\n inputMode,\n \"aria-valuenow\": computedValue?.toNumber() ?? undefined,\n \"aria-valuemin\": minValue,\n \"aria-valuemax\": maxValue,\n min: minValue,\n max: maxValue,\n step,\n role: \"spinbutton\",\n pattern,\n type: \"text\",\n autoComplete: \"off\",\n },\n incrementButtonProps: {\n onClick: () => increment(step),\n disabled: computedValue?.gte(maxValue),\n tabIndex: -1,\n \"aria-label\": `Increment ${label ?? \"\"}`,\n },\n decrementButtonProps: {\n onClick: () => decrement(step),\n disabled: computedValue?.lte(minValue),\n tabIndex: -1,\n \"aria-label\": `Decrement ${label ?? \"\"}`,\n },\n };\n};\n\n/**\n * Converts a numeric value to a formatted string using Maskito parameters.\n *\n * @param v - The numeric value to convert\n * @param maskitoParams - Maskito configuration parameters for formatting\n * @returns Formatted string representation of the value, or null/undefined if input is null/undefined\n */\nfunction convertValueProp(\n v: number | null | undefined,\n { maskitoParams }: { maskitoParams: MaskitoNumberParams },\n): string | null | undefined {\n if (v === undefined || v === null) {\n return v;\n }\n let bigValue: Big;\n try {\n bigValue = new Big(v);\n } catch (_) {\n bigValue = new Big(0);\n }\n return maskitoStringifyNumber(\n bigValue.round(maskitoParams.maximumFractionDigits).toNumber(),\n maskitoParams,\n );\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[7]}
@@ -0,0 +1,71 @@
1
+ import { useRef, useEffect } from 'react';
2
+
3
+ const WINDOW_PROPERTY_LAYER_STACK = "__ANVIL_LAYER_MANAGER__";
4
+ const getGlobalLayers = () => {
5
+ if (typeof window === "undefined") {
6
+ return [];
7
+ }
8
+ if (!window[WINDOW_PROPERTY_LAYER_STACK]) {
9
+ window[WINDOW_PROPERTY_LAYER_STACK] = [];
10
+ }
11
+ return window[WINDOW_PROPERTY_LAYER_STACK];
12
+ };
13
+ const registerLayer = (id) => {
14
+ const layers = getGlobalLayers();
15
+ if (!layers.includes(id)) {
16
+ layers.push(id);
17
+ }
18
+ };
19
+ const unregisterLayer = (id) => {
20
+ const layers = getGlobalLayers();
21
+ const index = layers.indexOf(id);
22
+ if (index !== -1) {
23
+ layers.splice(index, 1);
24
+ }
25
+ };
26
+ const isTopLayer = (id) => {
27
+ const layers = getGlobalLayers();
28
+ return layers[layers.length - 1] === id;
29
+ };
30
+
31
+ const useOnClickOutside = ({
32
+ onClickOutsideBegin,
33
+ targets,
34
+ onClickOutside,
35
+ disable,
36
+ layerId
37
+ }) => {
38
+ const pressStartedOutsideRef = useRef(false);
39
+ useEffect(() => {
40
+ if (disable || typeof document === "undefined") return;
41
+ const isOutsideTargets = (e) => {
42
+ const path = e.composedPath();
43
+ return !targets.some((el) => el && path.includes(el));
44
+ };
45
+ const handlePointerDown = (e) => {
46
+ const isOutside = isOutsideTargets(e);
47
+ pressStartedOutsideRef.current = isOutside;
48
+ if (isOutside && (!layerId || isTopLayer(layerId))) {
49
+ onClickOutsideBegin?.(e);
50
+ }
51
+ };
52
+ const handlePointerUp = (e) => {
53
+ const startedOutside = pressStartedOutsideRef.current;
54
+ pressStartedOutsideRef.current = false;
55
+ if (startedOutside && isOutsideTargets(e)) {
56
+ if (!layerId || isTopLayer(layerId)) {
57
+ onClickOutside?.(e);
58
+ }
59
+ }
60
+ };
61
+ document.addEventListener("pointerdown", handlePointerDown);
62
+ document.addEventListener("pointerup", handlePointerUp);
63
+ return () => {
64
+ document.removeEventListener("pointerdown", handlePointerDown);
65
+ document.removeEventListener("pointerup", handlePointerUp);
66
+ };
67
+ }, [onClickOutside, onClickOutsideBegin, targets, disable, layerId]);
68
+ };
69
+
70
+ export { useOnClickOutside as a, registerLayer as r, unregisterLayer as u };
71
+ //# sourceMappingURL=useOnClickOutside-Zw5vzxSq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnClickOutside-Zw5vzxSq.js","sources":["../src/internal/utils/layerManager.ts","../src/internal/hooks/useOnClickOutside/useOnClickOutside.ts"],"sourcesContent":["/**\n * Global layer manager for tracking overlay component stacking order.\n * Uses window-level state to support cross-bundle communication (e.g., MFEs).\n *\n * When multiple Dialog/Drawer components are open, only the topmost layer\n * should respond to outside click events. This manager tracks the z-order\n * to enable that behavior.\n */\n\nconst WINDOW_PROPERTY_LAYER_STACK = \"__ANVIL_LAYER_MANAGER__\" as const;\n\n// Declare global window property (matches DndSort pattern)\ndeclare global {\n interface Window {\n [WINDOW_PROPERTY_LAYER_STACK]?: string[];\n }\n}\n\n/**\n * Get or initialize the global layer stack on the window object.\n * This ensures all instances of the design system share the same layer stack,\n * even across different bundles (e.g., base app + MFEs).\n *\n * @returns The global layers array\n */\nconst getGlobalLayers = (): string[] => {\n // SSR safety check (matches usePrefersColorScheme pattern)\n if (typeof window === \"undefined\") {\n return [];\n }\n\n if (!window[WINDOW_PROPERTY_LAYER_STACK]) {\n window[WINDOW_PROPERTY_LAYER_STACK] = [];\n }\n\n return window[WINDOW_PROPERTY_LAYER_STACK];\n};\n\n/**\n * Register a new layer in the stack.\n * If the layer is already registered, this is a no-op.\n *\n * @param id - Unique identifier for the layer\n */\nexport const registerLayer = (id: string): void => {\n const layers = getGlobalLayers();\n if (!layers.includes(id)) {\n layers.push(id);\n }\n};\n\n/**\n * Unregister a layer from the stack.\n * If the layer is not found, this is a no-op.\n *\n * @param id - Unique identifier for the layer\n */\nexport const unregisterLayer = (id: string): void => {\n const layers = getGlobalLayers();\n const index = layers.indexOf(id);\n if (index !== -1) {\n layers.splice(index, 1);\n }\n};\n\n/**\n * Check if a layer is the topmost layer in the stack.\n *\n * @param id - Unique identifier for the layer\n * @returns True if the layer is on top, false otherwise\n */\nexport const isTopLayer = (id: string): boolean => {\n const layers = getGlobalLayers();\n return layers[layers.length - 1] === id;\n};\n\n/**\n * Get all registered layers in order (bottom to top).\n * Returns a readonly copy for debugging purposes.\n *\n * @returns Readonly array of layer IDs\n */\nexport const getLayers = (): readonly string[] => {\n const layers = getGlobalLayers();\n return [...layers];\n};\n","import { useEffect, useRef } from \"react\";\nimport { isTopLayer } from \"../../utils\";\n\n/**\n * Props for the useOnClickOutside hook\n */\ntype UseOnClickOutsideProps = {\n /**\n * Callback fired when a click begins outside target elements (on pointerdown)\n */\n onClickOutsideBegin?: (e: PointerEvent) => void;\n /**\n * Callback fired when a click completes outside target elements (on pointerup),\n * but only if the click also began outside the targets\n */\n onClickOutside?: (e: PointerEvent) => void;\n /**\n * Array of target elements to monitor\n */\n targets: (HTMLElement | undefined)[];\n /**\n * Whether to disable the useOnClickOutside hook\n */\n disable?: boolean;\n /**\n * Optional layer ID for stacking management. When provided, callbacks will only\n * fire if this layer is the topmost layer in the stack.\n */\n layerId?: string;\n};\n\n/**\n * Custom hook for detecting clicks outside of specified target elements.\n *\n * Features:\n * - Detects clicks outside of multiple target elements\n * - Supports both pointerdown and pointerup event handling (works for mouse and touch)\n * - Provides separate callbacks for click begin and complete actions\n * - Handles SSR environments gracefully\n * - Automatically cleans up event listeners\n * - Uses composedPath for accurate event target detection\n * - Supports optional callbacks for flexible usage\n *\n * @param props - Configuration object containing targets and optional callbacks\n * @returns void\n */\nexport const useOnClickOutside = ({\n onClickOutsideBegin,\n targets,\n onClickOutside,\n disable,\n layerId,\n}: UseOnClickOutsideProps) => {\n const pressStartedOutsideRef = useRef(false);\n\n useEffect(() => {\n if (disable || typeof document === \"undefined\") return;\n\n const isOutsideTargets = (e: PointerEvent) => {\n const path = e.composedPath();\n return !targets.some((el) => el && path.includes(el));\n };\n\n const handlePointerDown = (e: PointerEvent) => {\n const isOutside = isOutsideTargets(e);\n pressStartedOutsideRef.current = isOutside;\n\n if (isOutside && (!layerId || isTopLayer(layerId))) {\n onClickOutsideBegin?.(e);\n }\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n const startedOutside = pressStartedOutsideRef.current;\n pressStartedOutsideRef.current = false; // Reset for next interaction\n\n if (startedOutside && isOutsideTargets(e)) {\n if (!layerId || isTopLayer(layerId)) {\n onClickOutside?.(e);\n }\n }\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [onClickOutside, onClickOutsideBegin, targets, disable, layerId]);\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { isValidElement } from 'react';
2
+
3
+ const warned = /* @__PURE__ */ new Set();
4
+ function warnOnce(message) {
5
+ if (process.env.NODE_ENV === "production") {
6
+ return;
7
+ }
8
+ if (!warned.has(message)) {
9
+ warned.add(message);
10
+ console.warn(message);
11
+ }
12
+ }
13
+
14
+ function warnDeprecatedErrorUsage(componentName, error) {
15
+ if (error === void 0 || typeof error === "boolean") return;
16
+ if (typeof error === "string" || Array.isArray(error)) return;
17
+ if (isValidElement(error)) {
18
+ warnOnce(
19
+ `[Anvil2 ${componentName}] Passing a ReactElement to the \`error\` prop is deprecated. Use a string or string[] instead: \`error="message"\` or \`error={["msg1", "msg2"]}\`. See https://beta.anvil.servicetitan.com/docs/web/components/field-message/code`
20
+ );
21
+ }
22
+ }
23
+
24
+ export { warnOnce as a, warnDeprecatedErrorUsage as w };
25
+ //# sourceMappingURL=utils-pudAMGnO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-pudAMGnO.js","sources":["../src/internal/functions/warnOnce.ts","../src/components/FieldMessage/utils.ts"],"sourcesContent":["const warned = new Set<string>();\n\n/**\n * Logs a console.warn in development only, and only once per unique message.\n * Tree-shaken in production builds via the `process.env.NODE_ENV` guard.\n */\nexport function warnOnce(message: string): void {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n if (!warned.has(message)) {\n warned.add(message);\n console.warn(message);\n }\n}\n","import { isValidElement, type ReactElement } from \"react\";\nimport { warnOnce } from \"../../internal/functions\";\n\n/**\n * Logs a dev-only deprecation warning when `error` is passed as a `ReactElement`.\n * String values are the preferred type and are NOT deprecated.\n * Should be called in consumer components that accept the union `error` prop.\n */\nexport function warnDeprecatedErrorUsage(\n componentName: string,\n error: ReactElement | string | boolean | string[] | undefined,\n): void {\n if (error === undefined || typeof error === \"boolean\") return;\n if (typeof error === \"string\" || Array.isArray(error)) return;\n\n // At this point, error is a ReactElement\n if (isValidElement(error)) {\n warnOnce(\n `[Anvil2 ${componentName}] Passing a ReactElement to the \\`error\\` prop is deprecated. ` +\n `Use a string or string[] instead: \\`error=\"message\"\\` or \\`error={[\"msg1\", \"msg2\"]}\\`. ` +\n `See https://beta.anvil.servicetitan.com/docs/web/components/field-message/code`,\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAMxB,SAAS,SAAS,OAAA,EAAuB;AAC9C,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG;AACxB,IAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAClB,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,EACtB;AACF;;ACPO,SAAS,wBAAA,CACd,eACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,OAAO,KAAA,KAAU,SAAA,EAAW;AACvD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAGvD,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,QAAA;AAAA,MACE,WAAW,aAAa,CAAA,mOAAA;AAAA,KAG1B;AAAA,EACF;AACF;;;;"}