@dnb/eufemia 10.70.1 → 10.71.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 (199) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/cjs/components/date-picker/DatePickerContext.d.ts +0 -1
  3. package/cjs/components/date-picker/DatePickerContext.js.map +1 -1
  4. package/cjs/components/date-picker/DatePickerInput.js +7 -59
  5. package/cjs/components/date-picker/DatePickerInput.js.map +1 -1
  6. package/cjs/components/date-picker/DatePickerProvider.js +0 -2
  7. package/cjs/components/date-picker/DatePickerProvider.js.map +1 -1
  8. package/cjs/components/date-picker/hooks/useDates.d.ts +0 -2
  9. package/cjs/components/date-picker/hooks/useDates.js +5 -5
  10. package/cjs/components/date-picker/hooks/useDates.js.map +1 -1
  11. package/cjs/components/input-masked/InputMaskedHooks.js +11 -7
  12. package/cjs/components/input-masked/InputMaskedHooks.js.map +1 -1
  13. package/cjs/components/input-masked/InputMaskedUtils.d.ts +1 -1
  14. package/cjs/components/input-masked/InputMaskedUtils.js +2 -1
  15. package/cjs/components/input-masked/InputMaskedUtils.js.map +1 -1
  16. package/cjs/components/modal/ModalDocs.d.ts +2 -0
  17. package/cjs/components/modal/ModalDocs.js +11 -1
  18. package/cjs/components/modal/ModalDocs.js.map +1 -1
  19. package/cjs/components/upload/Upload.js +6 -3
  20. package/cjs/components/upload/Upload.js.map +1 -1
  21. package/cjs/components/upload/UploadDocs.d.ts +1 -0
  22. package/cjs/components/upload/UploadDocs.js +43 -1
  23. package/cjs/components/upload/UploadDocs.js.map +1 -1
  24. package/cjs/components/upload/UploadFileListCell.js +32 -12
  25. package/cjs/components/upload/UploadFileListCell.js.map +1 -1
  26. package/cjs/components/upload/types.d.ts +7 -0
  27. package/cjs/components/upload/types.js.map +1 -1
  28. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
  29. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  30. package/cjs/extensions/forms/Field/Number/Number.js +3 -6
  31. package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
  32. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
  33. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +33 -25
  34. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  35. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
  36. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +8 -3
  37. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
  38. package/cjs/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
  39. package/cjs/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  40. package/cjs/extensions/forms/Field/Upload/Upload.js +3 -1
  41. package/cjs/extensions/forms/Field/Upload/Upload.js.map +1 -1
  42. package/cjs/extensions/forms/FieldBlock/FieldBlock.js +11 -4
  43. package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  44. package/cjs/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
  45. package/cjs/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
  46. package/cjs/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
  47. package/cjs/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
  48. package/cjs/extensions/forms/hooks/useFieldProps.js +50 -17
  49. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  50. package/cjs/extensions/forms/types.d.ts +8 -5
  51. package/cjs/extensions/forms/types.js.map +1 -1
  52. package/cjs/extensions/forms/utils/FormError.d.ts +20 -16
  53. package/cjs/extensions/forms/utils/FormError.js.map +1 -1
  54. package/cjs/shared/Eufemia.d.ts +1 -1
  55. package/cjs/shared/Eufemia.js +2 -2
  56. package/cjs/shared/Eufemia.js.map +1 -1
  57. package/cjs/style/core/scopes.scss +1 -1
  58. package/cjs/style/dnb-ui-basis.css +1 -1
  59. package/cjs/style/dnb-ui-basis.min.css +1 -1
  60. package/cjs/style/dnb-ui-body.css +1 -1
  61. package/cjs/style/dnb-ui-body.min.css +1 -1
  62. package/cjs/style/dnb-ui-core.css +1 -1
  63. package/cjs/style/dnb-ui-core.min.css +1 -1
  64. package/components/date-picker/DatePickerContext.d.ts +0 -1
  65. package/components/date-picker/DatePickerContext.js.map +1 -1
  66. package/components/date-picker/DatePickerInput.js +7 -59
  67. package/components/date-picker/DatePickerInput.js.map +1 -1
  68. package/components/date-picker/DatePickerProvider.js +0 -2
  69. package/components/date-picker/DatePickerProvider.js.map +1 -1
  70. package/components/date-picker/hooks/useDates.d.ts +0 -2
  71. package/components/date-picker/hooks/useDates.js +3 -5
  72. package/components/date-picker/hooks/useDates.js.map +1 -1
  73. package/components/input-masked/InputMaskedHooks.js +11 -7
  74. package/components/input-masked/InputMaskedHooks.js.map +1 -1
  75. package/components/input-masked/InputMaskedUtils.d.ts +1 -1
  76. package/components/input-masked/InputMaskedUtils.js +2 -1
  77. package/components/input-masked/InputMaskedUtils.js.map +1 -1
  78. package/components/modal/ModalDocs.d.ts +2 -0
  79. package/components/modal/ModalDocs.js +10 -0
  80. package/components/modal/ModalDocs.js.map +1 -1
  81. package/components/upload/Upload.js +6 -3
  82. package/components/upload/Upload.js.map +1 -1
  83. package/components/upload/UploadDocs.d.ts +1 -0
  84. package/components/upload/UploadDocs.js +42 -0
  85. package/components/upload/UploadDocs.js.map +1 -1
  86. package/components/upload/UploadFileListCell.js +32 -12
  87. package/components/upload/UploadFileListCell.js.map +1 -1
  88. package/components/upload/types.d.ts +7 -0
  89. package/components/upload/types.js.map +1 -1
  90. package/es/components/date-picker/DatePickerContext.d.ts +0 -1
  91. package/es/components/date-picker/DatePickerContext.js.map +1 -1
  92. package/es/components/date-picker/DatePickerInput.js +2 -53
  93. package/es/components/date-picker/DatePickerInput.js.map +1 -1
  94. package/es/components/date-picker/DatePickerProvider.js +0 -2
  95. package/es/components/date-picker/DatePickerProvider.js.map +1 -1
  96. package/es/components/date-picker/hooks/useDates.d.ts +0 -2
  97. package/es/components/date-picker/hooks/useDates.js +3 -5
  98. package/es/components/date-picker/hooks/useDates.js.map +1 -1
  99. package/es/components/input-masked/InputMaskedHooks.js +11 -7
  100. package/es/components/input-masked/InputMaskedHooks.js.map +1 -1
  101. package/es/components/input-masked/InputMaskedUtils.d.ts +1 -1
  102. package/es/components/input-masked/InputMaskedUtils.js +2 -1
  103. package/es/components/input-masked/InputMaskedUtils.js.map +1 -1
  104. package/es/components/modal/ModalDocs.d.ts +2 -0
  105. package/es/components/modal/ModalDocs.js +6 -0
  106. package/es/components/modal/ModalDocs.js.map +1 -1
  107. package/es/components/upload/Upload.js +6 -3
  108. package/es/components/upload/Upload.js.map +1 -1
  109. package/es/components/upload/UploadDocs.d.ts +1 -0
  110. package/es/components/upload/UploadDocs.js +42 -0
  111. package/es/components/upload/UploadDocs.js.map +1 -1
  112. package/es/components/upload/UploadFileListCell.js +32 -12
  113. package/es/components/upload/UploadFileListCell.js.map +1 -1
  114. package/es/components/upload/types.d.ts +7 -0
  115. package/es/components/upload/types.js.map +1 -1
  116. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
  117. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  118. package/es/extensions/forms/Field/Number/Number.js +3 -6
  119. package/es/extensions/forms/Field/Number/Number.js.map +1 -1
  120. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
  121. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +24 -16
  122. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  123. package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
  124. package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +7 -2
  125. package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
  126. package/es/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
  127. package/es/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  128. package/es/extensions/forms/Field/Upload/Upload.js +3 -1
  129. package/es/extensions/forms/Field/Upload/Upload.js.map +1 -1
  130. package/es/extensions/forms/FieldBlock/FieldBlock.js +11 -4
  131. package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  132. package/es/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
  133. package/es/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
  134. package/es/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
  135. package/es/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
  136. package/es/extensions/forms/hooks/useFieldProps.js +51 -18
  137. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  138. package/es/extensions/forms/types.d.ts +8 -5
  139. package/es/extensions/forms/types.js.map +1 -1
  140. package/es/extensions/forms/utils/FormError.d.ts +20 -16
  141. package/es/extensions/forms/utils/FormError.js +1 -0
  142. package/es/extensions/forms/utils/FormError.js.map +1 -1
  143. package/es/shared/Eufemia.d.ts +1 -1
  144. package/es/shared/Eufemia.js +2 -2
  145. package/es/shared/Eufemia.js.map +1 -1
  146. package/es/style/core/scopes.scss +1 -1
  147. package/es/style/dnb-ui-basis.css +1 -1
  148. package/es/style/dnb-ui-basis.min.css +1 -1
  149. package/es/style/dnb-ui-body.css +1 -1
  150. package/es/style/dnb-ui-body.min.css +1 -1
  151. package/es/style/dnb-ui-core.css +1 -1
  152. package/es/style/dnb-ui-core.min.css +1 -1
  153. package/esm/dnb-ui-basis.min.mjs +1 -1
  154. package/esm/dnb-ui-components.min.mjs +1 -1
  155. package/esm/dnb-ui-elements.min.mjs +1 -1
  156. package/esm/dnb-ui-extensions.min.mjs +1 -1
  157. package/esm/dnb-ui-lib.min.mjs +1 -1
  158. package/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
  159. package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  160. package/extensions/forms/Field/Number/Number.js +3 -6
  161. package/extensions/forms/Field/Number/Number.js.map +1 -1
  162. package/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
  163. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +33 -25
  164. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  165. package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
  166. package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +7 -2
  167. package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
  168. package/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
  169. package/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  170. package/extensions/forms/Field/Upload/Upload.js +3 -1
  171. package/extensions/forms/Field/Upload/Upload.js.map +1 -1
  172. package/extensions/forms/FieldBlock/FieldBlock.js +11 -4
  173. package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  174. package/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
  175. package/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
  176. package/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
  177. package/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
  178. package/extensions/forms/hooks/useFieldProps.js +51 -18
  179. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  180. package/extensions/forms/types.d.ts +8 -5
  181. package/extensions/forms/types.js.map +1 -1
  182. package/extensions/forms/utils/FormError.d.ts +20 -16
  183. package/extensions/forms/utils/FormError.js.map +1 -1
  184. package/package.json +1 -1
  185. package/shared/Eufemia.d.ts +1 -1
  186. package/shared/Eufemia.js +2 -2
  187. package/shared/Eufemia.js.map +1 -1
  188. package/style/core/scopes.scss +1 -1
  189. package/style/dnb-ui-basis.css +1 -1
  190. package/style/dnb-ui-basis.min.css +1 -1
  191. package/style/dnb-ui-body.css +1 -1
  192. package/style/dnb-ui-body.min.css +1 -1
  193. package/style/dnb-ui-core.css +1 -1
  194. package/style/dnb-ui-core.min.css +1 -1
  195. package/umd/dnb-ui-basis.min.js +1 -1
  196. package/umd/dnb-ui-components.min.js +1 -1
  197. package/umd/dnb-ui-elements.min.js +1 -1
  198. package/umd/dnb-ui-extensions.min.js +1 -1
  199. package/umd/dnb-ui-lib.min.js +1 -1
