@hh.ru/magritte-ui-input 5.1.4 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BaseInput.js +1 -1
- package/DateTimeInput.d.ts +1 -1
- package/DateTimeInput.js +20 -4
- package/DateTimeInput.js.map +1 -1
- package/UncontrolledDateTimeInput.d.ts +1 -1
- package/UncontrolledDateTimeInput.js +1 -1
- package/index.css +91 -91
- package/{index.esm-C_156Jix.js → index.esm-D-2x7l7K.js} +1 -1
- package/{index.esm-C_156Jix.js.map → index.esm-D-2x7l7K.js.map} +1 -1
- package/index.js +1 -1
- package/maskito-exports.js +1 -1
- package/package.json +4 -4
- package/types.d.ts +3 -1
- package/useDateTimeMask.js +17 -4
- package/useDateTimeMask.js.map +1 -1
package/index.js
CHANGED
|
@@ -29,6 +29,6 @@ import './useFocus.js';
|
|
|
29
29
|
import '@hh.ru/magritte-ui-typography';
|
|
30
30
|
import '@hh.ru/magritte-common-number-formatter';
|
|
31
31
|
import './useDateTimeMask.js';
|
|
32
|
-
import './index.esm-
|
|
32
|
+
import './index.esm-D-2x7l7K.js';
|
|
33
33
|
import './useUncontrolledInput.js';
|
|
34
34
|
//# sourceMappingURL=index.js.map
|
package/maskito-exports.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import './index.css';
|
|
2
|
-
export { M as MASKITO_DEFAULT_OPTIONS, m as maskitoDateOptionsGenerator, a as maskitoDateTimeOptionsGenerator, b as maskitoTimeOptionsGenerator, u as useMaskito } from './index.esm-
|
|
2
|
+
export { M as MASKITO_DEFAULT_OPTIONS, m as maskitoDateOptionsGenerator, a as maskitoDateTimeOptionsGenerator, b as maskitoTimeOptionsGenerator, u as useMaskito } from './index.esm-D-2x7l7K.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
//# sourceMappingURL=maskito-exports.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-input",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
"@hh.ru/magritte-common-use-disabled": "1.0.9",
|
|
32
32
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.4",
|
|
33
33
|
"@hh.ru/magritte-design-tokens": "18.3.0",
|
|
34
|
-
"@hh.ru/magritte-ui-action": "4.3.
|
|
34
|
+
"@hh.ru/magritte-ui-action": "4.3.21",
|
|
35
35
|
"@hh.ru/magritte-ui-breakpoint": "4.0.3",
|
|
36
36
|
"@hh.ru/magritte-ui-counter": "5.0.2",
|
|
37
37
|
"@hh.ru/magritte-ui-form-helper": "1.0.6",
|
|
38
|
-
"@hh.ru/magritte-ui-icon": "7.4.
|
|
38
|
+
"@hh.ru/magritte-ui-icon": "7.4.1",
|
|
39
39
|
"@hh.ru/magritte-ui-mock-component": "1.0.11",
|
|
40
40
|
"@hh.ru/magritte-ui-theme-provider": "1.1.26",
|
|
41
41
|
"@hh.ru/magritte-ui-typography": "3.0.13"
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"publishConfig": {
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "4b6f5ab22f74af79bd493e1264709de61cf0a058"
|
|
52
52
|
}
|
package/types.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ export type SearchInputProps = (InputWithoutRightButtonProps | InputClearablePro
|
|
|
144
144
|
};
|
|
145
145
|
export type ControlledSearchInputProps = SearchInputProps & ControlledProps;
|
|
146
146
|
export type UncontrolledSearchInputProps = SearchInputProps & UncontrolledProps;
|
|
147
|
-
export type DateInputMask = '
|
|
147
|
+
export type DateInputMask = 'dd' | 'mm.yyyy' | 'dd.mm.yyyy';
|
|
148
148
|
export type TimeInputRounding = 5 | 15 | 30 | 60;
|
|
149
149
|
export type DateTimeInputProps = NoButtonInputProps & {
|
|
150
150
|
/** Формат заполнения даты */
|
|
@@ -155,6 +155,8 @@ export type DateTimeInputProps = NoButtonInputProps & {
|
|
|
155
155
|
timeRounding?: TimeInputRounding;
|
|
156
156
|
/** Обработчик события клика по иконке, так же влияет на показ */
|
|
157
157
|
onButtonClick?: OnButtonClickType;
|
|
158
|
+
/** Флаг скрытия маски при вводе */
|
|
159
|
+
hideMask?: boolean;
|
|
158
160
|
};
|
|
159
161
|
export type ControlledDateTimeInputProps = DateTimeInputProps & ControlledProps;
|
|
160
162
|
export type UncontrolledDateTimeInputProps = DateTimeInputProps & UncontrolledProps;
|
package/useDateTimeMask.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
-
import { M as MASKITO_DEFAULT_OPTIONS, a as maskitoDateTimeOptionsGenerator, m as maskitoDateOptionsGenerator, b as maskitoTimeOptionsGenerator, u as useMaskito } from './index.esm-
|
|
3
|
+
import { M as MASKITO_DEFAULT_OPTIONS, a as maskitoDateTimeOptionsGenerator, m as maskitoDateOptionsGenerator, b as maskitoTimeOptionsGenerator, u as useMaskito } from './index.esm-D-2x7l7K.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Округление времени (в формате 00:00) до ближайшего заданного шага
|
|
@@ -82,12 +82,25 @@ const replaceSeparatorsPreprocessor = (state, actionType) => {
|
|
|
82
82
|
}
|
|
83
83
|
return state;
|
|
84
84
|
};
|
|
85
|
+
/** Постпроцессор для преобразования 4 -> 04 при вводе с маской dd */
|
|
86
|
+
const formatDDMaskPostprocessor = (state) => {
|
|
87
|
+
if (state.value.length === 1 && Number(state.value) > 3) {
|
|
88
|
+
const [from, to] = state.selection;
|
|
89
|
+
return {
|
|
90
|
+
...state,
|
|
91
|
+
value: state.value.padStart(2, '0'),
|
|
92
|
+
selection: [from + 1, to + 1],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return state;
|
|
96
|
+
};
|
|
85
97
|
const useDateTimeMask = (dateMask, timeMask, timeRounding) => {
|
|
86
98
|
const options = useMemo(() => {
|
|
87
|
-
// маска '
|
|
88
|
-
if (dateMask === '
|
|
99
|
+
// маска 'dd' - исключение, которого нету в maskito api:
|
|
100
|
+
if (dateMask === 'dd') {
|
|
89
101
|
return {
|
|
90
|
-
mask: /^([
|
|
102
|
+
mask: /^([0-9]|0\d|1\d|2[0-9]|3[01])$/,
|
|
103
|
+
postprocessors: [formatDDMaskPostprocessor],
|
|
91
104
|
};
|
|
92
105
|
}
|
|
93
106
|
const dateSeparator = '.';
|
package/useDateTimeMask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateTimeMask.js","sources":["../src/useDateTimeMask.ts"],"sourcesContent":["import { RefCallback, useMemo } from 'react';\n\nimport {\n MASKITO_DEFAULT_OPTIONS,\n MaskitoOptions,\n MaskitoPreprocessor,\n MaskitoPostprocessor,\n MaskitoDateMode,\n maskitoDateOptionsGenerator,\n maskitoDateTimeOptionsGenerator,\n maskitoTimeOptionsGenerator,\n useMaskito,\n} from '@hh.ru/magritte-ui-input/maskito-exports';\nimport { type TimeInputRounding, type DateInputMask } from '@hh.ru/magritte-ui-input/types';\n\n/**\n * Округление времени (в формате 00:00) до ближайшего заданного шага\n *\n * @param dateTime {String} Строка с постфиксом HH:MM, где H - часы, M - минуты\n * @param roundValue {Number} Шаг для округления\n * @returns {String}\n *\n * @example\n * roundTime('20.12.2023 15:19', 15); // '20.12.2023 15:15'\n * @example\n * roundTime('15:31', 60); // '16:00'\n */\nconst roundTime = (dateTime: string, roundValue: TimeInputRounding): string => {\n const regexp = /(\\d{2}):(\\d{2})$/;\n const match = dateTime.match(regexp);\n const time = match?.[0];\n\n if (time) {\n const [hours, minutes] = time.split(':').map(Number);\n const totalMinutes = hours * 60 + minutes;\n const roundedMinutes = Math.round(totalMinutes / roundValue) * roundValue;\n const roundedHours = Math.floor(roundedMinutes / 60) % 24;\n const formattedHours = String(roundedHours).padStart(2, '0');\n const formattedMinutes = String(roundedMinutes % 60).padStart(2, '0');\n return dateTime.replace(regexp, `${formattedHours}:${formattedMinutes}`);\n }\n\n return dateTime;\n};\n\n/** Постпроцессор для округления времени до заданного шага */\nconst roundTimePostprocessor =\n (enabled: boolean, rounding?: TimeInputRounding): MaskitoPostprocessor =>\n (state) =>\n enabled && rounding ? { ...state, value: roundTime(state.value, rounding) } : state;\n\n/** Препроцессор для автоматического добавления разделителей из маски */\nconst autoSeparatorsPreprocessor = (mask: Array<RegExp | string>): MaskitoPreprocessor => {\n let lastActionIsInsert = false;\n\n return (state, actionType) => {\n if (actionType === 'insert') {\n lastActionIsInsert = true;\n return state;\n }\n\n const canAddSeparator = actionType === 'validation' && lastActionIsInsert;\n lastActionIsInsert = false;\n\n if (canAddSeparator) {\n const { value, selection } = state.elementState;\n const [from, to] = selection;\n let newValue = '';\n const dateArray = value.split('');\n\n for (let i = 0; i < mask.length; i++) {\n if (i < dateArray.length) {\n newValue += dateArray[i];\n } else if (typeof mask[i] === 'string') {\n newValue += mask[i];\n } else {\n break;\n }\n }\n\n const addedCharacters = newValue.length - value.length;\n\n return {\n ...state,\n elementState: {\n value: newValue,\n selection: [from + addedCharacters, to + addedCharacters],\n },\n };\n }\n\n return state;\n };\n};\n\n/** Препроцессор для замены разделителей \"., :;/_\" на точку */\nconst replaceSeparatorsPreprocessor: MaskitoPreprocessor = (state, actionType) => {\n if (actionType === 'insert') {\n return {\n ...state,\n data: state.data\n .replace(/[^0-9., :;/_]/g, '')\n .replace(/[., :;/_]/g, '.')\n .replace(/([^0-9])\\1+/g, '$1'),\n };\n }\n return state;\n};\n\nexport const useDateTimeMask = (\n dateMask?: DateInputMask,\n timeMask?: boolean,\n timeRounding?: TimeInputRounding\n): RefCallback<HTMLElement> => {\n const options = useMemo<MaskitoOptions>(() => {\n // маска 'd' - исключение, которого нету в maskito api:\n if (dateMask === 'd') {\n return {\n mask: /^([1-9]|1\\d|2[0-9]|3[01])$/,\n };\n }\n\n const dateSeparator = '.';\n const dateMode = dateMask?.replace(/\\./g, '/') as MaskitoDateMode;\n const timeMode = 'HH:MM';\n let options: MaskitoOptions = { ...MASKITO_DEFAULT_OPTIONS };\n\n if (dateMask && timeMask) {\n options = maskitoDateTimeOptionsGenerator({\n dateMode,\n timeMode,\n dateSeparator,\n });\n } else if (dateMask) {\n options = maskitoDateOptionsGenerator({\n mode: dateMode,\n separator: dateSeparator,\n });\n } else if (timeMask) {\n options = maskitoTimeOptionsGenerator({\n mode: timeMode,\n });\n }\n\n return {\n ...options,\n preprocessors: [\n replaceSeparatorsPreprocessor,\n ...(options.preprocessors || []),\n autoSeparatorsPreprocessor(options.mask as Array<RegExp | string>),\n ],\n postprocessors: [\n ...(options.postprocessors || []),\n roundTimePostprocessor(Boolean(timeRounding && timeMode), timeRounding),\n ],\n };\n }, [dateMask, timeMask, timeRounding]);\n\n return useMaskito({ options });\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDateTimeMask.js","sources":["../src/useDateTimeMask.ts"],"sourcesContent":["import { RefCallback, useMemo } from 'react';\n\nimport {\n MASKITO_DEFAULT_OPTIONS,\n MaskitoOptions,\n MaskitoPreprocessor,\n MaskitoPostprocessor,\n MaskitoDateMode,\n maskitoDateOptionsGenerator,\n maskitoDateTimeOptionsGenerator,\n maskitoTimeOptionsGenerator,\n useMaskito,\n} from '@hh.ru/magritte-ui-input/maskito-exports';\nimport { type TimeInputRounding, type DateInputMask } from '@hh.ru/magritte-ui-input/types';\n\n/**\n * Округление времени (в формате 00:00) до ближайшего заданного шага\n *\n * @param dateTime {String} Строка с постфиксом HH:MM, где H - часы, M - минуты\n * @param roundValue {Number} Шаг для округления\n * @returns {String}\n *\n * @example\n * roundTime('20.12.2023 15:19', 15); // '20.12.2023 15:15'\n * @example\n * roundTime('15:31', 60); // '16:00'\n */\nconst roundTime = (dateTime: string, roundValue: TimeInputRounding): string => {\n const regexp = /(\\d{2}):(\\d{2})$/;\n const match = dateTime.match(regexp);\n const time = match?.[0];\n\n if (time) {\n const [hours, minutes] = time.split(':').map(Number);\n const totalMinutes = hours * 60 + minutes;\n const roundedMinutes = Math.round(totalMinutes / roundValue) * roundValue;\n const roundedHours = Math.floor(roundedMinutes / 60) % 24;\n const formattedHours = String(roundedHours).padStart(2, '0');\n const formattedMinutes = String(roundedMinutes % 60).padStart(2, '0');\n return dateTime.replace(regexp, `${formattedHours}:${formattedMinutes}`);\n }\n\n return dateTime;\n};\n\n/** Постпроцессор для округления времени до заданного шага */\nconst roundTimePostprocessor =\n (enabled: boolean, rounding?: TimeInputRounding): MaskitoPostprocessor =>\n (state) =>\n enabled && rounding ? { ...state, value: roundTime(state.value, rounding) } : state;\n\n/** Препроцессор для автоматического добавления разделителей из маски */\nconst autoSeparatorsPreprocessor = (mask: Array<RegExp | string>): MaskitoPreprocessor => {\n let lastActionIsInsert = false;\n\n return (state, actionType) => {\n if (actionType === 'insert') {\n lastActionIsInsert = true;\n return state;\n }\n\n const canAddSeparator = actionType === 'validation' && lastActionIsInsert;\n lastActionIsInsert = false;\n\n if (canAddSeparator) {\n const { value, selection } = state.elementState;\n const [from, to] = selection;\n let newValue = '';\n const dateArray = value.split('');\n\n for (let i = 0; i < mask.length; i++) {\n if (i < dateArray.length) {\n newValue += dateArray[i];\n } else if (typeof mask[i] === 'string') {\n newValue += mask[i];\n } else {\n break;\n }\n }\n\n const addedCharacters = newValue.length - value.length;\n\n return {\n ...state,\n elementState: {\n value: newValue,\n selection: [from + addedCharacters, to + addedCharacters],\n },\n };\n }\n\n return state;\n };\n};\n\n/** Препроцессор для замены разделителей \"., :;/_\" на точку */\nconst replaceSeparatorsPreprocessor: MaskitoPreprocessor = (state, actionType) => {\n if (actionType === 'insert') {\n return {\n ...state,\n data: state.data\n .replace(/[^0-9., :;/_]/g, '')\n .replace(/[., :;/_]/g, '.')\n .replace(/([^0-9])\\1+/g, '$1'),\n };\n }\n return state;\n};\n\n/** Постпроцессор для преобразования 4 -> 04 при вводе с маской dd */\nconst formatDDMaskPostprocessor: MaskitoPostprocessor = (state) => {\n if (state.value.length === 1 && Number(state.value) > 3) {\n const [from, to] = state.selection;\n return {\n ...state,\n value: state.value.padStart(2, '0'),\n selection: [from + 1, to + 1],\n };\n }\n return state;\n};\n\nexport const useDateTimeMask = (\n dateMask?: DateInputMask,\n timeMask?: boolean,\n timeRounding?: TimeInputRounding\n): RefCallback<HTMLElement> => {\n const options = useMemo<MaskitoOptions>(() => {\n // маска 'dd' - исключение, которого нету в maskito api:\n if (dateMask === 'dd') {\n return {\n mask: /^([0-9]|0\\d|1\\d|2[0-9]|3[01])$/,\n postprocessors: [formatDDMaskPostprocessor],\n };\n }\n\n const dateSeparator = '.';\n const dateMode = dateMask?.replace(/\\./g, '/') as MaskitoDateMode;\n const timeMode = 'HH:MM';\n let options: MaskitoOptions = { ...MASKITO_DEFAULT_OPTIONS };\n\n if (dateMask && timeMask) {\n options = maskitoDateTimeOptionsGenerator({\n dateMode,\n timeMode,\n dateSeparator,\n });\n } else if (dateMask) {\n options = maskitoDateOptionsGenerator({\n mode: dateMode,\n separator: dateSeparator,\n });\n } else if (timeMask) {\n options = maskitoTimeOptionsGenerator({\n mode: timeMode,\n });\n }\n\n return {\n ...options,\n preprocessors: [\n replaceSeparatorsPreprocessor,\n ...(options.preprocessors || []),\n autoSeparatorsPreprocessor(options.mask as Array<RegExp | string>),\n ],\n postprocessors: [\n ...(options.postprocessors || []),\n roundTimePostprocessor(Boolean(timeRounding && timeMode), timeRounding),\n ],\n };\n }, [dateMask, timeMask, timeRounding]);\n\n return useMaskito({ options });\n};\n"],"names":[],"mappings":"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"}
|