@@ -42,7 +42,6 @@ function DatePickerProvider(externalProps) {
42
42
  const {
43
43
  dates,
44
44
  updateDates,
45
- hasHadValidDate,
46
45
  previousDateProps
47
46
  } = useDates({
48
47
  date,
@@ -135,7 +134,6 @@ function DatePickerProvider(externalProps) {
135
134
  props
136
135
  }, dates), {}, {
137
136
  previousDateProps,
138
- hasHadValidDate,
139
137
  views,
140
138
  setViews,
141
139
  setHasClickedCalendarDay
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerProvider.js","names":["React","useCallback","useContext","isValid","format","differenceInCalendarDays","SharedContext","correctV1Format","isDisabled","DatePickerContext","useViews","useDates","useLastEventCallCache","defaultProps","returnFormat","DatePickerProvider","externalProps","props","_objectSpread","date","startDate","endDate","startMonth","endMonth","minDate","maxDate","dateFormat","range","correctInvalidDate","attributes","returnFormatProp","children","onChange","setReturnObject","hidePicker","sharedContext","dates","updateDates","hasHadValidDate","previousDateProps","isRange","shouldCorrectDate","views","setViews","setHasClickedCalendarDay","lastEventCallCache","setLastEventCallCache","getReturnObject","_ref","event","rest","_objectWithoutProperties","_excluded","partialStartDate","partialEndDate","invalidStartDate","invalidEndDate","startDateIsValid","Boolean","endDateIsValid","hasMinOrMaxDates","returnObject","days_between","start_date","end_date","is_valid_start_date","is_valid_end_date","partialDate","invalidDate","is_valid","callOnChangeHandler","createElement","Provider","value","translation"],"sources":["../../../../src/components/date-picker/DatePickerProvider.tsx"],"sourcesContent":["/**\n * Web DatePicker Provider\n *\n */\n\nimport React, { useCallback, useContext } from 'react'\nimport type {\n DatePickerEventAttributes,\n DatePickerAllProps,\n DatePickerProps,\n} from './DatePicker'\n\nimport isValid from 'date-fns/isValid'\nimport format from 'date-fns/format'\nimport differenceInCalendarDays from 'date-fns/differenceInCalendarDays'\n\nimport SharedContext from '../../shared/Context'\nimport { correctV1Format, isDisabled } from './DatePickerCalc'\nimport DatePickerContext, {\n DatePickerContextValues,\n} from './DatePickerContext'\nimport useViews, { CalendarView } from './hooks/useViews'\nimport useDates, { DatePickerDates } from './hooks/useDates'\nimport useLastEventCallCache, {\n LastEventCallCache,\n} from './hooks/useLastEventCallCache'\nimport { InvalidDates } from './DatePickerInput'\nimport { PartialDates } from './hooks/usePartialDates'\n\ntype DatePickerProviderProps = DatePickerAllProps & {\n setReturnObject: (\n func: DatePickerContextValues['getReturnObject']\n ) => DatePickerContextValues['getReturnObject']\n hidePicker?: DatePickerContextValues['hidePicker']\n attributes?: DatePickerEventAttributes\n children: React.ReactNode\n}\n\nexport type DatePickerChangeEvent<E> = DatePickerDates &\n InvalidDates & {\n nr?: number\n hidePicker?: boolean\n event?: E\n }\n\nexport type GetReturnObjectParams<E> = DatePickerDates &\n PartialDates &\n InvalidDates & {\n event?: E\n }\n\n// TODO: convert properties on event handler return objects to camelCase, constitutes a breaking change\nexport type ReturnObject<E> = InvalidDates &\n PartialDates & {\n event?: E\n attributes?: Record<string, unknown>\n days_between?: number\n date?: string | null\n start_date?: string | null\n end_date?: string | null\n is_valid?: boolean\n is_valid_start_date?: boolean\n is_valid_end_date?: boolean\n }\n\nexport type DatePickerProviderState = DatePickerDates &\n Array<CalendarView> &\n LastEventCallCache\n\nconst defaultProps: Partial<DatePickerProps> = {\n returnFormat: 'yyyy-MM-dd', // used in date-fns v1: YYYY-MM-DD\n}\n\nfunction DatePickerProvider(externalProps: DatePickerProviderProps) {\n const props = { ...defaultProps, ...externalProps }\n\n const {\n date,\n startDate,\n endDate,\n startMonth,\n endMonth,\n minDate,\n maxDate,\n dateFormat,\n range,\n correctInvalidDate,\n attributes,\n returnFormat: returnFormatProp,\n children,\n onChange,\n setReturnObject,\n hidePicker,\n } = props\n\n const sharedContext = useContext(SharedContext)\n\n const { dates, updateDates, hasHadValidDate, previousDateProps } =\n useDates(\n {\n date,\n startDate,\n endDate,\n startMonth,\n endMonth,\n minDate,\n maxDate,\n },\n {\n dateFormat: dateFormat,\n isRange: range,\n shouldCorrectDate: correctInvalidDate,\n }\n )\n\n const { views, setViews, setHasClickedCalendarDay } = useViews({\n startMonth: dates.startMonth,\n endMonth: dates.endMonth,\n isRange: range,\n })\n\n const [lastEventCallCache, setLastEventCallCache] =\n useLastEventCallCache({\n startDate: dates.startDate,\n endDate: dates.endDate,\n })\n\n const getReturnObject = useCallback(\n <E,>({ event = null, ...rest }: GetReturnObjectParams<E> = {}) => {\n const {\n startDate,\n endDate,\n partialStartDate,\n partialEndDate,\n invalidStartDate,\n invalidEndDate,\n } = {\n ...views,\n ...dates,\n ...rest,\n }\n\n const returnFormat = correctV1Format(returnFormatProp)\n const startDateIsValid = Boolean(startDate && isValid(startDate))\n const endDateIsValid = Boolean(endDate && isValid(endDate))\n const hasMinOrMaxDates = minDate || maxDate\n\n const returnObject: ReturnObject<E> = {\n event,\n attributes: attributes || {},\n }\n\n // Handle range props\n if (range) {\n return {\n ...returnObject,\n days_between:\n startDateIsValid && endDateIsValid\n ? differenceInCalendarDays(endDate, startDate)\n : null,\n start_date: startDateIsValid\n ? format(startDate, returnFormat)\n : null,\n end_date: endDateIsValid ? format(endDate, returnFormat) : null,\n is_valid_start_date:\n hasMinOrMaxDates &&\n startDateIsValid &&\n isDisabled(startDate, dates.minDate, dates.maxDate)\n ? false\n : startDateIsValid,\n is_valid_end_date:\n hasMinOrMaxDates &&\n endDateIsValid &&\n isDisabled(endDate, dates.minDate, dates.maxDate)\n ? false\n : endDateIsValid,\n partialStartDate,\n partialEndDate,\n invalidStartDate,\n invalidEndDate,\n }\n }\n\n return {\n ...returnObject,\n date: startDateIsValid ? format(startDate, returnFormat) : null,\n partialDate: partialStartDate,\n // Can be removed in v11, in favor to partialDate,\n // to keep the naming logic the same as with date and invalidDate when not in range mode\n partialStartDate,\n invalidDate: invalidStartDate,\n is_valid:\n hasMinOrMaxDates &&\n startDateIsValid &&\n isDisabled(startDate, dates.minDate, dates.maxDate)\n ? false\n : startDateIsValid,\n }\n },\n [dates, views, attributes, maxDate, minDate, range, returnFormatProp]\n )\n\n const callOnChangeHandler = useCallback(\n <E,>(event: E & DatePickerDates) => {\n /**\n * Prevent on_change to be fired twice if date not has actually changed\n */\n if (\n lastEventCallCache &&\n lastEventCallCache.startDate === event.startDate &&\n lastEventCallCache.endDate === event.endDate\n ) {\n return // stop here\n }\n\n onChange?.(getReturnObject({ ...dates, ...event }))\n\n setLastEventCallCache({\n startDate: event.startDate,\n endDate: event.endDate,\n })\n },\n [\n getReturnObject,\n dates,\n onChange,\n lastEventCallCache,\n setLastEventCallCache,\n ]\n )\n\n // Is this at any point something other than a function?\n if (typeof setReturnObject === 'function') {\n setReturnObject(getReturnObject)\n }\n\n return (\n <DatePickerContext.Provider\n value={{\n translation: sharedContext.translation,\n updateDates,\n getReturnObject,\n callOnChangeHandler,\n hidePicker: hidePicker,\n props,\n ...dates,\n previousDateProps,\n hasHadValidDate,\n views,\n setViews,\n setHasClickedCalendarDay,\n }}\n >\n {children}\n </DatePickerContext.Provider>\n )\n}\n\nexport default DatePickerProvider\n"],"mappings":";;;;;;;AAKA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,UAAU,QAAQ,OAAO;AAOtD,OAAOC,OAAO,MAAM,kBAAkB;AACtC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,OAAOC,wBAAwB,MAAM,mCAAmC;AAExE,OAAOC,aAAa,MAAM,sBAAsB;AAChD,SAASC,eAAe,EAAEC,UAAU,QAAQ,kBAAkB;AAC9D,OAAOC,iBAAiB,MAEjB,qBAAqB;AAC5B,OAAOC,QAAQ,MAAwB,kBAAkB;AACzD,OAAOC,QAAQ,MAA2B,kBAAkB;AAC5D,OAAOC,qBAAqB,MAErB,+BAA+B;AA4CtC,MAAMC,YAAsC,GAAG;EAC7CC,YAAY,EAAE;AAChB,CAAC;AAED,SAASC,kBAAkBA,CAACC,aAAsC,EAAE;EAClE,MAAMC,KAAK,GAAAC,aAAA,CAAAA,aAAA,KAAQL,YAAY,GAAKG,aAAa,CAAE;EAEnD,MAAM;IACJG,IAAI;IACJC,SAAS;IACTC,OAAO;IACPC,UAAU;IACVC,QAAQ;IACRC,OAAO;IACPC,OAAO;IACPC,UAAU;IACVC,KAAK;IACLC,kBAAkB;IAClBC,UAAU;IACVf,YAAY,EAAEgB,gBAAgB;IAC9BC,QAAQ;IACRC,QAAQ;IACRC,eAAe;IACfC;EACF,CAAC,GAAGjB,KAAK;EAET,MAAMkB,aAAa,GAAGjC,UAAU,CAACI,aAAa,CAAC;EAE/C,MAAM;IAAE8B,KAAK;IAAEC,WAAW;IAAEC,eAAe;IAAEC;EAAkB,CAAC,GAC9D5B,QAAQ,CACN;IACEQ,IAAI;IACJC,SAAS;IACTC,OAAO;IACPC,UAAU;IACVC,QAAQ;IACRC,OAAO;IACPC;EACF,CAAC,EACD;IACEC,UAAU,EAAEA,UAAU;IACtBc,OAAO,EAAEb,KAAK;IACdc,iBAAiB,EAAEb;EACrB,CACF,CAAC;EAEH,MAAM;IAAEc,KAAK;IAAEC,QAAQ;IAAEC;EAAyB,CAAC,GAAGlC,QAAQ,CAAC;IAC7DY,UAAU,EAAEc,KAAK,CAACd,UAAU;IAC5BC,QAAQ,EAAEa,KAAK,CAACb,QAAQ;IACxBiB,OAAO,EAAEb;EACX,CAAC,CAAC;EAEF,MAAM,CAACkB,kBAAkB,EAAEC,qBAAqB,CAAC,GAC/ClC,qBAAqB,CAAC;IACpBQ,SAAS,EAAEgB,KAAK,CAAChB,SAAS;IAC1BC,OAAO,EAAEe,KAAK,CAACf;EACjB,CAAC,CAAC;EAEJ,MAAM0B,eAAe,GAAG9C,WAAW,CACjC,CAAK+C,IAAA,GAAsD,CAAC,CAAC,KAAK;IAAA,IAA7D;QAAEC,KAAK,GAAG;MAAwC,CAAC,GAAAD,IAAA;MAAhCE,IAAI,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;IAC1B,MAAM;MACJhC,SAAS;MACTC,OAAO;MACPgC,gBAAgB;MAChBC,cAAc;MACdC,gBAAgB;MAChBC;IACF,CAAC,GAAAtC,aAAA,CAAAA,aAAA,CAAAA,aAAA,KACIwB,KAAK,GACLN,KAAK,GACLc,IAAI,CACR;IAED,MAAMpC,YAAY,GAAGP,eAAe,CAACuB,gBAAgB,CAAC;IACtD,MAAM2B,gBAAgB,GAAGC,OAAO,CAACtC,SAAS,IAAIjB,OAAO,CAACiB,SAAS,CAAC,CAAC;IACjE,MAAMuC,cAAc,GAAGD,OAAO,CAACrC,OAAO,IAAIlB,OAAO,CAACkB,OAAO,CAAC,CAAC;IAC3D,MAAMuC,gBAAgB,GAAGpC,OAAO,IAAIC,OAAO;IAE3C,MAAMoC,YAA6B,GAAG;MACpCZ,KAAK;MACLpB,UAAU,EAAEA,UAAU,IAAI,CAAC;IAC7B,CAAC;IAGD,IAAIF,KAAK,EAAE;MACT,OAAAT,aAAA,CAAAA,aAAA,KACK2C,YAAY;QACfC,YAAY,EACVL,gBAAgB,IAAIE,cAAc,GAC9BtD,wBAAwB,CAACgB,OAAO,EAAED,SAAS,CAAC,GAC5C,IAAI;QACV2C,UAAU,EAAEN,gBAAgB,GACxBrD,MAAM,CAACgB,SAAS,EAAEN,YAAY,CAAC,GAC/B,IAAI;QACRkD,QAAQ,EAAEL,cAAc,GAAGvD,MAAM,CAACiB,OAAO,EAAEP,YAAY,CAAC,GAAG,IAAI;QAC/DmD,mBAAmB,EACjBL,gBAAgB,IAChBH,gBAAgB,IAChBjD,UAAU,CAACY,SAAS,EAAEgB,KAAK,CAACZ,OAAO,EAAEY,KAAK,CAACX,OAAO,CAAC,GAC/C,KAAK,GACLgC,gBAAgB;QACtBS,iBAAiB,EACfN,gBAAgB,IAChBD,cAAc,IACdnD,UAAU,CAACa,OAAO,EAAEe,KAAK,CAACZ,OAAO,EAAEY,KAAK,CAACX,OAAO,CAAC,GAC7C,KAAK,GACLkC,cAAc;QACpBN,gBAAgB;QAChBC,cAAc;QACdC,gBAAgB;QAChBC;MAAc;IAElB;IAEA,OAAAtC,aAAA,CAAAA,aAAA,KACK2C,YAAY;MACf1C,IAAI,EAAEsC,gBAAgB,GAAGrD,MAAM,CAACgB,SAAS,EAAEN,YAAY,CAAC,GAAG,IAAI;MAC/DqD,WAAW,EAAEd,gBAAgB;MAG7BA,gBAAgB;MAChBe,WAAW,EAAEb,gBAAgB;MAC7Bc,QAAQ,EACNT,gBAAgB,IAChBH,gBAAgB,IAChBjD,UAAU,CAACY,SAAS,EAAEgB,KAAK,CAACZ,OAAO,EAAEY,KAAK,CAACX,OAAO,CAAC,GAC/C,KAAK,GACLgC;IAAgB;EAE1B,CAAC,EACD,CAACrB,KAAK,EAAEM,KAAK,EAAEb,UAAU,EAAEJ,OAAO,EAAED,OAAO,EAAEG,KAAK,EAAEG,gBAAgB,CACtE,CAAC;EAED,MAAMwC,mBAAmB,GAAGrE,WAAW,CAChCgD,KAA0B,IAAK;IAIlC,IACEJ,kBAAkB,IAClBA,kBAAkB,CAACzB,SAAS,KAAK6B,KAAK,CAAC7B,SAAS,IAChDyB,kBAAkB,CAACxB,OAAO,KAAK4B,KAAK,CAAC5B,OAAO,EAC5C;MACA;IACF;IAEAW,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGe,eAAe,CAAA7B,aAAA,CAAAA,aAAA,KAAMkB,KAAK,GAAKa,KAAK,CAAE,CAAC,CAAC;IAEnDH,qBAAqB,CAAC;MACpB1B,SAAS,EAAE6B,KAAK,CAAC7B,SAAS;MAC1BC,OAAO,EAAE4B,KAAK,CAAC5B;IACjB,CAAC,CAAC;EACJ,CAAC,EACD,CACE0B,eAAe,EACfX,KAAK,EACLJ,QAAQ,EACRa,kBAAkB,EAClBC,qBAAqB,CAEzB,CAAC;EAGD,IAAI,OAAOb,eAAe,KAAK,UAAU,EAAE;IACzCA,eAAe,CAACc,eAAe,CAAC;EAClC;EAEA,OACE/C,KAAA,CAAAuE,aAAA,CAAC9D,iBAAiB,CAAC+D,QAAQ;IACzBC,KAAK,EAAAvD,aAAA,CAAAA,aAAA;MACHwD,WAAW,EAAEvC,aAAa,CAACuC,WAAW;MACtCrC,WAAW;MACXU,eAAe;MACfuB,mBAAmB;MACnBpC,UAAU,EAAEA,UAAU;MACtBjB;IAAK,GACFmB,KAAK;MACRG,iBAAiB;MACjBD,eAAe;MACfI,KAAK;MACLC,QAAQ;MACRC;IAAwB;EACxB,GAEDb,QACyB,CAAC;AAEjC;AAEA,eAAehB,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"DatePickerProvider.js","names":["React","useCallback","useContext","isValid","format","differenceInCalendarDays","SharedContext","correctV1Format","isDisabled","DatePickerContext","useViews","useDates","useLastEventCallCache","defaultProps","returnFormat","DatePickerProvider","externalProps","props","_objectSpread","date","startDate","endDate","startMonth","endMonth","minDate","maxDate","dateFormat","range","correctInvalidDate","attributes","returnFormatProp","children","onChange","setReturnObject","hidePicker","sharedContext","dates","updateDates","previousDateProps","isRange","shouldCorrectDate","views","setViews","setHasClickedCalendarDay","lastEventCallCache","setLastEventCallCache","getReturnObject","_ref","event","rest","_objectWithoutProperties","_excluded","partialStartDate","partialEndDate","invalidStartDate","invalidEndDate","startDateIsValid","Boolean","endDateIsValid","hasMinOrMaxDates","returnObject","days_between","start_date","end_date","is_valid_start_date","is_valid_end_date","partialDate","invalidDate","is_valid","callOnChangeHandler","createElement","Provider","value","translation"],"sources":["../../../../src/components/date-picker/DatePickerProvider.tsx"],"sourcesContent":["/**\n * Web DatePicker Provider\n *\n */\n\nimport React, { useCallback, useContext } from 'react'\nimport type {\n DatePickerEventAttributes,\n DatePickerAllProps,\n DatePickerProps,\n} from './DatePicker'\n\nimport isValid from 'date-fns/isValid'\nimport format from 'date-fns/format'\nimport differenceInCalendarDays from 'date-fns/differenceInCalendarDays'\n\nimport SharedContext from '../../shared/Context'\nimport { correctV1Format, isDisabled } from './DatePickerCalc'\nimport DatePickerContext, {\n DatePickerContextValues,\n} from './DatePickerContext'\nimport useViews, { CalendarView } from './hooks/useViews'\nimport useDates, { DatePickerDates } from './hooks/useDates'\nimport useLastEventCallCache, {\n LastEventCallCache,\n} from './hooks/useLastEventCallCache'\nimport { InvalidDates } from './DatePickerInput'\nimport { PartialDates } from './hooks/usePartialDates'\n\ntype DatePickerProviderProps = DatePickerAllProps & {\n setReturnObject: (\n func: DatePickerContextValues['getReturnObject']\n ) => DatePickerContextValues['getReturnObject']\n hidePicker?: DatePickerContextValues['hidePicker']\n attributes?: DatePickerEventAttributes\n children: React.ReactNode\n}\n\nexport type DatePickerChangeEvent<E> = DatePickerDates &\n InvalidDates & {\n nr?: number\n hidePicker?: boolean\n event?: E\n }\n\nexport type GetReturnObjectParams<E> = DatePickerDates &\n PartialDates &\n InvalidDates & {\n event?: E\n }\n\n// TODO: convert properties on event handler return objects to camelCase, constitutes a breaking change\nexport type ReturnObject<E> = InvalidDates &\n PartialDates & {\n event?: E\n attributes?: Record<string, unknown>\n days_between?: number\n date?: string | null\n start_date?: string | null\n end_date?: string | null\n is_valid?: boolean\n is_valid_start_date?: boolean\n is_valid_end_date?: boolean\n }\n\nexport type DatePickerProviderState = DatePickerDates &\n Array<CalendarView> &\n LastEventCallCache\n\nconst defaultProps: Partial<DatePickerProps> = {\n returnFormat: 'yyyy-MM-dd', // used in date-fns v1: YYYY-MM-DD\n}\n\nfunction DatePickerProvider(externalProps: DatePickerProviderProps) {\n const props = { ...defaultProps, ...externalProps }\n\n const {\n date,\n startDate,\n endDate,\n startMonth,\n endMonth,\n minDate,\n maxDate,\n dateFormat,\n range,\n correctInvalidDate,\n attributes,\n returnFormat: returnFormatProp,\n children,\n onChange,\n setReturnObject,\n hidePicker,\n } = props\n\n const sharedContext = useContext(SharedContext)\n\n const { dates, updateDates, previousDateProps } = useDates(\n {\n date,\n startDate,\n endDate,\n startMonth,\n endMonth,\n minDate,\n maxDate,\n },\n {\n dateFormat: dateFormat,\n isRange: range,\n shouldCorrectDate: correctInvalidDate,\n }\n )\n\n const { views, setViews, setHasClickedCalendarDay } = useViews({\n startMonth: dates.startMonth,\n endMonth: dates.endMonth,\n isRange: range,\n })\n\n const [lastEventCallCache, setLastEventCallCache] =\n useLastEventCallCache({\n startDate: dates.startDate,\n endDate: dates.endDate,\n })\n\n const getReturnObject = useCallback(\n <E,>({ event = null, ...rest }: GetReturnObjectParams<E> = {}) => {\n const {\n startDate,\n endDate,\n partialStartDate,\n partialEndDate,\n invalidStartDate,\n invalidEndDate,\n } = {\n ...views,\n ...dates,\n ...rest,\n }\n\n const returnFormat = correctV1Format(returnFormatProp)\n const startDateIsValid = Boolean(startDate && isValid(startDate))\n const endDateIsValid = Boolean(endDate && isValid(endDate))\n const hasMinOrMaxDates = minDate || maxDate\n\n const returnObject: ReturnObject<E> = {\n event,\n attributes: attributes || {},\n }\n\n // Handle range props\n if (range) {\n return {\n ...returnObject,\n days_between:\n startDateIsValid && endDateIsValid\n ? differenceInCalendarDays(endDate, startDate)\n : null,\n start_date: startDateIsValid\n ? format(startDate, returnFormat)\n : null,\n end_date: endDateIsValid ? format(endDate, returnFormat) : null,\n is_valid_start_date:\n hasMinOrMaxDates &&\n startDateIsValid &&\n isDisabled(startDate, dates.minDate, dates.maxDate)\n ? false\n : startDateIsValid,\n is_valid_end_date:\n hasMinOrMaxDates &&\n endDateIsValid &&\n isDisabled(endDate, dates.minDate, dates.maxDate)\n ? false\n : endDateIsValid,\n partialStartDate,\n partialEndDate,\n invalidStartDate,\n invalidEndDate,\n }\n }\n\n return {\n ...returnObject,\n date: startDateIsValid ? format(startDate, returnFormat) : null,\n partialDate: partialStartDate,\n // Can be removed in v11, in favor to partialDate,\n // to keep the naming logic the same as with date and invalidDate when not in range mode\n partialStartDate,\n invalidDate: invalidStartDate,\n is_valid:\n hasMinOrMaxDates &&\n startDateIsValid &&\n isDisabled(startDate, dates.minDate, dates.maxDate)\n ? false\n : startDateIsValid,\n }\n },\n [dates, views, attributes, maxDate, minDate, range, returnFormatProp]\n )\n\n const callOnChangeHandler = useCallback(\n <E,>(event: E & DatePickerDates) => {\n /**\n * Prevent on_change to be fired twice if date not has actually changed\n */\n if (\n lastEventCallCache &&\n lastEventCallCache.startDate === event.startDate &&\n lastEventCallCache.endDate === event.endDate\n ) {\n return // stop here\n }\n\n onChange?.(getReturnObject({ ...dates, ...event }))\n\n setLastEventCallCache({\n startDate: event.startDate,\n endDate: event.endDate,\n })\n },\n [\n getReturnObject,\n dates,\n onChange,\n lastEventCallCache,\n setLastEventCallCache,\n ]\n )\n\n // Is this at any point something other than a function?\n if (typeof setReturnObject === 'function') {\n setReturnObject(getReturnObject)\n }\n\n return (\n <DatePickerContext.Provider\n value={{\n translation: sharedContext.translation,\n updateDates,\n getReturnObject,\n callOnChangeHandler,\n hidePicker: hidePicker,\n props,\n ...dates,\n previousDateProps,\n views,\n setViews,\n setHasClickedCalendarDay,\n }}\n >\n {children}\n </DatePickerContext.Provider>\n )\n}\n\nexport default DatePickerProvider\n"],"mappings":"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","ignoreList":[]}
@@ -30,13 +30,11 @@ export type DatePickerDates = {
30
30
  maxDate?: Date;
31
31
  startMonth?: Date;
32
32
  endMonth?: Date;
33
- hasHadValidDate?: boolean;
34
33
  hoverDate?: Date;
35
34
  } & DatePickerInputDates;
36
35
  export default function useDates(dateProps: DatePickerDateProps, { dateFormat, isRange, shouldCorrectDate, }: UseDatesOptions): {
37
36
  readonly dates: DatePickerDates;
38
37
  readonly updateDates: (newDates: DatePickerDates, callback?: (dates: DatePickerDates) => void) => void;
39
- readonly hasHadValidDate: boolean;
40
38
  readonly previousDateProps: DatePickerDateProps;
41
39
  };
42
40
  export declare function pad(date: string, size: number): string;
@@ -3,11 +3,12 @@
3
3
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
+ import React, { useCallback, useMemo, useState } from 'react';
7
7
  import { convertStringToDate, isDisabled } from '../DatePickerCalc';
8
8
  import isValid from 'date-fns/isValid';
9
9
  import format from 'date-fns/format';
10
10
  import { addMonths, isSameDay } from 'date-fns';
11
+ const useLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;
11
12
  export default function useDates(dateProps, {
12
13
  dateFormat,
13
14
  isRange = false,
@@ -44,7 +45,6 @@ export default function useDates(dateProps, {
44
45
  setDates(currentDates => _objectSpread(_objectSpread({}, currentDates), derivedDates));
45
46
  setPreviousDateProps(dateProps);
46
47
  }
47
- const hasHadValidDate = useRef(false);
48
48
  const updateDates = useCallback((newDates, callback) => {
49
49
  var _newDates$startDate, _newDates$endDate;
50
50
  const correctedDates = shouldCorrectDate ? correctDates({
@@ -63,16 +63,14 @@ export default function useDates(dateProps, {
63
63
  });
64
64
  callback === null || callback === void 0 ? void 0 : callback(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, dates), newDates), months), correctedDates));
65
65
  }, [dates, shouldCorrectDate, isRange]);
66
- useEffect(() => {
66
+ useLayoutEffect(() => {
67
67
  const startDates = updateInputDates('start', dates.startDate);
68
68
  const endDates = updateInputDates('end', dates.endDate);
69
- hasHadValidDate.current = isValid(dates.startDate) || isValid(dates.endDate);
70
69
  setDates(currentDates => _objectSpread(_objectSpread(_objectSpread({}, currentDates), startDates), endDates));
71
70
  }, [dates.startDate, dates.endDate]);
72
71
  return {
73
72
  dates,
74
73
  updateDates,
75
- hasHadValidDate: hasHadValidDate.current,
76
74
  previousDateProps
77
75
  };
78
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useDates.js","names":["useCallback","useEffect","useMemo","useRef","useState","convertStringToDate","isDisabled","isValid","format","addMonths","isSameDay","useDates","dateProps","dateFormat","isRange","shouldCorrectDate","previousDateProps","setPreviousDateProps","dates","setDates","_objectSpread","mapDates","hasDatePropChanges","Object","keys","some","date","dateProp","previousDate","convertedDateProp","convertedPreviousDate","Date","derivedDates","deriveDatesFromProps","currentDates","hasHadValidDate","updateDates","newDates","callback","_newDates$startDate","_newDates$endDate","correctedDates","correctDates","startDate","endDate","minDate","maxDate","months","updateMonths","startDates","updateInputDates","endDates","current","type","updatedDates","pad","undefined","_ref","_convertStringToDate","_convertStringToDate2","getDate","startMonth","endMonth","hasValidStartDate","hasValidEndDate","__startDay","__startMonth","__startYear","__endDay","__endMonth","__endYear","getStartDate","_ref2","_newDates$startMonth","_ref3","_newDates$endMonth","size","dateWithPadding","substring","length"],"sources":["../../../../../src/components/date-picker/hooks/useDates.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { convertStringToDate, isDisabled } from '../DatePickerCalc'\nimport isValid from 'date-fns/isValid'\nimport format from 'date-fns/format'\nimport { addMonths, isSameDay } from 'date-fns'\nimport { DateType } from '../DatePickerContext'\n\nexport type DatePickerDateProps = {\n date?: DateType\n startDate?: DateType\n endDate?: DateType\n startMonth?: DateType\n endMonth?: DateType\n minDate?: DateType\n maxDate?: DateType\n hoverDate?: DateType | null\n}\n\ntype UseDatesOptions = {\n dateFormat: string\n isRange: boolean\n shouldCorrectDate: boolean\n}\n// TODO: Move to DatePickerInput\nexport type DatePickerInputDates = {\n __startDay?: string\n __startMonth?: string\n __startYear?: string\n __endDay?: string\n __endMonth?: string\n __endYear?: string\n}\n\nexport type DatePickerDates = {\n date?: DateType\n startDate?: Date\n endDate?: Date\n minDate?: Date\n maxDate?: Date\n startMonth?: Date\n endMonth?: Date\n hasHadValidDate?: boolean\n hoverDate?: Date\n} & DatePickerInputDates\n\nexport default function useDates(\n dateProps: DatePickerDateProps,\n {\n dateFormat,\n isRange = false,\n shouldCorrectDate = false,\n }: UseDatesOptions\n) {\n const [previousDateProps, setPreviousDateProps] = useState(dateProps)\n const [dates, setDates] = useState<DatePickerDates>({\n ...mapDates(dateProps, {\n dateFormat,\n isRange,\n shouldCorrectDate,\n }),\n })\n\n const hasDatePropChanges = useMemo(\n () =>\n Object.keys(dateProps).some((date) => {\n const dateProp = dateProps[date]\n const previousDate = previousDateProps[date]\n\n const convertedDateProp = convertStringToDate(dateProp, {\n dateFormat,\n })\n const convertedPreviousDate = convertStringToDate(previousDate, {\n dateFormat,\n })\n // Make sure that same dates does not trigger a change\n // i.e. 2021-01-01 and new Date('2021-01-01')\n if (\n convertedDateProp instanceof Date &&\n convertedPreviousDate instanceof Date\n ) {\n return !isSameDay(convertedDateProp, convertedPreviousDate)\n }\n\n return dateProp !== previousDate\n }),\n [dateProps, previousDateProps, dateFormat]\n )\n\n // Update dates on prop change\n if (hasDatePropChanges) {\n const derivedDates = deriveDatesFromProps({\n dates,\n dateProps,\n previousDateProps,\n dateFormat,\n isRange,\n })\n\n setDates((currentDates) => ({ ...currentDates, ...derivedDates }))\n setPreviousDateProps(dateProps)\n }\n\n const hasHadValidDate = useRef<boolean>(false)\n\n const updateDates = useCallback(\n (\n newDates: DatePickerDates,\n callback?: (dates: DatePickerDates) => void\n ) => {\n // Correct dates based on min and max date\n const correctedDates = shouldCorrectDate\n ? correctDates({\n startDate: newDates.startDate ?? dates.startDate,\n endDate: newDates.endDate ?? dates.endDate,\n minDate: dates.minDate,\n maxDate: dates.maxDate,\n isRange,\n })\n : {}\n\n // Update months based on month or start/end date changes\n const months = updateMonths({\n newDates,\n currentDates: dates,\n })\n\n setDates((currentDates) => {\n return {\n ...currentDates,\n ...newDates,\n ...months,\n ...correctedDates,\n }\n })\n\n callback?.({\n ...dates,\n ...newDates,\n ...months,\n ...correctedDates,\n })\n },\n [dates, shouldCorrectDate, isRange]\n )\n\n // Updated input dates based on start and end dates, move to DatePickerInput\n // TODO: Move to DatePickerInput\n useEffect(() => {\n const startDates = updateInputDates('start', dates.startDate)\n const endDates = updateInputDates('end', dates.endDate)\n\n hasHadValidDate.current =\n isValid(dates.startDate) || isValid(dates.endDate)\n\n setDates((currentDates) => ({\n ...currentDates,\n ...startDates,\n ...endDates,\n }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dates.startDate, dates.endDate])\n\n return {\n dates,\n updateDates,\n hasHadValidDate: hasHadValidDate.current,\n previousDateProps,\n } as const\n}\n\n// TODO: Move to DatePickerInput\nfunction updateInputDates(type: 'start' | 'end', date: Date | undefined) {\n const updatedDates = {}\n\n if (isValid(date)) {\n updatedDates[`__${type}Day`] = pad(format(date, 'dd'), 2)\n updatedDates[`__${type}Month`] = pad(format(date, 'MM'), 2)\n updatedDates[`__${type}Year`] = format(date, 'yyyy')\n } else if (date === undefined) {\n updatedDates[`__${type}Day`] = null\n updatedDates[`__${type}Month`] = null\n updatedDates[`__${type}Year`] = null\n }\n\n return updatedDates\n}\n\nfunction mapDates(\n dateProps: DatePickerDateProps,\n {\n dateFormat,\n isRange,\n shouldCorrectDate,\n }: Omit<UseDatesOptions, 'isLinked'>\n) {\n const date = dateProps.date\n\n const startDate =\n typeof dateProps?.startDate !== 'undefined'\n ? getDate(dateProps.startDate, dateFormat)\n : typeof date !== 'undefined'\n ? getDate(date, dateFormat)\n : undefined\n\n const endDate = !isRange\n ? startDate\n : convertStringToDate(dateProps?.endDate, {\n dateFormat,\n }) || undefined\n\n // Ensure that the calendar view displays the correct start and end months, and to prevent date flickering bug\n const startMonth =\n convertStringToDate(dateProps.startMonth, {\n dateFormat,\n }) ??\n startDate ??\n new Date()\n\n const endMonth =\n convertStringToDate(dateProps.endMonth, {\n dateFormat: dateFormat,\n }) ?? (isRange ? endDate ?? addMonths(startMonth, 1) : startMonth)\n\n const minDate = convertStringToDate(dateProps.minDate, {\n dateFormat,\n })\n\n const maxDate = convertStringToDate(dateProps.maxDate, {\n dateFormat,\n })\n\n const correctedDates = shouldCorrectDate\n ? correctDates({ startDate, endDate, minDate, maxDate, isRange })\n : {}\n\n const dates = {\n date,\n startDate,\n endDate,\n startMonth,\n endMonth,\n minDate,\n maxDate,\n ...correctedDates,\n }\n\n const hasValidStartDate = isValid(dates.startDate)\n const hasValidEndDate = isValid(dates.endDate)\n\n return {\n ...dates,\n __startDay: hasValidStartDate\n ? pad(format(dates.startDate, 'dd'), 2)\n : null,\n __startMonth: hasValidStartDate\n ? pad(format(dates.startDate, 'MM'), 2)\n : null,\n __startYear: hasValidStartDate\n ? format(dates.startDate, 'yyyy')\n : null,\n __endDay: hasValidEndDate ? pad(format(dates.endDate, 'dd'), 2) : null,\n __endMonth: hasValidEndDate\n ? pad(format(dates.endDate, 'MM'), 2)\n : null,\n __endYear: hasValidEndDate ? format(dates.endDate, 'yyyy') : null,\n }\n}\n\nfunction deriveDatesFromProps({\n dates,\n dateProps,\n previousDateProps,\n dateFormat,\n isRange,\n}: {\n dates: DatePickerDates\n dateProps: DatePickerDateProps\n previousDateProps: DatePickerDateProps\n dateFormat: UseDatesOptions['dateFormat']\n isRange: UseDatesOptions['isRange']\n}) {\n const derivedDates: DatePickerDates = {}\n\n const startDate = getStartDate(dateProps, previousDateProps)\n\n // Handle updates related to date and startDate changes when not in range mode\n if (typeof startDate !== 'undefined' && startDate !== dates.startDate) {\n derivedDates.startDate =\n convertStringToDate(startDate, {\n dateFormat,\n }) || undefined\n\n // Set endDate and startMonth to startDate if not in range mode\n if (!isRange) {\n derivedDates.startMonth =\n convertStringToDate(startDate, {\n dateFormat,\n }) || undefined\n\n derivedDates.endDate = derivedDates.startDate\n }\n }\n\n // update endDate based on endDate prop if in range mode\n if (\n isRange &&\n typeof dateProps.endDate !== 'undefined' &&\n dateProps.endDate !== dates.endDate\n ) {\n derivedDates.endDate =\n convertStringToDate(dateProps.endDate, {\n dateFormat,\n }) || undefined\n }\n\n // Handle startMonth/endMonth\n if (\n typeof dateProps.startMonth !== 'undefined' &&\n dateProps.startMonth !== previousDateProps.startMonth\n ) {\n derivedDates.startMonth = convertStringToDate(dateProps.startMonth, {\n dateFormat,\n })\n }\n if (\n typeof dateProps.endMonth !== 'undefined' &&\n dateProps.endMonth !== previousDateProps.endMonth\n ) {\n derivedDates.endMonth = convertStringToDate(dateProps.endMonth, {\n dateFormat,\n })\n }\n\n // Handle minDate/maxDate\n if (\n typeof dateProps.minDate !== 'undefined' &&\n dateProps.minDate !== previousDateProps.minDate\n ) {\n derivedDates.minDate = convertStringToDate(dateProps.minDate, {\n dateFormat,\n })\n }\n if (\n typeof dateProps.maxDate !== 'undefined' &&\n dateProps.maxDate !== previousDateProps.maxDate\n ) {\n derivedDates.maxDate = convertStringToDate(dateProps.maxDate, {\n dateFormat,\n })\n }\n\n return derivedDates\n}\n\nfunction correctDates({\n startDate,\n endDate,\n minDate,\n maxDate,\n isRange,\n}: {\n startDate: Date\n endDate: Date\n minDate: Date\n maxDate: Date\n isRange: boolean\n}) {\n const correctedDates = {}\n\n if (isDisabled(startDate, minDate, maxDate)) {\n correctedDates['startDate'] = minDate\n }\n if (isDisabled(endDate, minDate, maxDate)) {\n // state.endDate is only used by the input if range is set to true.\n // this is done to make maxDate correction work if the input is not a range and only maxDate is defined.\n if (!isRange && !minDate) {\n correctedDates['startDate'] = maxDate\n } else {\n correctedDates['endDate'] = maxDate\n }\n }\n\n return correctedDates\n}\n\nfunction updateMonths({\n newDates,\n currentDates,\n}: {\n newDates: DatePickerDates\n currentDates: DatePickerDates\n}) {\n const startMonth =\n newDates.startMonth ?? newDates.startDate ?? currentDates.startMonth\n const endMonth =\n newDates.endMonth ?? newDates.endDate ?? currentDates.endMonth\n\n return {\n startMonth,\n endMonth,\n }\n}\n\nfunction getDate(date: DateType, dateFormat: string) {\n return date instanceof Date\n ? date\n : convertStringToDate(date ?? '', {\n dateFormat,\n })\n}\n\nfunction getStartDate(\n dateProps: DatePickerDateProps,\n previousDateProps: DatePickerDateProps\n) {\n // prioritize startDate over date if provided\n if (\n typeof dateProps.startDate !== 'undefined' &&\n dateProps.startDate !== previousDateProps.startDate\n ) {\n return dateProps.startDate\n }\n\n if (\n typeof dateProps.date !== 'undefined' &&\n dateProps.date !== previousDateProps.date\n ) {\n return dateProps.date\n }\n\n return undefined\n}\n\nexport function pad(date: string, size: number) {\n const dateWithPadding = '000000000' + date\n\n return dateWithPadding.substring(dateWithPadding.length - size)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useDates.js","names":["React","useCallback","useMemo","useState","convertStringToDate","isDisabled","isValid","format","addMonths","isSameDay","useLayoutEffect","window","useEffect","useDates","dateProps","dateFormat","isRange","shouldCorrectDate","previousDateProps","setPreviousDateProps","dates","setDates","_objectSpread","mapDates","hasDatePropChanges","Object","keys","some","date","dateProp","previousDate","convertedDateProp","convertedPreviousDate","Date","derivedDates","deriveDatesFromProps","currentDates","updateDates","newDates","callback","_newDates$startDate","_newDates$endDate","correctedDates","correctDates","startDate","endDate","minDate","maxDate","months","updateMonths","startDates","updateInputDates","endDates","type","updatedDates","pad","undefined","_ref","_convertStringToDate","_convertStringToDate2","getDate","startMonth","endMonth","hasValidStartDate","hasValidEndDate","__startDay","__startMonth","__startYear","__endDay","__endMonth","__endYear","getStartDate","_ref2","_newDates$startMonth","_ref3","_newDates$endMonth","size","dateWithPadding","substring","length"],"sources":["../../../../../src/components/date-picker/hooks/useDates.ts"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react'\nimport { convertStringToDate, isDisabled } from '../DatePickerCalc'\nimport isValid from 'date-fns/isValid'\nimport format from 'date-fns/format'\nimport { addMonths, isSameDay } from 'date-fns'\nimport { DateType } from '../DatePickerContext'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport type DatePickerDateProps = {\n date?: DateType\n startDate?: DateType\n endDate?: DateType\n startMonth?: DateType\n endMonth?: DateType\n minDate?: DateType\n maxDate?: DateType\n hoverDate?: DateType | null\n}\n\ntype UseDatesOptions = {\n dateFormat: string\n isRange: boolean\n shouldCorrectDate: boolean\n}\n// TODO: Move to DatePickerInput\nexport type DatePickerInputDates = {\n __startDay?: string\n __startMonth?: string\n __startYear?: string\n __endDay?: string\n __endMonth?: string\n __endYear?: string\n}\n\nexport type DatePickerDates = {\n date?: DateType\n startDate?: Date\n endDate?: Date\n minDate?: Date\n maxDate?: Date\n startMonth?: Date\n endMonth?: Date\n hoverDate?: Date\n} & DatePickerInputDates\n\nexport default function useDates(\n dateProps: DatePickerDateProps,\n {\n dateFormat,\n isRange = false,\n shouldCorrectDate = false,\n }: UseDatesOptions\n) {\n const [previousDateProps, setPreviousDateProps] = useState(dateProps)\n const [dates, setDates] = useState<DatePickerDates>({\n ...mapDates(dateProps, {\n dateFormat,\n isRange,\n shouldCorrectDate,\n }),\n })\n\n const hasDatePropChanges = useMemo(\n () =>\n Object.keys(dateProps).some((date) => {\n const dateProp = dateProps[date]\n const previousDate = previousDateProps[date]\n\n const convertedDateProp = convertStringToDate(dateProp, {\n dateFormat,\n })\n const convertedPreviousDate = convertStringToDate(previousDate, {\n dateFormat,\n })\n // Make sure that same dates does not trigger a change\n // i.e. 2021-01-01 and new Date('2021-01-01')\n if (\n convertedDateProp instanceof Date &&\n convertedPreviousDate instanceof Date\n ) {\n return !isSameDay(convertedDateProp, convertedPreviousDate)\n }\n\n return dateProp !== previousDate\n }),\n [dateProps, previousDateProps, dateFormat]\n )\n\n // Update dates on prop change\n if (hasDatePropChanges) {\n const derivedDates = deriveDatesFromProps({\n dates,\n dateProps,\n previousDateProps,\n dateFormat,\n isRange,\n })\n\n setDates((currentDates) => ({ ...currentDates, ...derivedDates }))\n setPreviousDateProps(dateProps)\n }\n\n const updateDates = useCallback(\n (\n newDates: DatePickerDates,\n callback?: (dates: DatePickerDates) => void\n ) => {\n // Correct dates based on min and max date\n const correctedDates = shouldCorrectDate\n ? correctDates({\n startDate: newDates.startDate ?? dates.startDate,\n endDate: newDates.endDate ?? dates.endDate,\n minDate: dates.minDate,\n maxDate: dates.maxDate,\n isRange,\n })\n : {}\n\n // Update months based on month or start/end date changes\n const months = updateMonths({\n newDates,\n currentDates: dates,\n })\n\n setDates((currentDates) => {\n return {\n ...currentDates,\n ...newDates,\n ...months,\n ...correctedDates,\n }\n })\n\n callback?.({\n ...dates,\n ...newDates,\n ...months,\n ...correctedDates,\n })\n },\n [dates, shouldCorrectDate, isRange]\n )\n\n // Updated input dates based on start and end dates, move to DatePickerInput\n // TODO: Move to DatePickerInput\n useLayoutEffect(() => {\n const startDates = updateInputDates('start', dates.startDate)\n const endDates = updateInputDates('end', dates.endDate)\n\n setDates((currentDates) => ({\n ...currentDates,\n ...startDates,\n ...endDates,\n }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dates.startDate, dates.endDate])\n\n return {\n dates,\n updateDates,\n previousDateProps,\n } as const\n}\n\n// TODO: Move to DatePickerInput\nfunction updateInputDates(type: 'start' | 'end', date: Date | undefined) {\n const updatedDates = {}\n\n if (isValid(date)) {\n updatedDates[`__${type}Day`] = pad(format(date, 'dd'), 2)\n updatedDates[`__${type}Month`] = pad(format(date, 'MM'), 2)\n updatedDates[`__${type}Year`] = format(date, 'yyyy')\n } else if (date === undefined) {\n updatedDates[`__${type}Day`] = null\n updatedDates[`__${type}Month`] = null\n updatedDates[`__${type}Year`] = null\n }\n\n return updatedDates\n}\n\nfunction mapDates(\n dateProps: DatePickerDateProps,\n {\n dateFormat,\n isRange,\n shouldCorrectDate,\n }: Omit<UseDatesOptions, 'isLinked'>\n) {\n const date = dateProps.date\n\n const startDate =\n typeof dateProps?.startDate !== 'undefined'\n ? getDate(dateProps.startDate, dateFormat)\n : typeof date !== 'undefined'\n ? getDate(date, dateFormat)\n : undefined\n\n const endDate = !isRange\n ? startDate\n : convertStringToDate(dateProps?.endDate, {\n dateFormat,\n }) || undefined\n\n // Ensure that the calendar view displays the correct start and end months, and to prevent date flickering bug\n const startMonth =\n convertStringToDate(dateProps.startMonth, {\n dateFormat,\n }) ??\n startDate ??\n new Date()\n\n const endMonth =\n convertStringToDate(dateProps.endMonth, {\n dateFormat: dateFormat,\n }) ?? (isRange ? endDate ?? addMonths(startMonth, 1) : startMonth)\n\n const minDate = convertStringToDate(dateProps.minDate, {\n dateFormat,\n })\n\n const maxDate = convertStringToDate(dateProps.maxDate, {\n dateFormat,\n })\n\n const correctedDates = shouldCorrectDate\n ? correctDates({ startDate, endDate, minDate, maxDate, isRange })\n : {}\n\n const dates = {\n date,\n startDate,\n endDate,\n startMonth,\n endMonth,\n minDate,\n maxDate,\n ...correctedDates,\n }\n\n const hasValidStartDate = isValid(dates.startDate)\n const hasValidEndDate = isValid(dates.endDate)\n\n return {\n ...dates,\n __startDay: hasValidStartDate\n ? pad(format(dates.startDate, 'dd'), 2)\n : null,\n __startMonth: hasValidStartDate\n ? pad(format(dates.startDate, 'MM'), 2)\n : null,\n __startYear: hasValidStartDate\n ? format(dates.startDate, 'yyyy')\n : null,\n __endDay: hasValidEndDate ? pad(format(dates.endDate, 'dd'), 2) : null,\n __endMonth: hasValidEndDate\n ? pad(format(dates.endDate, 'MM'), 2)\n : null,\n __endYear: hasValidEndDate ? format(dates.endDate, 'yyyy') : null,\n }\n}\n\nfunction deriveDatesFromProps({\n dates,\n dateProps,\n previousDateProps,\n dateFormat,\n isRange,\n}: {\n dates: DatePickerDates\n dateProps: DatePickerDateProps\n previousDateProps: DatePickerDateProps\n dateFormat: UseDatesOptions['dateFormat']\n isRange: UseDatesOptions['isRange']\n}) {\n const derivedDates: DatePickerDates = {}\n\n const startDate = getStartDate(dateProps, previousDateProps)\n\n // Handle updates related to date and startDate changes when not in range mode\n if (typeof startDate !== 'undefined' && startDate !== dates.startDate) {\n derivedDates.startDate =\n convertStringToDate(startDate, {\n dateFormat,\n }) || undefined\n\n // Set endDate and startMonth to startDate if not in range mode\n if (!isRange) {\n derivedDates.startMonth =\n convertStringToDate(startDate, {\n dateFormat,\n }) || undefined\n\n derivedDates.endDate = derivedDates.startDate\n }\n }\n\n // update endDate based on endDate prop if in range mode\n if (\n isRange &&\n typeof dateProps.endDate !== 'undefined' &&\n dateProps.endDate !== dates.endDate\n ) {\n derivedDates.endDate =\n convertStringToDate(dateProps.endDate, {\n dateFormat,\n }) || undefined\n }\n\n // Handle startMonth/endMonth\n if (\n typeof dateProps.startMonth !== 'undefined' &&\n dateProps.startMonth !== previousDateProps.startMonth\n ) {\n derivedDates.startMonth = convertStringToDate(dateProps.startMonth, {\n dateFormat,\n })\n }\n if (\n typeof dateProps.endMonth !== 'undefined' &&\n dateProps.endMonth !== previousDateProps.endMonth\n ) {\n derivedDates.endMonth = convertStringToDate(dateProps.endMonth, {\n dateFormat,\n })\n }\n\n // Handle minDate/maxDate\n if (\n typeof dateProps.minDate !== 'undefined' &&\n dateProps.minDate !== previousDateProps.minDate\n ) {\n derivedDates.minDate = convertStringToDate(dateProps.minDate, {\n dateFormat,\n })\n }\n if (\n typeof dateProps.maxDate !== 'undefined' &&\n dateProps.maxDate !== previousDateProps.maxDate\n ) {\n derivedDates.maxDate = convertStringToDate(dateProps.maxDate, {\n dateFormat,\n })\n }\n\n return derivedDates\n}\n\nfunction correctDates({\n startDate,\n endDate,\n minDate,\n maxDate,\n isRange,\n}: {\n startDate: Date\n endDate: Date\n minDate: Date\n maxDate: Date\n isRange: boolean\n}) {\n const correctedDates = {}\n\n if (isDisabled(startDate, minDate, maxDate)) {\n correctedDates['startDate'] = minDate\n }\n if (isDisabled(endDate, minDate, maxDate)) {\n // state.endDate is only used by the input if range is set to true.\n // this is done to make maxDate correction work if the input is not a range and only maxDate is defined.\n if (!isRange && !minDate) {\n correctedDates['startDate'] = maxDate\n } else {\n correctedDates['endDate'] = maxDate\n }\n }\n\n return correctedDates\n}\n\nfunction updateMonths({\n newDates,\n currentDates,\n}: {\n newDates: DatePickerDates\n currentDates: DatePickerDates\n}) {\n const startMonth =\n newDates.startMonth ?? newDates.startDate ?? currentDates.startMonth\n const endMonth =\n newDates.endMonth ?? newDates.endDate ?? currentDates.endMonth\n\n return {\n startMonth,\n endMonth,\n }\n}\n\nfunction getDate(date: DateType, dateFormat: string) {\n return date instanceof Date\n ? date\n : convertStringToDate(date ?? '', {\n dateFormat,\n })\n}\n\nfunction getStartDate(\n dateProps: DatePickerDateProps,\n previousDateProps: DatePickerDateProps\n) {\n // prioritize startDate over date if provided\n if (\n typeof dateProps.startDate !== 'undefined' &&\n dateProps.startDate !== previousDateProps.startDate\n ) {\n return dateProps.startDate\n }\n\n if (\n typeof dateProps.date !== 'undefined' &&\n dateProps.date !== previousDateProps.date\n ) {\n return dateProps.date\n }\n\n return undefined\n}\n\nexport function pad(date: string, size: number) {\n const dateWithPadding = '000000000' + date\n\n return dateWithPadding.substring(dateWithPadding.length - size)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -60,11 +60,13 @@ export const useLocalValue = () => {
60
60
  } = React.useContext(InputMaskedContext);
61
61
  const maskParams = useNumberMaskParams() || {};
62
62
  const locale = useTranslation();
63
- const [localValue, setLocalValue] = React.useState(() => correctNumberValue({
64
- locale,
65
- props,
66
- maskParams
67
- }));
63
+ const [localValue, setLocalValue] = React.useState(() => {
64
+ return correctNumberValue({
65
+ locale,
66
+ props,
67
+ maskParams
68
+ });
69
+ });
68
70
  React.useEffect(() => {
69
71
  const value = correctNumberValue({
70
72
  localValue,
@@ -202,10 +204,11 @@ export const useEventMapping = ({
202
204
  const useCallEvent = ({
203
205
  setLocalValue
204
206
  }) => {
207
+ const maskParamsRef = React.useRef();
208
+ maskParamsRef.current = useMaskParams();
205
209
  const {
206
210
  props
207
211
  } = React.useContext(InputMaskedContext);
208
- const maskParams = useMaskParams();
209
212
  const isNumberMask = useNumberMask();
210
213
  const decimalSeparators = /[,.'·]/;
211
214
  let isUnidentified = false;
@@ -213,6 +216,7 @@ const useCallEvent = ({
213
216
  event,
214
217
  value
215
218
  }, name) => {
219
+ const maskParams = maskParamsRef.current;
216
220
  value = value || event.target.value;
217
221
  const selStart = event.target.selectionStart;
218
222
  let keyCode = keycode(event);
@@ -278,7 +282,7 @@ const useCallEvent = ({
278
282
  case 'on_key_down':
279
283
  case 'on_mouse_down':
280
284
  case 'on_mouse_up':
281
- event.target.runCorrectCaretPosition = () => correctCaretPosition(event.target, maskParams, props);
285
+ event.target.runCorrectCaretPosition = () => correctCaretPosition(event.target, maskParamsRef, props);
282
286
  if (!event.target.__getCorrectCaretPosition) {
283
287
  event.target.runCorrectCaretPosition();
284
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InputMaskedHooks.js","names":["React","useCallback","classnames","cleanNumber","getCurrencySymbol","isTrue","dispatchCustomElementEvent","extendPropsWithContext","keycode","safeSetSelection","TextMask","createNumberMask","InputMaskedContext","isRequestingLocaleSupport","isRequestingNumberMask","correctNumberValue","handlePercentMask","handleCurrencyMask","handleNumberMask","correctCaretPosition","getSoftKeyboardAttributes","handleThousandsSeparator","handleDecimalSeparator","fromJSON","invisibleSpace","useLayoutEffect","window","useEffect","useFilteredProps","props","useContext","mask","number_mask","currency_mask","number_format","mask_options","as_currency","as_number","as_percent","locale","show_mask","show_guide","pipe","keep_char_positions","placeholder_char","attributes","_objectWithoutProperties","_excluded","htmlAttributes","Object","freeze","useTranslation","context","useLocalValue","maskParams","useNumberMaskParams","localValue","setLocalValue","useState","value","useNumberMask","useMask","numberMask","useMaskParams","placeholder","showMask","placeholderChar","showGuide","keepCharPositions","useInputElement","inner_ref","isFn","refHook","useRef","ref","current","inputElementRef","createElement","params","innerRef","_extends","inputRef","inputElement","guide","className","useEventMapping","callEvent","useCallEvent","onBeforeInput","event","onFocus","onBlur","onMouseUp","onMouseDown","onKeyDown","onSubmit","onChange","on_focus","undefined","on_blur","on_key_down","on_submit","on_change","isNumberMask","decimalSeparators","isUnidentified","name","target","selStart","selectionStart","keyCode","which","data","key","disallowLeadingZeroes","replace","test","testValue","slice","length","preventDefault","decimalSymbol","hasDecimalSymbol","includes","allowedDecimals","decimalLimit","allowDecimal","charAtSelection","index","indexOf","thousandsSeparatorSymbol","num","prefix","suffix","decimalSeparator","thousandsSeparator","numberValue","Number","cleanedValue","String","charAt","runCorrectCaretPosition","__getCorrectCaretPosition","result","_currency_mask","_objectSpread","currency","_currency_mask2","currencyDisplay"],"sources":["../../../../src/components/input-masked/InputMaskedHooks.js"],"sourcesContent":["/**\n * Web InputMasked Component\n *\n */\n\nimport React, { useCallback } from 'react'\nimport classnames from 'classnames'\nimport {\n cleanNumber,\n getCurrencySymbol,\n} from '../number-format/NumberUtils'\nimport {\n isTrue,\n dispatchCustomElementEvent,\n extendPropsWithContext,\n keycode,\n} from '../../shared/component-helper'\nimport { safeSetSelection } from './text-mask/createTextMaskInputElement'\n\nimport TextMask from './TextMask'\nimport createNumberMask from './addons/createNumberMask'\nimport InputMaskedContext from './InputMaskedContext'\n\nimport {\n isRequestingLocaleSupport,\n isRequestingNumberMask,\n correctNumberValue,\n handlePercentMask,\n handleCurrencyMask,\n handleNumberMask,\n correctCaretPosition,\n getSoftKeyboardAttributes,\n handleThousandsSeparator,\n handleDecimalSeparator,\n fromJSON,\n invisibleSpace,\n} from './InputMaskedUtils'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\n/**\n * Takes all component properties and filters out all internal used properties\n *\n * @returns object {props, htmlAttributes}\n */\nexport const useFilteredProps = () => {\n const { props } = React.useContext(InputMaskedContext)\n\n const {\n mask, // eslint-disable-line\n number_mask, // eslint-disable-line\n currency_mask, // eslint-disable-line\n number_format, // eslint-disable-line\n mask_options, // eslint-disable-line\n as_currency, // eslint-disable-line\n as_number, // eslint-disable-line\n as_percent, // eslint-disable-line\n locale, // eslint-disable-line\n show_mask, // eslint-disable-line\n show_guide, // eslint-disable-line\n pipe, // eslint-disable-line\n keep_char_positions, // eslint-disable-line\n placeholder_char, // eslint-disable-line\n\n // Get get rest of possible attributes\n ...attributes\n } = props\n\n return { props, htmlAttributes: Object.freeze(attributes) }\n}\n\n/**\n * Returns locale from either component or context\n *\n * @returns string\n */\nexport const useTranslation = () => {\n const { props, context } = React.useContext(InputMaskedContext)\n\n let { locale } = props\n if (!locale && context?.locale) {\n locale = context.locale\n }\n\n return locale\n}\n\n/**\n * Handle internal value state\n *\n * It handles both the value state given as a prop form outside,\n * along with the current written and internal value.\n *\n * @returns object with internal value state and state setter\n */\nexport const useLocalValue = () => {\n const { props, context } = React.useContext(InputMaskedContext)\n const maskParams = useNumberMaskParams() || {}\n const locale = useTranslation()\n\n const [localValue, setLocalValue] = React.useState(() =>\n correctNumberValue({\n locale,\n props,\n maskParams,\n })\n )\n\n /**\n * Use an effect here, just;\n * because when a property gets changed from outside\n */\n React.useEffect(() => {\n const value = correctNumberValue({\n localValue,\n locale,\n props,\n maskParams,\n })\n\n setLocalValue(value)\n\n // Do not set \"localValue\" and \"maskParams\" here\n }, [props, context, locale]) // eslint-disable-line\n\n return { localValue, setLocalValue }\n}\n\n/**\n * Create createNumberMask if number mask parameters exists\n *\n * @returns mask function\n */\nexport const useNumberMask = () => {\n const maskParams = useNumberMaskParams()\n const { props } = React.useContext(InputMaskedContext)\n\n if (!maskParams || !isRequestingNumberMask(props)) {\n return null\n }\n\n const mask = createNumberMask(maskParams)\n\n mask.maskParams = maskParams\n\n return mask\n}\n\n/**\n * Returns either internal mask or given property mask\n *\n * @returns mask function\n */\nexport const useMask = () => {\n const { props } = React.useContext(InputMaskedContext)\n\n const numberMask = useNumberMask()\n if (numberMask) {\n return numberMask\n }\n\n return props.mask\n}\n\n/**\n * Returns the final mask params\n *\n * @returns mask params\n */\nexport const useMaskParams = () => {\n const { props } = React.useContext(InputMaskedContext)\n\n const {\n keep_char_positions,\n show_guide,\n show_mask,\n placeholder_char,\n placeholder,\n } = props\n\n const mask = useMask()\n const maskParams = useNumberMaskParams() || {}\n\n maskParams.showMask = !placeholder && isTrue(show_mask)\n\n // Revalidated placeholder char to a zero width space\n maskParams.placeholderChar = placeholder_char\n if (typeof mask?.placeholderChar !== 'undefined') {\n maskParams.placeholderChar = mask.placeholderChar\n }\n if (maskParams.placeholderChar === null) {\n maskParams.placeholderChar = invisibleSpace\n }\n\n if (typeof mask?.showMask !== 'undefined') {\n maskParams.showMask = mask.showMask\n }\n\n maskParams.showGuide = isTrue(show_guide)\n maskParams.keepCharPositions = isTrue(keep_char_positions)\n\n return maskParams\n}\n\n/**\n * Handle the TextMask dependency\n *\n * @returns React Element\n */\nexport const useInputElement = () => {\n const { props } = React.useContext(InputMaskedContext)\n const { pipe, inner_ref } = props\n\n const mask = useMask()\n const { showMask, showGuide, placeholderChar, keepCharPositions } =\n useMaskParams()\n\n const isFn = typeof inner_ref === 'function'\n const refHook = React.useRef()\n const ref = (!isFn && inner_ref) || refHook\n\n useLayoutEffect(() => {\n if (isFn) {\n inner_ref?.(ref.current)\n }\n }, [inner_ref, isFn, ref])\n\n // Create the actual input element\n const inputElementRef = React.useRef(<input ref={ref} />)\n\n return useCallback(\n (params, innerRef) => {\n // Set ref for Eufemia input\n innerRef.current = ref.current\n\n return (\n <TextMask\n inputRef={ref}\n inputElement={inputElementRef.current}\n pipe={pipe}\n mask={mask || createNumberMask()}\n showMask={showMask}\n guide={showGuide}\n keepCharPositions={keepCharPositions}\n placeholderChar={placeholderChar}\n {...getSoftKeyboardAttributes(mask)}\n {...params}\n className={classnames(\n params.className,\n showMask &&\n showGuide &&\n placeholderChar &&\n placeholderChar !== invisibleSpace &&\n 'dnb-input-masked--guide' // will use --font-family-monospace\n )}\n />\n )\n },\n [\n keepCharPositions,\n mask,\n pipe,\n placeholderChar,\n ref,\n showGuide,\n showMask,\n ]\n )\n}\n\n/**\n * Will map some events we need to map during typing\n *\n * @param {object} param0\n * @property {function} setLocalValue setState handler\n * @returns object of events to handle\n */\nexport const useEventMapping = ({ setLocalValue }) => {\n const callEvent = useCallEvent({ setLocalValue })\n\n return {\n onBeforeInput: (event) => callEvent({ event }, 'on_before_input'),\n onFocus: (params) => callEvent(params, 'on_focus'),\n onBlur: (params) => callEvent(params, 'on_blur'),\n onMouseUp: (event) => callEvent({ event }, 'on_mouse_up'),\n onMouseDown: (event) => callEvent({ event }, 'on_mouse_down'),\n onKeyDown: (params) => callEvent(params, 'on_key_down'),\n onSubmit: (params) => callEvent(params, 'on_submit'),\n onChange: (params) => callEvent(params, 'on_change'),\n\n on_focus: undefined,\n on_blur: undefined,\n on_key_down: undefined,\n on_submit: undefined,\n on_change: undefined,\n }\n}\n\n/**\n * Will map some events we need to map during typing\n *\n * @param {object} param0\n * @property {function} setLocalValue setState handler\n * @returns event handler function\n */\nconst useCallEvent = ({ setLocalValue }) => {\n const { props } = React.useContext(InputMaskedContext)\n const maskParams = useMaskParams()\n const isNumberMask = useNumberMask()\n\n // Source: https://en.wikipedia.org/wiki/Decimal_separator\n const decimalSeparators = /[,.'·]/\n let isUnidentified = false\n\n const callEvent = ({ event, value }, name) => {\n value = value || event.target.value\n const selStart = event.target.selectionStart\n let keyCode = keycode(event)\n\n // Android issue: https://bugs.chromium.org/p/chromium/issues/detail?id=118639\n if (\n name === 'on_key_down' &&\n (event.which === 229 || keyCode === undefined)\n ) {\n isUnidentified = true\n }\n\n // Android issue: https://bugs.chromium.org/p/chromium/issues/detail?id=118639\n // so we use this solution instead\n if (\n isUnidentified &&\n name === 'on_before_input' &&\n typeof event?.data !== 'undefined'\n ) {\n name = 'on_key_down'\n keyCode = event.data\n isUnidentified = false\n }\n\n // Add support for \"await userEvent.type(input, '0...')\"\n if (isUnidentified && event.key === '0') {\n keyCode = '0'\n isUnidentified = false\n }\n\n // Prevent entering a leading zero\n if (\n name === 'on_key_down' &&\n !isUnidentified &&\n maskParams?.disallowLeadingZeroes &&\n (keyCode === '0' ||\n keyCode === 'numpad 0' ||\n (value.replace(/[^\\d]/g, '') === '' &&\n decimalSeparators.test(keyCode)))\n ) {\n const testValue = (\n value.slice(0, selStart) +\n '0' +\n value.slice(selStart + 1, value.length)\n ).replace(/[^\\d]/g, '')\n\n if (/^0/.test(testValue)) {\n event.preventDefault()\n }\n }\n\n if (\n name === 'on_key_down' &&\n isNumberMask &&\n !isUnidentified &&\n maskParams?.decimalSymbol\n ) {\n const hasDecimalSymbol = value.includes(maskParams.decimalSymbol)\n const allowedDecimals =\n maskParams.decimalLimit > 0 || maskParams.allowDecimal !== false\n\n if (!allowedDecimals && decimalSeparators.test(keyCode)) {\n event.preventDefault()\n }\n\n const charAtSelection = value.slice(selStart, selStart + 1)\n\n if (allowedDecimals) {\n // if we have already a decimal ...\n if (hasDecimalSymbol && decimalSeparators.test(keyCode)) {\n // ... we set the cursor on after the decimalSeparators\n if (decimalSeparators.test(charAtSelection)) {\n const index = value.indexOf(maskParams.decimalSymbol)\n if (index > -1) {\n safeSetSelection(event.target, index + 1)\n }\n }\n\n // ... we do not allow to type another\n event.preventDefault()\n }\n\n // replace other decimal\n else if (\n !hasDecimalSymbol &&\n keyCode !== maskParams.decimalSymbol &&\n decimalSeparators.test(keyCode)\n ) {\n value = value.slice(0, selStart)\n setLocalValue(value + maskParams.decimalSymbol)\n event.target.value = value + maskParams.decimalSymbol\n event.preventDefault()\n }\n }\n\n // move cursor to right if key is delete and char at selection is thousand separator\n if (\n keyCode === 'delete' &&\n charAtSelection === (maskParams.thousandsSeparatorSymbol || ' ')\n ) {\n safeSetSelection(event.target, selStart + 1)\n event.preventDefault()\n }\n }\n\n let num = cleanNumber(value, {\n prefix: maskParams.prefix,\n suffix: maskParams.suffix,\n decimalSeparator: maskParams.decimalSymbol || ',',\n thousandsSeparator: maskParams.thousandsSeparatorSymbol || ' ',\n })\n\n // We don't want to return NaN, so we set it to 0\n if (num === '-') {\n num = -0\n }\n\n const numberValue = Number(num)\n\n // Return '' (empty string) when the user has entered something invalid\n const cleanedValue =\n numberValue === 0 && String(num).charAt(0) !== '0' ? '' : num\n\n switch (name) {\n case 'on_focus':\n case 'on_key_down':\n case 'on_mouse_down':\n case 'on_mouse_up':\n event.target.runCorrectCaretPosition = () =>\n correctCaretPosition(event.target, maskParams, props)\n if (!event.target.__getCorrectCaretPosition) {\n event.target.runCorrectCaretPosition()\n }\n break\n }\n\n const result = dispatchCustomElementEvent(props, name, {\n event,\n value,\n numberValue,\n cleanedValue,\n })\n\n if (name === 'on_change') {\n setLocalValue(value)\n }\n\n return result\n }\n\n return callEvent\n}\n\n/**\n * Returns number mask parameters if requested by the component properties\n *\n * @returns object of number mask parameter\n */\nconst useNumberMaskParams = () => {\n const { props } = React.useContext(InputMaskedContext)\n const locale = useTranslation()\n\n if (!isRequestingNumberMask(props)) {\n return { ...fromJSON(props.mask_options) }\n }\n\n let { number_mask, currency_mask, mask_options } = props\n const { as_number, as_percent, as_currency, value } = props\n\n mask_options = fromJSON(mask_options)\n number_mask = isTrue(number_mask) ? {} : fromJSON(number_mask)\n currency_mask = isTrue(currency_mask)\n ? {}\n : fromJSON(currency_mask, {\n currency: currency_mask,\n })\n if (!currency_mask?.currency) {\n delete currency_mask.currency\n }\n\n if (isRequestingLocaleSupport(props)) {\n const thousandsSeparatorSymbol = handleThousandsSeparator(locale)\n const decimalSymbol = handleDecimalSeparator(locale)\n\n if (isTrue(as_number) || isTrue(as_percent)) {\n number_mask = extendPropsWithContext(number_mask, null, {\n decimalSymbol,\n thousandsSeparatorSymbol,\n })\n } else if (as_currency) {\n currency_mask = extendPropsWithContext(currency_mask, null, {\n decimalSymbol,\n thousandsSeparatorSymbol,\n currency: getCurrencySymbol(\n locale,\n typeof as_currency === 'string' ? as_currency : null,\n currency_mask?.currencyDisplay,\n value\n ),\n })\n }\n }\n\n let maskParams = null\n\n if (number_mask) {\n maskParams = handleNumberMask({\n mask_options,\n number_mask,\n })\n\n if (isTrue(as_percent)) {\n maskParams = handlePercentMask({ props, locale, maskParams })\n }\n } else if (currency_mask) {\n maskParams = handleCurrencyMask({\n mask_options,\n currency_mask,\n })\n }\n\n return maskParams\n}\n"],"mappings":";;;;;;AAKA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,WAAW,EACXC,iBAAiB,QACZ,8BAA8B;AACrC,SACEC,MAAM,EACNC,0BAA0B,EAC1BC,sBAAsB,EACtBC,OAAO,QACF,+BAA+B;AACtC,SAASC,gBAAgB,QAAQ,wCAAwC;AAEzE,OAAOC,QAAQ,MAAM,YAAY;AACjC,OAAOC,gBAAgB,MAAM,2BAA2B;AACxD,OAAOC,kBAAkB,MAAM,sBAAsB;AAErD,SACEC,yBAAyB,EACzBC,sBAAsB,EACtBC,kBAAkB,EAClBC,iBAAiB,EACjBC,kBAAkB,EAClBC,gBAAgB,EAChBC,oBAAoB,EACpBC,yBAAyB,EACzBC,wBAAwB,EACxBC,sBAAsB,EACtBC,QAAQ,EACRC,cAAc,QACT,oBAAoB;AAG3B,MAAMC,eAAe,GACnB,OAAOC,MAAM,KAAK,WAAW,GAAG1B,KAAK,CAAC2B,SAAS,GAAG3B,KAAK,CAACyB,eAAe;AAOzE,OAAO,MAAMG,gBAAgB,GAAGA,CAAA,KAAM;EACpC,MAAM;IAAEC;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EAEtD,MAAM;MACJmB,IAAI;MACJC,WAAW;MACXC,aAAa;MACbC,aAAa;MACbC,YAAY;MACZC,WAAW;MACXC,SAAS;MACTC,UAAU;MACVC,MAAM;MACNC,SAAS;MACTC,UAAU;MACVC,IAAI;MACJC,mBAAmB;MACnBC;IAIF,CAAC,GAAGf,KAAK;IADJgB,UAAU,GAAAC,wBAAA,CACXjB,KAAK,EAAAkB,SAAA;EAET,OAAO;IAAElB,KAAK;IAAEmB,cAAc,EAAEC,MAAM,CAACC,MAAM,CAACL,UAAU;EAAE,CAAC;AAC7D,CAAC;AAOD,OAAO,MAAMM,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAM;IAAEtB,KAAK;IAAEuB;EAAQ,CAAC,GAAGpD,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EAE/D,IAAI;IAAE2B;EAAO,CAAC,GAAGV,KAAK;EACtB,IAAI,CAACU,MAAM,IAAIa,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEb,MAAM,EAAE;IAC9BA,MAAM,GAAGa,OAAO,CAACb,MAAM;EACzB;EAEA,OAAOA,MAAM;AACf,CAAC;AAUD,OAAO,MAAMc,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAM;IAAExB,KAAK;IAAEuB;EAAQ,CAAC,GAAGpD,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EAC/D,MAAM0C,UAAU,GAAGC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC;EAC9C,MAAMhB,MAAM,GAAGY,cAAc,CAAC,CAAC;EAE/B,MAAM,CAACK,UAAU,EAAEC,aAAa,CAAC,GAAGzD,KAAK,CAAC0D,QAAQ,CAAC,MACjD3C,kBAAkB,CAAC;IACjBwB,MAAM;IACNV,KAAK;IACLyB;EACF,CAAC,CACH,CAAC;EAMDtD,KAAK,CAAC2B,SAAS,CAAC,MAAM;IACpB,MAAMgC,KAAK,GAAG5C,kBAAkB,CAAC;MAC/ByC,UAAU;MACVjB,MAAM;MACNV,KAAK;MACLyB;IACF,CAAC,CAAC;IAEFG,aAAa,CAACE,KAAK,CAAC;EAGtB,CAAC,EAAE,CAAC9B,KAAK,EAAEuB,OAAO,EAAEb,MAAM,CAAC,CAAC;EAE5B,OAAO;IAAEiB,UAAU;IAAEC;EAAc,CAAC;AACtC,CAAC;AAOD,OAAO,MAAMG,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAMN,UAAU,GAAGC,mBAAmB,CAAC,CAAC;EACxC,MAAM;IAAE1B;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EAEtD,IAAI,CAAC0C,UAAU,IAAI,CAACxC,sBAAsB,CAACe,KAAK,CAAC,EAAE;IACjD,OAAO,IAAI;EACb;EAEA,MAAME,IAAI,GAAGpB,gBAAgB,CAAC2C,UAAU,CAAC;EAEzCvB,IAAI,CAACuB,UAAU,GAAGA,UAAU;EAE5B,OAAOvB,IAAI;AACb,CAAC;AAOD,OAAO,MAAM8B,OAAO,GAAGA,CAAA,KAAM;EAC3B,MAAM;IAAEhC;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EAEtD,MAAMkD,UAAU,GAAGF,aAAa,CAAC,CAAC;EAClC,IAAIE,UAAU,EAAE;IACd,OAAOA,UAAU;EACnB;EAEA,OAAOjC,KAAK,CAACE,IAAI;AACnB,CAAC;AAOD,OAAO,MAAMgC,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAM;IAAElC;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EAEtD,MAAM;IACJ+B,mBAAmB;IACnBF,UAAU;IACVD,SAAS;IACTI,gBAAgB;IAChBoB;EACF,CAAC,GAAGnC,KAAK;EAET,MAAME,IAAI,GAAG8B,OAAO,CAAC,CAAC;EACtB,MAAMP,UAAU,GAAGC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC;EAE9CD,UAAU,CAACW,QAAQ,GAAG,CAACD,WAAW,IAAI3D,MAAM,CAACmC,SAAS,CAAC;EAGvDc,UAAU,CAACY,eAAe,GAAGtB,gBAAgB;EAC7C,IAAI,QAAOb,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmC,eAAe,MAAK,WAAW,EAAE;IAChDZ,UAAU,CAACY,eAAe,GAAGnC,IAAI,CAACmC,eAAe;EACnD;EACA,IAAIZ,UAAU,CAACY,eAAe,KAAK,IAAI,EAAE;IACvCZ,UAAU,CAACY,eAAe,GAAG1C,cAAc;EAC7C;EAEA,IAAI,QAAOO,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEkC,QAAQ,MAAK,WAAW,EAAE;IACzCX,UAAU,CAACW,QAAQ,GAAGlC,IAAI,CAACkC,QAAQ;EACrC;EAEAX,UAAU,CAACa,SAAS,GAAG9D,MAAM,CAACoC,UAAU,CAAC;EACzCa,UAAU,CAACc,iBAAiB,GAAG/D,MAAM,CAACsC,mBAAmB,CAAC;EAE1D,OAAOW,UAAU;AACnB,CAAC;AAOD,OAAO,MAAMe,eAAe,GAAGA,CAAA,KAAM;EACnC,MAAM;IAAExC;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EACtD,MAAM;IAAE8B,IAAI;IAAE4B;EAAU,CAAC,GAAGzC,KAAK;EAEjC,MAAME,IAAI,GAAG8B,OAAO,CAAC,CAAC;EACtB,MAAM;IAAEI,QAAQ;IAAEE,SAAS;IAAED,eAAe;IAAEE;EAAkB,CAAC,GAC/DL,aAAa,CAAC,CAAC;EAEjB,MAAMQ,IAAI,GAAG,OAAOD,SAAS,KAAK,UAAU;EAC5C,MAAME,OAAO,GAAGxE,KAAK,CAACyE,MAAM,CAAC,CAAC;EAC9B,MAAMC,GAAG,GAAI,CAACH,IAAI,IAAID,SAAS,IAAKE,OAAO;EAE3C/C,eAAe,CAAC,MAAM;IACpB,IAAI8C,IAAI,EAAE;MACRD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAGI,GAAG,CAACC,OAAO,CAAC;IAC1B;EACF,CAAC,EAAE,CAACL,SAAS,EAAEC,IAAI,EAAEG,GAAG,CAAC,CAAC;EAG1B,MAAME,eAAe,GAAG5E,KAAK,CAACyE,MAAM,CAACzE,KAAA,CAAA6E,aAAA;IAAOH,GAAG,EAAEA;EAAI,CAAE,CAAC,CAAC;EAEzD,OAAOzE,WAAW,CAChB,CAAC6E,MAAM,EAAEC,QAAQ,KAAK;IAEpBA,QAAQ,CAACJ,OAAO,GAAGD,GAAG,CAACC,OAAO;IAE9B,OACE3E,KAAA,CAAA6E,aAAA,CAACnE,QAAQ,EAAAsE,QAAA;MACPC,QAAQ,EAAEP,GAAI;MACdQ,YAAY,EAAEN,eAAe,CAACD,OAAQ;MACtCjC,IAAI,EAAEA,IAAK;MACXX,IAAI,EAAEA,IAAI,IAAIpB,gBAAgB,CAAC,CAAE;MACjCsD,QAAQ,EAAEA,QAAS;MACnBkB,KAAK,EAAEhB,SAAU;MACjBC,iBAAiB,EAAEA,iBAAkB;MACrCF,eAAe,EAAEA;IAAgB,GAC7B9C,yBAAyB,CAACW,IAAI,CAAC,EAC/B+C,MAAM;MACVM,SAAS,EAAElF,UAAU,CACnB4E,MAAM,CAACM,SAAS,EAChBnB,QAAQ,IACNE,SAAS,IACTD,eAAe,IACfA,eAAe,KAAK1C,cAAc,IAClC,yBACJ;IAAE,EACH,CAAC;EAEN,CAAC,EACD,CACE4C,iBAAiB,EACjBrC,IAAI,EACJW,IAAI,EACJwB,eAAe,EACfQ,GAAG,EACHP,SAAS,EACTF,QAAQ,CAEZ,CAAC;AACH,CAAC;AASD,OAAO,MAAMoB,eAAe,GAAGA,CAAC;EAAE5B;AAAc,CAAC,KAAK;EACpD,MAAM6B,SAAS,GAAGC,YAAY,CAAC;IAAE9B;EAAc,CAAC,CAAC;EAEjD,OAAO;IACL+B,aAAa,EAAGC,KAAK,IAAKH,SAAS,CAAC;MAAEG;IAAM,CAAC,EAAE,iBAAiB,CAAC;IACjEC,OAAO,EAAGZ,MAAM,IAAKQ,SAAS,CAACR,MAAM,EAAE,UAAU,CAAC;IAClDa,MAAM,EAAGb,MAAM,IAAKQ,SAAS,CAACR,MAAM,EAAE,SAAS,CAAC;IAChDc,SAAS,EAAGH,KAAK,IAAKH,SAAS,CAAC;MAAEG;IAAM,CAAC,EAAE,aAAa,CAAC;IACzDI,WAAW,EAAGJ,KAAK,IAAKH,SAAS,CAAC;MAAEG;IAAM,CAAC,EAAE,eAAe,CAAC;IAC7DK,SAAS,EAAGhB,MAAM,IAAKQ,SAAS,CAACR,MAAM,EAAE,aAAa,CAAC;IACvDiB,QAAQ,EAAGjB,MAAM,IAAKQ,SAAS,CAACR,MAAM,EAAE,WAAW,CAAC;IACpDkB,QAAQ,EAAGlB,MAAM,IAAKQ,SAAS,CAACR,MAAM,EAAE,WAAW,CAAC;IAEpDmB,QAAQ,EAAEC,SAAS;IACnBC,OAAO,EAAED,SAAS;IAClBE,WAAW,EAAEF,SAAS;IACtBG,SAAS,EAAEH,SAAS;IACpBI,SAAS,EAAEJ;EACb,CAAC;AACH,CAAC;AASD,MAAMX,YAAY,GAAGA,CAAC;EAAE9B;AAAc,CAAC,KAAK;EAC1C,MAAM;IAAE5B;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EACtD,MAAM0C,UAAU,GAAGS,aAAa,CAAC,CAAC;EAClC,MAAMwC,YAAY,GAAG3C,aAAa,CAAC,CAAC;EAGpC,MAAM4C,iBAAiB,GAAG,QAAQ;EAClC,IAAIC,cAAc,GAAG,KAAK;EAE1B,MAAMnB,SAAS,GAAGA,CAAC;IAAEG,KAAK;IAAE9B;EAAM,CAAC,EAAE+C,IAAI,KAAK;IAC5C/C,KAAK,GAAGA,KAAK,IAAI8B,KAAK,CAACkB,MAAM,CAAChD,KAAK;IACnC,MAAMiD,QAAQ,GAAGnB,KAAK,CAACkB,MAAM,CAACE,cAAc;IAC5C,IAAIC,OAAO,GAAGtG,OAAO,CAACiF,KAAK,CAAC;IAG5B,IACEiB,IAAI,KAAK,aAAa,KACrBjB,KAAK,CAACsB,KAAK,KAAK,GAAG,IAAID,OAAO,KAAKZ,SAAS,CAAC,EAC9C;MACAO,cAAc,GAAG,IAAI;IACvB;IAIA,IACEA,cAAc,IACdC,IAAI,KAAK,iBAAiB,IAC1B,QAAOjB,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEuB,IAAI,MAAK,WAAW,EAClC;MACAN,IAAI,GAAG,aAAa;MACpBI,OAAO,GAAGrB,KAAK,CAACuB,IAAI;MACpBP,cAAc,GAAG,KAAK;IACxB;IAGA,IAAIA,cAAc,IAAIhB,KAAK,CAACwB,GAAG,KAAK,GAAG,EAAE;MACvCH,OAAO,GAAG,GAAG;MACbL,cAAc,GAAG,KAAK;IACxB;IAGA,IACEC,IAAI,KAAK,aAAa,IACtB,CAACD,cAAc,IACfnD,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAE4D,qBAAqB,KAChCJ,OAAO,KAAK,GAAG,IACdA,OAAO,KAAK,UAAU,IACrBnD,KAAK,CAACwD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,IACjCX,iBAAiB,CAACY,IAAI,CAACN,OAAO,CAAE,CAAC,EACrC;MACA,MAAMO,SAAS,GAAG,CAChB1D,KAAK,CAAC2D,KAAK,CAAC,CAAC,EAAEV,QAAQ,CAAC,GACxB,GAAG,GACHjD,KAAK,CAAC2D,KAAK,CAACV,QAAQ,GAAG,CAAC,EAAEjD,KAAK,CAAC4D,MAAM,CAAC,EACvCJ,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;MAEvB,IAAI,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC,EAAE;QACxB5B,KAAK,CAAC+B,cAAc,CAAC,CAAC;MACxB;IACF;IAEA,IACEd,IAAI,KAAK,aAAa,IACtBH,YAAY,IACZ,CAACE,cAAc,IACfnD,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEmE,aAAa,EACzB;MACA,MAAMC,gBAAgB,GAAG/D,KAAK,CAACgE,QAAQ,CAACrE,UAAU,CAACmE,aAAa,CAAC;MACjE,MAAMG,eAAe,GACnBtE,UAAU,CAACuE,YAAY,GAAG,CAAC,IAAIvE,UAAU,CAACwE,YAAY,KAAK,KAAK;MAElE,IAAI,CAACF,eAAe,IAAIpB,iBAAiB,CAACY,IAAI,CAACN,OAAO,CAAC,EAAE;QACvDrB,KAAK,CAAC+B,cAAc,CAAC,CAAC;MACxB;MAEA,MAAMO,eAAe,GAAGpE,KAAK,CAAC2D,KAAK,CAACV,QAAQ,EAAEA,QAAQ,GAAG,CAAC,CAAC;MAE3D,IAAIgB,eAAe,EAAE;QAEnB,IAAIF,gBAAgB,IAAIlB,iBAAiB,CAACY,IAAI,CAACN,OAAO,CAAC,EAAE;UAEvD,IAAIN,iBAAiB,CAACY,IAAI,CAACW,eAAe,CAAC,EAAE;YAC3C,MAAMC,KAAK,GAAGrE,KAAK,CAACsE,OAAO,CAAC3E,UAAU,CAACmE,aAAa,CAAC;YACrD,IAAIO,KAAK,GAAG,CAAC,CAAC,EAAE;cACdvH,gBAAgB,CAACgF,KAAK,CAACkB,MAAM,EAAEqB,KAAK,GAAG,CAAC,CAAC;YAC3C;UACF;UAGAvC,KAAK,CAAC+B,cAAc,CAAC,CAAC;QACxB,CAAC,MAGI,IACH,CAACE,gBAAgB,IACjBZ,OAAO,KAAKxD,UAAU,CAACmE,aAAa,IACpCjB,iBAAiB,CAACY,IAAI,CAACN,OAAO,CAAC,EAC/B;UACAnD,KAAK,GAAGA,KAAK,CAAC2D,KAAK,CAAC,CAAC,EAAEV,QAAQ,CAAC;UAChCnD,aAAa,CAACE,KAAK,GAAGL,UAAU,CAACmE,aAAa,CAAC;UAC/ChC,KAAK,CAACkB,MAAM,CAAChD,KAAK,GAAGA,KAAK,GAAGL,UAAU,CAACmE,aAAa;UACrDhC,KAAK,CAAC+B,cAAc,CAAC,CAAC;QACxB;MACF;MAGA,IACEV,OAAO,KAAK,QAAQ,IACpBiB,eAAe,MAAMzE,UAAU,CAAC4E,wBAAwB,IAAI,GAAG,CAAC,EAChE;QACAzH,gBAAgB,CAACgF,KAAK,CAACkB,MAAM,EAAEC,QAAQ,GAAG,CAAC,CAAC;QAC5CnB,KAAK,CAAC+B,cAAc,CAAC,CAAC;MACxB;IACF;IAEA,IAAIW,GAAG,GAAGhI,WAAW,CAACwD,KAAK,EAAE;MAC3ByE,MAAM,EAAE9E,UAAU,CAAC8E,MAAM;MACzBC,MAAM,EAAE/E,UAAU,CAAC+E,MAAM;MACzBC,gBAAgB,EAAEhF,UAAU,CAACmE,aAAa,IAAI,GAAG;MACjDc,kBAAkB,EAAEjF,UAAU,CAAC4E,wBAAwB,IAAI;IAC7D,CAAC,CAAC;IAGF,IAAIC,GAAG,KAAK,GAAG,EAAE;MACfA,GAAG,GAAG,CAAC,CAAC;IACV;IAEA,MAAMK,WAAW,GAAGC,MAAM,CAACN,GAAG,CAAC;IAG/B,MAAMO,YAAY,GAChBF,WAAW,KAAK,CAAC,IAAIG,MAAM,CAACR,GAAG,CAAC,CAACS,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,GAAGT,GAAG;IAE/D,QAAQzB,IAAI;MACV,KAAK,UAAU;MACf,KAAK,aAAa;MAClB,KAAK,eAAe;MACpB,KAAK,aAAa;QAChBjB,KAAK,CAACkB,MAAM,CAACkC,uBAAuB,GAAG,MACrC1H,oBAAoB,CAACsE,KAAK,CAACkB,MAAM,EAAErD,UAAU,EAAEzB,KAAK,CAAC;QACvD,IAAI,CAAC4D,KAAK,CAACkB,MAAM,CAACmC,yBAAyB,EAAE;UAC3CrD,KAAK,CAACkB,MAAM,CAACkC,uBAAuB,CAAC,CAAC;QACxC;QACA;IACJ;IAEA,MAAME,MAAM,GAAGzI,0BAA0B,CAACuB,KAAK,EAAE6E,IAAI,EAAE;MACrDjB,KAAK;MACL9B,KAAK;MACL6E,WAAW;MACXE;IACF,CAAC,CAAC;IAEF,IAAIhC,IAAI,KAAK,WAAW,EAAE;MACxBjD,aAAa,CAACE,KAAK,CAAC;IACtB;IAEA,OAAOoF,MAAM;EACf,CAAC;EAED,OAAOzD,SAAS;AAClB,CAAC;AAOD,MAAM/B,mBAAmB,GAAGA,CAAA,KAAM;EAAA,IAAAyF,cAAA;EAChC,MAAM;IAAEnH;EAAM,CAAC,GAAG7B,KAAK,CAAC8B,UAAU,CAAClB,kBAAkB,CAAC;EACtD,MAAM2B,MAAM,GAAGY,cAAc,CAAC,CAAC;EAE/B,IAAI,CAACrC,sBAAsB,CAACe,KAAK,CAAC,EAAE;IAClC,OAAAoH,aAAA,KAAY1H,QAAQ,CAACM,KAAK,CAACM,YAAY,CAAC;EAC1C;EAEA,IAAI;IAAEH,WAAW;IAAEC,aAAa;IAAEE;EAAa,CAAC,GAAGN,KAAK;EACxD,MAAM;IAAEQ,SAAS;IAAEC,UAAU;IAAEF,WAAW;IAAEuB;EAAM,CAAC,GAAG9B,KAAK;EAE3DM,YAAY,GAAGZ,QAAQ,CAACY,YAAY,CAAC;EACrCH,WAAW,GAAG3B,MAAM,CAAC2B,WAAW,CAAC,GAAG,CAAC,CAAC,GAAGT,QAAQ,CAACS,WAAW,CAAC;EAC9DC,aAAa,GAAG5B,MAAM,CAAC4B,aAAa,CAAC,GACjC,CAAC,CAAC,GACFV,QAAQ,CAACU,aAAa,EAAE;IACtBiH,QAAQ,EAAEjH;EACZ,CAAC,CAAC;EACN,IAAI,GAAA+G,cAAA,GAAC/G,aAAa,cAAA+G,cAAA,eAAbA,cAAA,CAAeE,QAAQ,GAAE;IAC5B,OAAOjH,aAAa,CAACiH,QAAQ;EAC/B;EAEA,IAAIrI,yBAAyB,CAACgB,KAAK,CAAC,EAAE;IACpC,MAAMqG,wBAAwB,GAAG7G,wBAAwB,CAACkB,MAAM,CAAC;IACjE,MAAMkF,aAAa,GAAGnG,sBAAsB,CAACiB,MAAM,CAAC;IAEpD,IAAIlC,MAAM,CAACgC,SAAS,CAAC,IAAIhC,MAAM,CAACiC,UAAU,CAAC,EAAE;MAC3CN,WAAW,GAAGzB,sBAAsB,CAACyB,WAAW,EAAE,IAAI,EAAE;QACtDyF,aAAa;QACbS;MACF,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI9F,WAAW,EAAE;MAAA,IAAA+G,eAAA;MACtBlH,aAAa,GAAG1B,sBAAsB,CAAC0B,aAAa,EAAE,IAAI,EAAE;QAC1DwF,aAAa;QACbS,wBAAwB;QACxBgB,QAAQ,EAAE9I,iBAAiB,CACzBmC,MAAM,EACN,OAAOH,WAAW,KAAK,QAAQ,GAAGA,WAAW,GAAG,IAAI,GAAA+G,eAAA,GACpDlH,aAAa,cAAAkH,eAAA,uBAAbA,eAAA,CAAeC,eAAe,EAC9BzF,KACF;MACF,CAAC,CAAC;IACJ;EACF;EAEA,IAAIL,UAAU,GAAG,IAAI;EAErB,IAAItB,WAAW,EAAE;IACfsB,UAAU,GAAGpC,gBAAgB,CAAC;MAC5BiB,YAAY;MACZH;IACF,CAAC,CAAC;IAEF,IAAI3B,MAAM,CAACiC,UAAU,CAAC,EAAE;MACtBgB,UAAU,GAAGtC,iBAAiB,CAAC;QAAEa,KAAK;QAAEU,MAAM;QAAEe;MAAW,CAAC,CAAC;IAC/D;EACF,CAAC,MAAM,IAAIrB,aAAa,EAAE;IACxBqB,UAAU,GAAGrC,kBAAkB,CAAC;MAC9BkB,YAAY;MACZF;IACF,CAAC,CAAC;EACJ;EAEA,OAAOqB,UAAU;AACnB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"InputMaskedHooks.js","names":["React","useCallback","classnames","cleanNumber","getCurrencySymbol","isTrue","dispatchCustomElementEvent","extendPropsWithContext","keycode","safeSetSelection","TextMask","createNumberMask","InputMaskedContext","isRequestingLocaleSupport","isRequestingNumberMask","correctNumberValue","handlePercentMask","handleCurrencyMask","handleNumberMask","correctCaretPosition","getSoftKeyboardAttributes","handleThousandsSeparator","handleDecimalSeparator","fromJSON","invisibleSpace","useLayoutEffect","window","useEffect","useFilteredProps","props","useContext","mask","number_mask","currency_mask","number_format","mask_options","as_currency","as_number","as_percent","locale","show_mask","show_guide","pipe","keep_char_positions","placeholder_char","attributes","_objectWithoutProperties","_excluded","htmlAttributes","Object","freeze","useTranslation","context","useLocalValue","maskParams","useNumberMaskParams","localValue","setLocalValue","useState","value","useNumberMask","useMask","numberMask","useMaskParams","placeholder","showMask","placeholderChar","showGuide","keepCharPositions","useInputElement","inner_ref","isFn","refHook","useRef","ref","current","inputElementRef","createElement","params","innerRef","_extends","inputRef","inputElement","guide","className","useEventMapping","callEvent","useCallEvent","onBeforeInput","event","onFocus","onBlur","onMouseUp","onMouseDown","onKeyDown","onSubmit","onChange","on_focus","undefined","on_blur","on_key_down","on_submit","on_change","maskParamsRef","isNumberMask","decimalSeparators","isUnidentified","name","target","selStart","selectionStart","keyCode","which","data","key","disallowLeadingZeroes","replace","test","testValue","slice","length","preventDefault","decimalSymbol","hasDecimalSymbol","includes","allowedDecimals","decimalLimit","allowDecimal","charAtSelection","index","indexOf","thousandsSeparatorSymbol","num","prefix","suffix","decimalSeparator","thousandsSeparator","numberValue","Number","cleanedValue","String","charAt","runCorrectCaretPosition","__getCorrectCaretPosition","result","_currency_mask","_objectSpread","currency","_currency_mask2","currencyDisplay"],"sources":["../../../../src/components/input-masked/InputMaskedHooks.js"],"sourcesContent":["/**\n * Web InputMasked Component\n *\n */\n\nimport React, { useCallback } from 'react'\nimport classnames from 'classnames'\nimport {\n cleanNumber,\n getCurrencySymbol,\n} from '../number-format/NumberUtils'\nimport {\n isTrue,\n dispatchCustomElementEvent,\n extendPropsWithContext,\n keycode,\n} from '../../shared/component-helper'\nimport { safeSetSelection } from './text-mask/createTextMaskInputElement'\n\nimport TextMask from './TextMask'\nimport createNumberMask from './addons/createNumberMask'\nimport InputMaskedContext from './InputMaskedContext'\n\nimport {\n isRequestingLocaleSupport,\n isRequestingNumberMask,\n correctNumberValue,\n handlePercentMask,\n handleCurrencyMask,\n handleNumberMask,\n correctCaretPosition,\n getSoftKeyboardAttributes,\n handleThousandsSeparator,\n handleDecimalSeparator,\n fromJSON,\n invisibleSpace,\n} from './InputMaskedUtils'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\n/**\n * Takes all component properties and filters out all internal used properties\n *\n * @returns object {props, htmlAttributes}\n */\nexport const useFilteredProps = () => {\n const { props } = React.useContext(InputMaskedContext)\n\n const {\n mask, // eslint-disable-line\n number_mask, // eslint-disable-line\n currency_mask, // eslint-disable-line\n number_format, // eslint-disable-line\n mask_options, // eslint-disable-line\n as_currency, // eslint-disable-line\n as_number, // eslint-disable-line\n as_percent, // eslint-disable-line\n locale, // eslint-disable-line\n show_mask, // eslint-disable-line\n show_guide, // eslint-disable-line\n pipe, // eslint-disable-line\n keep_char_positions, // eslint-disable-line\n placeholder_char, // eslint-disable-line\n\n // Get get rest of possible attributes\n ...attributes\n } = props\n\n return { props, htmlAttributes: Object.freeze(attributes) }\n}\n\n/**\n * Returns locale from either component or context\n *\n * @returns string\n */\nexport const useTranslation = () => {\n const { props, context } = React.useContext(InputMaskedContext)\n\n let { locale } = props\n if (!locale && context?.locale) {\n locale = context.locale\n }\n\n return locale\n}\n\n/**\n * Handle internal value state\n *\n * It handles both the value state given as a prop form outside,\n * along with the current written and internal value.\n *\n * @returns object with internal value state and state setter\n */\nexport const useLocalValue = () => {\n const { props, context } = React.useContext(InputMaskedContext)\n const maskParams = useNumberMaskParams() || {}\n const locale = useTranslation()\n\n const [localValue, setLocalValue] = React.useState(() => {\n return correctNumberValue({\n locale,\n props,\n maskParams,\n })\n })\n\n /**\n * Use an effect here, just;\n * because when a property gets changed from outside\n */\n React.useEffect(() => {\n const value = correctNumberValue({\n localValue,\n locale,\n props,\n maskParams,\n })\n\n setLocalValue(value)\n\n // Do not set \"localValue\" and \"maskParams\" here\n }, [props, context, locale]) // eslint-disable-line\n\n return { localValue, setLocalValue }\n}\n\n/**\n * Create createNumberMask if number mask parameters exists\n *\n * @returns mask function\n */\nexport const useNumberMask = () => {\n const maskParams = useNumberMaskParams()\n const { props } = React.useContext(InputMaskedContext)\n\n if (!maskParams || !isRequestingNumberMask(props)) {\n return null\n }\n\n const mask = createNumberMask(maskParams)\n\n mask.maskParams = maskParams\n\n return mask\n}\n\n/**\n * Returns either internal mask or given property mask\n *\n * @returns mask function\n */\nexport const useMask = () => {\n const { props } = React.useContext(InputMaskedContext)\n\n const numberMask = useNumberMask()\n if (numberMask) {\n return numberMask\n }\n\n return props.mask\n}\n\n/**\n * Returns the final mask params\n *\n * @returns mask params\n */\nexport const useMaskParams = () => {\n const { props } = React.useContext(InputMaskedContext)\n\n const {\n keep_char_positions,\n show_guide,\n show_mask,\n placeholder_char,\n placeholder,\n } = props\n\n const mask = useMask()\n const maskParams = useNumberMaskParams() || {}\n\n maskParams.showMask = !placeholder && isTrue(show_mask)\n\n // Revalidated placeholder char to a zero width space\n maskParams.placeholderChar = placeholder_char\n if (typeof mask?.placeholderChar !== 'undefined') {\n maskParams.placeholderChar = mask.placeholderChar\n }\n if (maskParams.placeholderChar === null) {\n maskParams.placeholderChar = invisibleSpace\n }\n\n if (typeof mask?.showMask !== 'undefined') {\n maskParams.showMask = mask.showMask\n }\n\n maskParams.showGuide = isTrue(show_guide)\n maskParams.keepCharPositions = isTrue(keep_char_positions)\n\n return maskParams\n}\n\n/**\n * Handle the TextMask dependency\n *\n * @returns React Element\n */\nexport const useInputElement = () => {\n const { props } = React.useContext(InputMaskedContext)\n const { pipe, inner_ref } = props\n\n const mask = useMask()\n const { showMask, showGuide, placeholderChar, keepCharPositions } =\n useMaskParams()\n\n const isFn = typeof inner_ref === 'function'\n const refHook = React.useRef()\n const ref = (!isFn && inner_ref) || refHook\n\n useLayoutEffect(() => {\n if (isFn) {\n inner_ref?.(ref.current)\n }\n }, [inner_ref, isFn, ref])\n\n // Create the actual input element\n const inputElementRef = React.useRef(<input ref={ref} />)\n\n return useCallback(\n (params, innerRef) => {\n // Set ref for Eufemia input\n innerRef.current = ref.current\n\n return (\n <TextMask\n inputRef={ref}\n inputElement={inputElementRef.current}\n pipe={pipe}\n mask={mask || createNumberMask()}\n showMask={showMask}\n guide={showGuide}\n keepCharPositions={keepCharPositions}\n placeholderChar={placeholderChar}\n {...getSoftKeyboardAttributes(mask)}\n {...params}\n className={classnames(\n params.className,\n showMask &&\n showGuide &&\n placeholderChar &&\n placeholderChar !== invisibleSpace &&\n 'dnb-input-masked--guide' // will use --font-family-monospace\n )}\n />\n )\n },\n [\n keepCharPositions,\n mask,\n pipe,\n placeholderChar,\n ref,\n showGuide,\n showMask,\n ]\n )\n}\n\n/**\n * Will map some events we need to map during typing\n *\n * @param {object} param0\n * @property {function} setLocalValue setState handler\n * @returns object of events to handle\n */\nexport const useEventMapping = ({ setLocalValue }) => {\n const callEvent = useCallEvent({ setLocalValue })\n\n return {\n onBeforeInput: (event) => callEvent({ event }, 'on_before_input'),\n onFocus: (params) => callEvent(params, 'on_focus'),\n onBlur: (params) => callEvent(params, 'on_blur'),\n onMouseUp: (event) => callEvent({ event }, 'on_mouse_up'),\n onMouseDown: (event) => callEvent({ event }, 'on_mouse_down'),\n onKeyDown: (params) => callEvent(params, 'on_key_down'),\n onSubmit: (params) => callEvent(params, 'on_submit'),\n onChange: (params) => callEvent(params, 'on_change'),\n\n on_focus: undefined,\n on_blur: undefined,\n on_key_down: undefined,\n on_submit: undefined,\n on_change: undefined,\n }\n}\n\n/**\n * Will map some events we need to map during typing\n *\n * @param {object} param0\n * @property {function} setLocalValue setState handler\n * @returns event handler function\n */\nconst useCallEvent = ({ setLocalValue }) => {\n const maskParamsRef = React.useRef()\n maskParamsRef.current = useMaskParams()\n\n const { props } = React.useContext(InputMaskedContext)\n const isNumberMask = useNumberMask()\n\n // Source: https://en.wikipedia.org/wiki/Decimal_separator\n const decimalSeparators = /[,.'·]/\n let isUnidentified = false\n\n const callEvent = ({ event, value }, name) => {\n const maskParams = maskParamsRef.current\n value = value || event.target.value\n const selStart = event.target.selectionStart\n let keyCode = keycode(event)\n\n // Android issue: https://bugs.chromium.org/p/chromium/issues/detail?id=118639\n if (\n name === 'on_key_down' &&\n (event.which === 229 || keyCode === undefined)\n ) {\n isUnidentified = true\n }\n\n // Android issue: https://bugs.chromium.org/p/chromium/issues/detail?id=118639\n // so we use this solution instead\n if (\n isUnidentified &&\n name === 'on_before_input' &&\n typeof event?.data !== 'undefined'\n ) {\n name = 'on_key_down'\n keyCode = event.data\n isUnidentified = false\n }\n\n // Add support for \"await userEvent.type(input, '0...')\"\n if (isUnidentified && event.key === '0') {\n keyCode = '0'\n isUnidentified = false\n }\n\n // Prevent entering a leading zero\n if (\n name === 'on_key_down' &&\n !isUnidentified &&\n maskParams?.disallowLeadingZeroes &&\n (keyCode === '0' ||\n keyCode === 'numpad 0' ||\n (value.replace(/[^\\d]/g, '') === '' &&\n decimalSeparators.test(keyCode)))\n ) {\n const testValue = (\n value.slice(0, selStart) +\n '0' +\n value.slice(selStart + 1, value.length)\n ).replace(/[^\\d]/g, '')\n\n if (/^0/.test(testValue)) {\n event.preventDefault()\n }\n }\n\n if (\n name === 'on_key_down' &&\n isNumberMask &&\n !isUnidentified &&\n maskParams?.decimalSymbol\n ) {\n const hasDecimalSymbol = value.includes(maskParams.decimalSymbol)\n const allowedDecimals =\n maskParams.decimalLimit > 0 || maskParams.allowDecimal !== false\n\n if (!allowedDecimals && decimalSeparators.test(keyCode)) {\n event.preventDefault()\n }\n\n const charAtSelection = value.slice(selStart, selStart + 1)\n\n if (allowedDecimals) {\n // if we have already a decimal ...\n if (hasDecimalSymbol && decimalSeparators.test(keyCode)) {\n // ... we set the cursor on after the decimalSeparators\n if (decimalSeparators.test(charAtSelection)) {\n const index = value.indexOf(maskParams.decimalSymbol)\n if (index > -1) {\n safeSetSelection(event.target, index + 1)\n }\n }\n\n // ... we do not allow to type another\n event.preventDefault()\n }\n\n // replace other decimal\n else if (\n !hasDecimalSymbol &&\n keyCode !== maskParams.decimalSymbol &&\n decimalSeparators.test(keyCode)\n ) {\n value = value.slice(0, selStart)\n setLocalValue(value + maskParams.decimalSymbol)\n event.target.value = value + maskParams.decimalSymbol\n event.preventDefault()\n }\n }\n\n // move cursor to right if key is delete and char at selection is thousand separator\n if (\n keyCode === 'delete' &&\n charAtSelection === (maskParams.thousandsSeparatorSymbol || ' ')\n ) {\n safeSetSelection(event.target, selStart + 1)\n event.preventDefault()\n }\n }\n\n let num = cleanNumber(value, {\n prefix: maskParams.prefix,\n suffix: maskParams.suffix,\n decimalSeparator: maskParams.decimalSymbol || ',',\n thousandsSeparator: maskParams.thousandsSeparatorSymbol || ' ',\n })\n\n // We don't want to return NaN, so we set it to 0\n if (num === '-') {\n num = -0\n }\n\n const numberValue = Number(num)\n\n // Return '' (empty string) when the user has entered something invalid\n const cleanedValue =\n numberValue === 0 && String(num).charAt(0) !== '0' ? '' : num\n\n switch (name) {\n case 'on_focus':\n case 'on_key_down':\n case 'on_mouse_down':\n case 'on_mouse_up':\n event.target.runCorrectCaretPosition = () =>\n correctCaretPosition(event.target, maskParamsRef, props)\n if (!event.target.__getCorrectCaretPosition) {\n event.target.runCorrectCaretPosition()\n }\n break\n }\n\n const result = dispatchCustomElementEvent(props, name, {\n event,\n value,\n numberValue,\n cleanedValue,\n })\n\n if (name === 'on_change') {\n setLocalValue(value)\n }\n\n return result\n }\n\n return callEvent\n}\n\n/**\n * Returns number mask parameters if requested by the component properties\n *\n * @returns object of number mask parameter\n */\nconst useNumberMaskParams = () => {\n const { props } = React.useContext(InputMaskedContext)\n const locale = useTranslation()\n\n if (!isRequestingNumberMask(props)) {\n return { ...fromJSON(props.mask_options) }\n }\n\n let { number_mask, currency_mask, mask_options } = props\n const { as_number, as_percent, as_currency, value } = props\n\n mask_options = fromJSON(mask_options)\n number_mask = isTrue(number_mask) ? {} : fromJSON(number_mask)\n currency_mask = isTrue(currency_mask)\n ? {}\n : fromJSON(currency_mask, {\n currency: currency_mask,\n })\n if (!currency_mask?.currency) {\n delete currency_mask.currency\n }\n\n if (isRequestingLocaleSupport(props)) {\n const thousandsSeparatorSymbol = handleThousandsSeparator(locale)\n const decimalSymbol = handleDecimalSeparator(locale)\n\n if (isTrue(as_number) || isTrue(as_percent)) {\n number_mask = extendPropsWithContext(number_mask, null, {\n decimalSymbol,\n thousandsSeparatorSymbol,\n })\n } else if (as_currency) {\n currency_mask = extendPropsWithContext(currency_mask, null, {\n decimalSymbol,\n thousandsSeparatorSymbol,\n currency: getCurrencySymbol(\n locale,\n typeof as_currency === 'string' ? as_currency : null,\n currency_mask?.currencyDisplay,\n value\n ),\n })\n }\n }\n\n let maskParams = null\n\n if (number_mask) {\n maskParams = handleNumberMask({\n mask_options,\n number_mask,\n })\n\n if (isTrue(as_percent)) {\n maskParams = handlePercentMask({ props, locale, maskParams })\n }\n } else if (currency_mask) {\n maskParams = handleCurrencyMask({\n mask_options,\n currency_mask,\n })\n }\n\n return maskParams\n}\n"],"mappings":"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","ignoreList":[]}
@@ -33,7 +33,7 @@ export const invisibleSpace: "​";
33
33
  export function isRequestingLocaleSupport(props: object): boolean;
34
34
  export function isRequestingNumberMask(props: object): boolean;
35
35
  export function correctNumberValue({ localValue, props, locale, maskParams, }: object): string;
36
- export function correctCaretPosition(element: Element, maskParams: any, props: any): void;
36
+ export function correctCaretPosition(element: Element, maskParamsRef: any, props: any): void;
37
37
  export function handlePercentMask({ props, locale, maskParams }: object): any;
38
38
  export function handleCurrencyMask({ mask_options, currency_mask }: object): any;
39
39
  export function handleNumberMask({ mask_options, number_mask }: object): any;
@@ -76,9 +76,10 @@ export const correctNumberValue = ({
76
76
  }
77
77
  return value;
78
78
  };
79
- export const correctCaretPosition = (element, maskParams, props) => {
79
+ export const correctCaretPosition = (element, maskParamsRef, props) => {
80
80
  const correction = () => {
81
81
  try {
82
+ const maskParams = maskParamsRef === null || maskParamsRef === void 0 ? void 0 : maskParamsRef.current;
82
83
  const suffix = maskParams === null || maskParams === void 0 ? void 0 : maskParams.suffix;
83
84
  const prefix = maskParams === null || maskParams === void 0 ? void 0 : maskParams.prefix;
84
85
  const start = element.selectionStart;
@@ -1 +1 @@
1
- {"version":3,"file":"InputMaskedUtils.js","names":["format","getDecimalSeparator","getThousandsSeparator","warn","IS_IOS","safeSetSelection","enableLocaleSupportWhen","enableNumberMaskWhen","invisibleSpace","isRequestingLocaleSupport","props","Object","entries","some","k","v","includes","isRequestingNumberMask","correctNumberValue","localValue","locale","maskParams","value","undefined","String","isNaN","parseFloat","decimalPos","indexOf","integerLimit","limit","integers","split","isNegative","length","decimals","slice","shouldHaveDecimals","allowDecimal","decimalLimit","number_format","options","_objectSpread","decimalSymbol","replace","localNumberValue","numberValue","valueHasDecimal","endsWithDecimal","endsWith","endsWithZeroAndDecimal","startsWith","test","correctCaretPosition","element","correction","suffix","prefix","start","selectionStart","end","selectionEnd","suffixStart","suffixEnd","pos","placeholderChar","prefixStart","prefixEnd","char","mask","chars","l","i","RegExp","n","_mask$test","call","e","window","requestAnimationFrame","handlePercentMask","_String","_String$match","percent","match","handleCurrencyMask","mask_options","currency_mask","givenParams","paramsWithDefaults","showMask","currency","handleNumberMask","number_mask","getSoftKeyboardAttributes","instanceOf","allowNegative","inputMode","handleThousandsSeparator","handleDecimalSeparator","fromJSON","str","fallback","JSON","parse"],"sources":["../../../../src/components/input-masked/InputMaskedUtils.js"],"sourcesContent":["/**\n * Web InputMasked Component\n *\n */\n\nimport {\n format,\n getDecimalSeparator,\n getThousandsSeparator,\n} from '../number-format/NumberUtils'\nimport { warn } from '../../shared/component-helper'\nimport { IS_IOS } from '../../shared/helpers'\nimport { safeSetSelection } from './text-mask/createTextMaskInputElement'\n\nconst enableLocaleSupportWhen = ['as_number', 'as_percent', 'as_currency']\nconst enableNumberMaskWhen = [\n 'as_number',\n 'as_percent',\n 'as_currency',\n 'number_mask',\n 'currency_mask',\n]\n\nexport const invisibleSpace = '\\u200B'\n\n/**\n * Will return true if a prop needs Locale support\n *\n * @param {object} props object with given component props\n * @returns boolean\n */\nexport const isRequestingLocaleSupport = (props) => {\n return Object.entries(props).some(\n ([k, v]) => v && enableLocaleSupportWhen.includes(k)\n )\n}\n\n/**\n * Will return true if a prop will enable the internal NumberMask\n *\n * @param {object} props object with given component props\n * @returns boolean\n */\nexport const isRequestingNumberMask = (props) => {\n return Object.entries(props).some(\n ([k, v]) => v && enableNumberMaskWhen.includes(k)\n )\n}\n\n/**\n * Probably the most complex part of this component\n * It will modify a given value based on certain criteria's\n *\n * @param {object} param0 object with properties\n * @property {string} localValue optional – if given, it will uses its ending to determine of what to return\n * @property {number|string} value component property value\n * @property {object} context Eufemia Context\n * @property {string} locale Eufemia locale (either from component or context)\n * @property {object} maskParams predefined mask parameters\n * @returns string Value\n */\nexport const correctNumberValue = ({\n localValue = null,\n props,\n locale,\n maskParams,\n}) => {\n let value =\n props.value === null\n ? null\n : props.value === undefined\n ? undefined\n : String(props.value)\n\n if (isNaN(parseFloat(value))) {\n return value\n }\n\n const decimalPos = value.indexOf('.')\n\n if (\n maskParams.integerLimit &&\n typeof maskParams.integerLimit === 'number'\n ) {\n const limit = maskParams.integerLimit\n const integers = value.split('.')[0]\n const isNegative = parseFloat(integers) < 0\n if (integers.length - (isNegative ? 1 : 0) > limit) {\n const decimals = decimalPos > 0 ? value.slice(decimalPos) : ''\n value = integers.slice(0, limit + (isNegative ? 1 : 0)) + decimals\n }\n }\n\n const shouldHaveDecimals =\n maskParams.allowDecimal ||\n (maskParams.decimalLimit > 0 && maskParams.allowDecimal !== false)\n\n if (!shouldHaveDecimals) {\n if (decimalPos > -1) {\n value = value.slice(0, decimalPos)\n }\n }\n\n /**\n * This only runs IF \"number_format\" is set – we do not use it else\n */\n if (props.number_format) {\n const options = {\n locale,\n decimals: 0,\n ...props.number_format,\n }\n if (shouldHaveDecimals) {\n options.decimals = maskParams.decimalLimit\n }\n value = format(value, options)\n }\n\n const decimalSymbol = maskParams.decimalSymbol\n value = value.replace('.', decimalSymbol)\n\n if (localValue !== null) {\n const localNumberValue = localValue.replace(/[^\\d,.-]/g, '')\n const numberValue = value.replace(/[^\\d,.-]/g, '')\n const valueHasDecimal = numberValue.includes(decimalSymbol)\n\n if (!valueHasDecimal) {\n const endsWithDecimal = localNumberValue.endsWith(decimalSymbol)\n const endsWithZeroAndDecimal = localNumberValue.endsWith(\n `${decimalSymbol}0`\n )\n\n if (endsWithDecimal) {\n value = `${value}${decimalSymbol}`\n } else if (\n endsWithZeroAndDecimal &&\n !numberValue.endsWith(`${decimalSymbol}0`)\n ) {\n /**\n * When the users has 20,02, then hits \"backspace\",\n * the returned {numberValue} in the onChange event would then be \"20\",\n * but we want it to be 20,0\n */\n value = `${value}${decimalSymbol}0`\n }\n }\n\n /**\n * If the user removes a leading digit and we have left a leading zero.\n *\n * The users enters these steps:\n * Step 1. 1012\n * Step 2. 012 -> user removes 1, now use \"localValue\"\n * Step 3. 2012\n *\n * If a dev listens on_change and sends the number value back in,\n * for this, we also ensure that \"numberValue\" and \"localNumberValue\" is the same.\n */\n if (\n localNumberValue !== '0' &&\n localNumberValue.startsWith('0') &&\n parseFloat(numberValue.replace(decimalSymbol, '.')) ===\n parseFloat(localNumberValue.replace(decimalSymbol, '.'))\n ) {\n value = localValue\n }\n\n /**\n * While typing;\n * If the local value is - or -0 we use it.\n * Also, because of invisible whitespace we remove everything else\n */\n if (/^(-|-0)$/.test(localValue.replace(/[^\\d-0]/g, ''))) {\n value = localValue\n } else if (localNumberValue === '' && numberValue === '0') {\n value = ''\n }\n }\n\n return value\n}\n\n/**\n * This is a helper for setting the cursor position,\n * when it is on a not allowed position\n *\n * @param {Element} element Input Element\n * @param {Object} maskParams Mask parameters, containing eventually suffix or prefix\n */\nexport const correctCaretPosition = (element, maskParams, props) => {\n const correction = () => {\n try {\n const suffix = maskParams?.suffix\n const prefix = maskParams?.prefix\n\n const start = element.selectionStart\n const end = element.selectionEnd\n\n if (start !== end) {\n return // stop here\n }\n\n if (suffix || prefix) {\n const suffixStart = element.value.indexOf(suffix)\n const suffixEnd = suffixStart + suffix?.length\n let pos = undefined\n\n if (start >= suffixStart && start <= suffixEnd) {\n pos = suffixStart\n\n // If there is a placeholder,\n // and the user clicks after the suffix\n // we want the position to be \"before\" the placeholderChar\n if (\n maskParams.placeholderChar !== invisibleSpace &&\n element.value.length - 1 === String(suffix + prefix).length\n ) {\n pos = pos - 1\n }\n } else {\n const prefixStart = element.value.indexOf(prefix)\n const prefixEnd = prefixStart + prefix?.length || 0\n\n if (start >= prefixStart && start <= prefixEnd) {\n pos = prefixEnd\n }\n }\n\n const char = element.value.slice(pos - 1, pos)\n if (char === invisibleSpace) {\n pos = suffixStart - 1\n }\n\n if (!isNaN(parseFloat(pos))) {\n safeSetSelection(element, pos)\n }\n } else if (props?.mask && element.value.length === end) {\n const chars = element.value.split('')\n\n for (let l = chars.length, i = l - 1; i >= 0; i--) {\n const char = chars[i]\n const mask = props.mask[i]\n if (\n char &&\n char !== invisibleSpace &&\n mask instanceof RegExp &&\n mask.test(char)\n ) {\n for (let n = i + 1; n < l; n++) {\n const mask = props.mask[n]\n if (mask?.test?.(char)) {\n safeSetSelection(element, n)\n break\n }\n }\n\n break\n }\n }\n }\n } catch (e) {\n warn(e)\n }\n }\n\n if (typeof window !== 'undefined') {\n window.requestAnimationFrame(correction)\n }\n}\n\n/**\n * Manipulate needed mask for handle: percent\n *\n * @param {object} param0 object with properties\n * @property {object} props Component property\n * @property {string} locale Eufemia locale (either from component or context)\n * @property {object} maskParams predefined mask parameters\n * @returns object maskParams\n */\nexport const handlePercentMask = ({ props, locale, maskParams }) => {\n const value = format(props.value, { locale, percent: true })\n maskParams.suffix = String(value)?.match(/((\\s|)%)$/g, '$1')?.[0] || ' %'\n\n return maskParams\n}\n\n/**\n * Return needed mask for handle: currency\n *\n * @param {object} param0 object with properties\n * @property {object} context Eufemia context\n * @property {object} mask_options Component property for change the mask parameters\n * @property {object} currency_mask Component property for change the currency parameters\n * @returns object maskParams\n */\nexport const handleCurrencyMask = ({ mask_options, currency_mask }) => {\n const givenParams = {\n ...mask_options,\n ...currency_mask,\n }\n const paramsWithDefaults = {\n showMask: true,\n placeholderChar: null,\n allowDecimal: true,\n decimalLimit: 2,\n decimalSymbol: ',',\n ...givenParams,\n }\n\n const suffix =\n typeof currency_mask === 'string'\n ? currency_mask\n : typeof givenParams.currency === 'string'\n ? givenParams.currency\n : 'kr'\n paramsWithDefaults.suffix = ` ${suffix}`\n\n if (\n typeof givenParams?.allowDecimal === 'undefined' &&\n typeof givenParams?.decimalLimit === 'number'\n ) {\n paramsWithDefaults.allowDecimal = givenParams.decimalLimit > 0\n }\n\n return paramsWithDefaults\n}\n\n/**\n * Return needed mask for handle: number\n *\n * @param {object} param0 object with properties\n * @property {object} context Eufemia context\n * @property {object} mask_options Component property for change the mask parameters\n * @property {object} number_mask Component property for change the number parameters\n * @returns object maskParams\n */\nexport const handleNumberMask = ({ mask_options, number_mask }) => {\n const maskParams = {\n decimalSymbol: ',',\n ...mask_options,\n ...number_mask,\n }\n\n if (typeof maskParams.allowDecimal === 'undefined') {\n maskParams.allowDecimal = maskParams.decimalLimit > 0\n }\n\n return maskParams\n}\n\n/**\n * Returns the type of what inputMode or type attribute should be used\n *\n * @param {function} mask mask function\n * @returns undefined|decimal|numeric\n */\nexport function getSoftKeyboardAttributes(mask) {\n if (mask?.instanceOf !== 'createNumberMask') {\n return undefined\n }\n\n const maskParams = mask?.maskParams\n\n // because of the missing minus key, we still have to use text on iOS\n if (IS_IOS && maskParams?.allowNegative !== false) {\n return undefined\n }\n\n return {\n inputMode:\n maskParams.allowDecimal && maskParams.decimalLimit !== 0\n ? 'decimal'\n : 'numeric',\n }\n}\n\n/**\n * Returns the thousands separator character\n *\n * @param {string} locale Component or context locale\n * @returns string\n */\nexport function handleThousandsSeparator(locale) {\n return getThousandsSeparator(locale).replace(' ', ' ') // replace non-breaking space with a regular space\n}\n\n/**\n * Returns the decimal separator character\n *\n * @param {string} locale Component or context locale\n * @returns string\n */\nexport function handleDecimalSeparator(locale) {\n let decimalSymbol = getDecimalSeparator(locale)\n\n return decimalSymbol\n}\n\n/**\n * Will take a JSON and return it parsed\n *\n * @param {string} str\n * @param {*} fallback optional fallback\n * @returns parsed json\n */\nexport function fromJSON(str, fallback = null) {\n if (typeof str === 'string' && str[0] === '{') {\n return JSON.parse(str)\n }\n\n return str || fallback\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"InputMaskedUtils.js","names":["format","getDecimalSeparator","getThousandsSeparator","warn","IS_IOS","safeSetSelection","enableLocaleSupportWhen","enableNumberMaskWhen","invisibleSpace","isRequestingLocaleSupport","props","Object","entries","some","k","v","includes","isRequestingNumberMask","correctNumberValue","localValue","locale","maskParams","value","undefined","String","isNaN","parseFloat","decimalPos","indexOf","integerLimit","limit","integers","split","isNegative","length","decimals","slice","shouldHaveDecimals","allowDecimal","decimalLimit","number_format","options","_objectSpread","decimalSymbol","replace","localNumberValue","numberValue","valueHasDecimal","endsWithDecimal","endsWith","endsWithZeroAndDecimal","startsWith","test","correctCaretPosition","element","maskParamsRef","correction","current","suffix","prefix","start","selectionStart","end","selectionEnd","suffixStart","suffixEnd","pos","placeholderChar","prefixStart","prefixEnd","char","mask","chars","l","i","RegExp","n","_mask$test","call","e","window","requestAnimationFrame","handlePercentMask","_String","_String$match","percent","match","handleCurrencyMask","mask_options","currency_mask","givenParams","paramsWithDefaults","showMask","currency","handleNumberMask","number_mask","getSoftKeyboardAttributes","instanceOf","allowNegative","inputMode","handleThousandsSeparator","handleDecimalSeparator","fromJSON","str","fallback","JSON","parse"],"sources":["../../../../src/components/input-masked/InputMaskedUtils.js"],"sourcesContent":["/**\n * Web InputMasked Component\n *\n */\n\nimport {\n format,\n getDecimalSeparator,\n getThousandsSeparator,\n} from '../number-format/NumberUtils'\nimport { warn } from '../../shared/component-helper'\nimport { IS_IOS } from '../../shared/helpers'\nimport { safeSetSelection } from './text-mask/createTextMaskInputElement'\n\nconst enableLocaleSupportWhen = ['as_number', 'as_percent', 'as_currency']\nconst enableNumberMaskWhen = [\n 'as_number',\n 'as_percent',\n 'as_currency',\n 'number_mask',\n 'currency_mask',\n]\n\nexport const invisibleSpace = '\\u200B'\n\n/**\n * Will return true if a prop needs Locale support\n *\n * @param {object} props object with given component props\n * @returns boolean\n */\nexport const isRequestingLocaleSupport = (props) => {\n return Object.entries(props).some(\n ([k, v]) => v && enableLocaleSupportWhen.includes(k)\n )\n}\n\n/**\n * Will return true if a prop will enable the internal NumberMask\n *\n * @param {object} props object with given component props\n * @returns boolean\n */\nexport const isRequestingNumberMask = (props) => {\n return Object.entries(props).some(\n ([k, v]) => v && enableNumberMaskWhen.includes(k)\n )\n}\n\n/**\n * Probably the most complex part of this component\n * It will modify a given value based on certain criteria's\n *\n * @param {object} param0 object with properties\n * @property {string} localValue optional – if given, it will uses its ending to determine of what to return\n * @property {number|string} value component property value\n * @property {object} context Eufemia Context\n * @property {string} locale Eufemia locale (either from component or context)\n * @property {object} maskParams predefined mask parameters\n * @returns string Value\n */\nexport const correctNumberValue = ({\n localValue = null,\n props,\n locale,\n maskParams,\n}) => {\n let value =\n props.value === null\n ? null\n : props.value === undefined\n ? undefined\n : String(props.value)\n\n if (isNaN(parseFloat(value))) {\n return value\n }\n\n const decimalPos = value.indexOf('.')\n\n if (\n maskParams.integerLimit &&\n typeof maskParams.integerLimit === 'number'\n ) {\n const limit = maskParams.integerLimit\n const integers = value.split('.')[0]\n const isNegative = parseFloat(integers) < 0\n if (integers.length - (isNegative ? 1 : 0) > limit) {\n const decimals = decimalPos > 0 ? value.slice(decimalPos) : ''\n value = integers.slice(0, limit + (isNegative ? 1 : 0)) + decimals\n }\n }\n\n const shouldHaveDecimals =\n maskParams.allowDecimal ||\n (maskParams.decimalLimit > 0 && maskParams.allowDecimal !== false)\n\n if (!shouldHaveDecimals) {\n if (decimalPos > -1) {\n value = value.slice(0, decimalPos)\n }\n }\n\n /**\n * This only runs IF \"number_format\" is set – we do not use it else\n */\n if (props.number_format) {\n const options = {\n locale,\n decimals: 0,\n ...props.number_format,\n }\n if (shouldHaveDecimals) {\n options.decimals = maskParams.decimalLimit\n }\n value = format(value, options)\n }\n\n const decimalSymbol = maskParams.decimalSymbol\n value = value.replace('.', decimalSymbol)\n\n if (localValue !== null) {\n const localNumberValue = localValue.replace(/[^\\d,.-]/g, '')\n const numberValue = value.replace(/[^\\d,.-]/g, '')\n const valueHasDecimal = numberValue.includes(decimalSymbol)\n\n if (!valueHasDecimal) {\n const endsWithDecimal = localNumberValue.endsWith(decimalSymbol)\n const endsWithZeroAndDecimal = localNumberValue.endsWith(\n `${decimalSymbol}0`\n )\n\n if (endsWithDecimal) {\n value = `${value}${decimalSymbol}`\n } else if (\n endsWithZeroAndDecimal &&\n !numberValue.endsWith(`${decimalSymbol}0`)\n ) {\n /**\n * When the users has 20,02, then hits \"backspace\",\n * the returned {numberValue} in the onChange event would then be \"20\",\n * but we want it to be 20,0\n */\n value = `${value}${decimalSymbol}0`\n }\n }\n\n /**\n * If the user removes a leading digit and we have left a leading zero.\n *\n * The users enters these steps:\n * Step 1. 1012\n * Step 2. 012 -> user removes 1, now use \"localValue\"\n * Step 3. 2012\n *\n * If a dev listens on_change and sends the number value back in,\n * for this, we also ensure that \"numberValue\" and \"localNumberValue\" is the same.\n */\n if (\n localNumberValue !== '0' &&\n localNumberValue.startsWith('0') &&\n parseFloat(numberValue.replace(decimalSymbol, '.')) ===\n parseFloat(localNumberValue.replace(decimalSymbol, '.'))\n ) {\n value = localValue\n }\n\n /**\n * While typing;\n * If the local value is - or -0 we use it.\n * Also, because of invisible whitespace we remove everything else\n */\n if (/^(-|-0)$/.test(localValue.replace(/[^\\d-0]/g, ''))) {\n value = localValue\n } else if (localNumberValue === '' && numberValue === '0') {\n value = ''\n }\n }\n\n return value\n}\n\n/**\n * This is a helper for setting the cursor position,\n * when it is on a not allowed position\n *\n * @param {Element} element Input Element\n * @param {Object} maskParams Mask parameters, containing eventually suffix or prefix\n */\nexport const correctCaretPosition = (element, maskParamsRef, props) => {\n const correction = () => {\n try {\n const maskParams = maskParamsRef?.current\n\n const suffix = maskParams?.suffix\n const prefix = maskParams?.prefix\n\n const start = element.selectionStart\n const end = element.selectionEnd\n\n if (start !== end) {\n return // stop here\n }\n\n if (suffix || prefix) {\n const suffixStart = element.value.indexOf(suffix)\n const suffixEnd = suffixStart + suffix?.length\n let pos = undefined\n\n if (start >= suffixStart && start <= suffixEnd) {\n pos = suffixStart\n\n // If there is a placeholder,\n // and the user clicks after the suffix\n // we want the position to be \"before\" the placeholderChar\n if (\n maskParams.placeholderChar !== invisibleSpace &&\n element.value.length - 1 === String(suffix + prefix).length\n ) {\n pos = pos - 1\n }\n } else {\n const prefixStart = element.value.indexOf(prefix)\n const prefixEnd = prefixStart + prefix?.length || 0\n\n if (start >= prefixStart && start <= prefixEnd) {\n pos = prefixEnd\n }\n }\n\n const char = element.value.slice(pos - 1, pos)\n if (char === invisibleSpace) {\n pos = suffixStart - 1\n }\n\n if (!isNaN(parseFloat(pos))) {\n safeSetSelection(element, pos)\n }\n } else if (props?.mask && element.value.length === end) {\n const chars = element.value.split('')\n\n for (let l = chars.length, i = l - 1; i >= 0; i--) {\n const char = chars[i]\n const mask = props.mask[i]\n if (\n char &&\n char !== invisibleSpace &&\n mask instanceof RegExp &&\n mask.test(char)\n ) {\n for (let n = i + 1; n < l; n++) {\n const mask = props.mask[n]\n if (mask?.test?.(char)) {\n safeSetSelection(element, n)\n break\n }\n }\n\n break\n }\n }\n }\n } catch (e) {\n warn(e)\n }\n }\n\n if (typeof window !== 'undefined') {\n window.requestAnimationFrame(correction)\n }\n}\n\n/**\n * Manipulate needed mask for handle: percent\n *\n * @param {object} param0 object with properties\n * @property {object} props Component property\n * @property {string} locale Eufemia locale (either from component or context)\n * @property {object} maskParams predefined mask parameters\n * @returns object maskParams\n */\nexport const handlePercentMask = ({ props, locale, maskParams }) => {\n const value = format(props.value, { locale, percent: true })\n maskParams.suffix = String(value)?.match(/((\\s|)%)$/g, '$1')?.[0] || ' %'\n\n return maskParams\n}\n\n/**\n * Return needed mask for handle: currency\n *\n * @param {object} param0 object with properties\n * @property {object} context Eufemia context\n * @property {object} mask_options Component property for change the mask parameters\n * @property {object} currency_mask Component property for change the currency parameters\n * @returns object maskParams\n */\nexport const handleCurrencyMask = ({ mask_options, currency_mask }) => {\n const givenParams = {\n ...mask_options,\n ...currency_mask,\n }\n const paramsWithDefaults = {\n showMask: true,\n placeholderChar: null,\n allowDecimal: true,\n decimalLimit: 2,\n decimalSymbol: ',',\n ...givenParams,\n }\n\n const suffix =\n typeof currency_mask === 'string'\n ? currency_mask\n : typeof givenParams.currency === 'string'\n ? givenParams.currency\n : 'kr'\n paramsWithDefaults.suffix = ` ${suffix}`\n\n if (\n typeof givenParams?.allowDecimal === 'undefined' &&\n typeof givenParams?.decimalLimit === 'number'\n ) {\n paramsWithDefaults.allowDecimal = givenParams.decimalLimit > 0\n }\n\n return paramsWithDefaults\n}\n\n/**\n * Return needed mask for handle: number\n *\n * @param {object} param0 object with properties\n * @property {object} context Eufemia context\n * @property {object} mask_options Component property for change the mask parameters\n * @property {object} number_mask Component property for change the number parameters\n * @returns object maskParams\n */\nexport const handleNumberMask = ({ mask_options, number_mask }) => {\n const maskParams = {\n decimalSymbol: ',',\n ...mask_options,\n ...number_mask,\n }\n\n if (typeof maskParams.allowDecimal === 'undefined') {\n maskParams.allowDecimal = maskParams.decimalLimit > 0\n }\n\n return maskParams\n}\n\n/**\n * Returns the type of what inputMode or type attribute should be used\n *\n * @param {function} mask mask function\n * @returns undefined|decimal|numeric\n */\nexport function getSoftKeyboardAttributes(mask) {\n if (mask?.instanceOf !== 'createNumberMask') {\n return undefined\n }\n\n const maskParams = mask?.maskParams\n\n // because of the missing minus key, we still have to use text on iOS\n if (IS_IOS && maskParams?.allowNegative !== false) {\n return undefined\n }\n\n return {\n inputMode:\n maskParams.allowDecimal && maskParams.decimalLimit !== 0\n ? 'decimal'\n : 'numeric',\n }\n}\n\n/**\n * Returns the thousands separator character\n *\n * @param {string} locale Component or context locale\n * @returns string\n */\nexport function handleThousandsSeparator(locale) {\n return getThousandsSeparator(locale).replace(' ', ' ') // replace non-breaking space with a regular space\n}\n\n/**\n * Returns the decimal separator character\n *\n * @param {string} locale Component or context locale\n * @returns string\n */\nexport function handleDecimalSeparator(locale) {\n let decimalSymbol = getDecimalSeparator(locale)\n\n return decimalSymbol\n}\n\n/**\n * Will take a JSON and return it parsed\n *\n * @param {string} str\n * @param {*} fallback optional fallback\n * @returns parsed json\n */\nexport function fromJSON(str, fallback = null) {\n if (typeof str === 'string' && str[0] === '{') {\n return JSON.parse(str)\n }\n\n return str || fallback\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,5 @@
1
1
  import { PropertiesTableProps } from '../../shared/types';
2
2
  export declare const ModalProperties: PropertiesTableProps;
3
+ export declare const ModalPropertiesWithSnakeCase: PropertiesTableProps;
3
4
  export declare const ModalEvents: PropertiesTableProps;
5
+ export declare const ModalEventsWithSnakeCase: PropertiesTableProps;
@@ -1,3 +1,7 @@
1
+ import { toSnakeCase } from '../../shared/component-helper';
2
+ const transformPropertyNamesWithSnakeCase = properties => {
3
+ return Object.fromEntries(Object.entries(properties).map(([key, value]) => [key !== key.toLowerCase() ? `${key} / ${toSnakeCase(key)}` : key, value]));
4
+ };
1
5
  export const ModalProperties = {
2
6
  id: {
3
7
  doc: 'The id used internal for the trigger button and Modal component.',
@@ -165,6 +169,7 @@ export const ModalProperties = {
165
169
  status: 'optional'
166
170
  }
167
171
  };
172
+ export const ModalPropertiesWithSnakeCase = transformPropertyNamesWithSnakeCase(ModalProperties);
168
173
  export const ModalEvents = {
169
174
  onOpen: {
170
175
  doc: 'This event gets triggered once the modal shows up. Returns the modal id: `{ id }`.',
@@ -182,4 +187,5 @@ export const ModalEvents = {
182
187
  status: 'optional'
183
188
  }
184
189
  };
190
+ export const ModalEventsWithSnakeCase = transformPropertyNamesWithSnakeCase(ModalEvents);
185
191
  //# sourceMappingURL=ModalDocs.js.map