linear-react-components-ui 2.1.0-beta.2 → 2.1.0-beta.4
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/lib/assets/styles/datepicker2.css +8 -11
- package/lib/inputs2/date/calendarbox.js.map +1 -1
- package/lib/inputs2/date/datefield/base.js +435 -334
- package/lib/inputs2/date/datefield/base.js.map +1 -1
- package/lib/inputs2/date/dateperiodfield/base.js +544 -528
- package/lib/inputs2/date/dateperiodfield/base.js.map +1 -1
- package/lib/inputs2/date/dateperiodfield/triggers.js.map +1 -1
- package/lib/inputs2/date/dateperiodfield/types.d.ts +6 -0
- package/lib/inputs2/date/helpers.d.ts +24 -1
- package/lib/inputs2/date/helpers.js +137 -1
- package/lib/inputs2/date/helpers.js.map +1 -1
- package/lib/inputs2/date/hooks/useCalendarPosition.js.map +1 -1
- package/lib/inputs2/date/hooks/useDateCalendarState.js.map +1 -1
- package/lib/inputs2/date/hooks/useDateMask.d.ts +3 -1
- package/lib/inputs2/date/hooks/useDateMask.js +75 -111
- package/lib/inputs2/date/hooks/useDateMask.js.map +1 -1
- package/lib/inputs2/date/timeselector.d.ts +4 -2
- package/lib/inputs2/date/timeselector.js +115 -117
- package/lib/inputs2/date/timeselector.js.map +1 -1
- package/lib/inputs2/date/types.d.ts +6 -0
- package/lib/inputs2/date/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateCalendarState.js","sources":["../../../../src/lib/inputs2/date/hooks/useDateCalendarState.ts"],"sourcesContent":["import React from 'react';\nimport moment, { type Moment } from 'moment';\nimport { Keys, type DateSharedContextProps } from '../types';\nimport { NAVIGATION_KEYS, TOKEN_ISO_FORMAT } from '../helpers';\n\ninterface UseDateCalendarStateParams {\n inputRef?: React.RefObject<HTMLInputElement | null>;\n min?: Moment;\n max?: Moment;\n onPressEnter?: (activeDescendant: string) => void;\n}\n\ninterface UseDateCalendarStateReturn extends DateSharedContextProps {\n handleKeyDownNavigation: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\nexport const useDateCalendarState = (\n params: UseDateCalendarStateParams = {},\n): UseDateCalendarStateReturn => {\n const { inputRef, min, max, onPressEnter } = params;\n const [calendarBoxOpen, setCalendarBoxOpen] = React.useState(false);\n const [activeDescendant, setActiveDescendant] = React.useState<string>(\n moment().format(TOKEN_ISO_FORMAT),\n );\n const [calendarDisplayDate, setCalendarDisplayDate] = React.useState<Moment>(moment());\n const calendarRef = React.useRef<HTMLDivElement | null>(null);\n const dateContainerRef = React.useRef<HTMLDivElement | null>(null);\n\n const handleSetCalendarBoxOpen = React.useCallback(\n (value: boolean) => setCalendarBoxOpen(value), [],\n );\n const handleChangeActiveDescendant = React.useCallback(\n (value: string) => setActiveDescendant(value), [],\n );\n const handleChangeCalendarDisplayDate = React.useCallback(\n (value: Moment) => setCalendarDisplayDate(value), [],\n );\n const handleNextMonth = React.useCallback(() => setCalendarDisplayDate(prevDisplayDate =>\n prevDisplayDate.clone().add(1, 'month')), []);\n const handlePreviousMonth = React.useCallback(() => setCalendarDisplayDate(prevDisplayDate =>\n prevDisplayDate.clone().subtract(1, 'month')), []);\n\n // Abrir pelo botão devolve o foco ao input: é ele que escuta as setas, e o calendário\n // fecha no blur — sem esse foco o calendário abriria sem ninguém para navegá-lo.\n const handleToggleCalendarBox = React.useCallback(() => {\n setCalendarBoxOpen((prevState) => {\n if (inputRef?.current !== document.activeElement) {\n inputRef?.current?.focus?.();\n }\n return !prevState;\n });\n }, [inputRef]);\n\n // Prender o cursor na borda em vez de rejeitar o movimento. Rejeitar deixaria quem\n // paginou para um mês inteiramente fora do intervalo sem nenhuma seta que ande, já que\n // o mesmo estado guarda o mês exibido e o cursor.\n const clampToBounds = (day: Moment) => {\n if (min && day.isBefore(min, 'day')) return min.clone().startOf('day');\n if (max && day.isAfter(max, 'day')) return max.clone().startOf('day');\n return day;\n };\n\n const handleNavigateWithDays = (offset: number) => {\n setCalendarDisplayDate((prevDisplayDate) => {\n const daySelected = clampToBounds(prevDisplayDate.clone().add(offset, 'day'));\n setActiveDescendant(daySelected.format(TOKEN_ISO_FORMAT));\n return daySelected;\n });\n };\n\n const handleNavigateWithWeeks = (when: 'start' | 'end') => {\n setCalendarDisplayDate((prevDisplayDate) => {\n let daySelected = prevDisplayDate;\n if (when === 'end') daySelected = prevDisplayDate.clone().endOf('week');\n if (when === 'start') daySelected = prevDisplayDate.clone().startOf('week');\n daySelected = clampToBounds(daySelected);\n setActiveDescendant(daySelected.format(TOKEN_ISO_FORMAT));\n return daySelected;\n });\n };\n\n const handleKeyDownNavigation = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const isNavigationKey = Boolean(event.key) && !event.shiftKey && !event.altKey &&\n NAVIGATION_KEYS.includes(event.key);\n if (!calendarBoxOpen || !isNavigationKey) return;\n event.preventDefault();\n switch (event.key) {\n case Keys.arrowLeft: handleNavigateWithDays(-1);\n break;\n case Keys.arrowRight: handleNavigateWithDays(1);\n break;\n case Keys.arrowUp: handleNavigateWithDays(-7);\n break;\n case Keys.arrowDown: handleNavigateWithDays(7);\n break;\n case Keys.pageUp: handleNextMonth();\n break;\n case Keys.pageDown: handlePreviousMonth();\n break;\n case Keys.home: handleNavigateWithWeeks('start');\n break;\n case Keys.end: handleNavigateWithWeeks('end');\n break;\n case Keys.escape: setCalendarBoxOpen(false);\n break;\n case Keys.enter: onPressEnter?.(activeDescendant);\n break;\n default:\n break;\n }\n };\n\n return {\n calendarBoxOpen,\n activeDescendant,\n calendarDisplayDate,\n calendarRef,\n dateContainerRef,\n handleNextMonth,\n handlePreviousMonth,\n handleToggleCalendarBox,\n handleSetCalendarBoxOpen,\n handleChangeActiveDescendant,\n handleChangeCalendarDisplayDate,\n handleKeyDownNavigation,\n };\n};\n"],"names":["useDateCalendarState","t0","$","_c","t1","undefined","params","inputRef","min","max","onPressEnter","calendarBoxOpen","setCalendarBoxOpen","React","useState","t2","Symbol","for","moment","format","TOKEN_ISO_FORMAT","activeDescendant","setActiveDescendant","t3","calendarDisplayDate","setCalendarDisplayDate","calendarRef","useRef","dateContainerRef","t4","value","handleSetCalendarBoxOpen","t5","value_0","handleChangeActiveDescendant","t6","value_1","handleChangeCalendarDisplayDate","t7","_temp","handleNextMonth","t8","_temp2","handlePreviousMonth","t9","prevState","current","document","activeElement","focus","handleToggleCalendarBox","t10","day","isBefore","clone","startOf","isAfter","clampToBounds","t11","offset","prevDisplayDate_1","daySelected","prevDisplayDate","add","handleNavigateWithDays","t12","when","prevDisplayDate_2","daySelected_0","endOf","handleNavigateWithWeeks","t13","event","isNavigationKey","Boolean","key","shiftKey","altKey","NAVIGATION_KEYS","includes","preventDefault","bb84","Keys","arrowLeft","arrowRight","arrowUp","arrowDown","pageUp","pageDown","home","end","escape","enter","handleKeyDownNavigation","t14","prevDisplayDate_0","subtract"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDateCalendarState.js","sources":["../../../../src/lib/inputs2/date/hooks/useDateCalendarState.ts"],"sourcesContent":["import React from 'react';\nimport moment, { type Moment } from 'moment';\nimport { Keys, type DateSharedContextProps } from '../types';\nimport { NAVIGATION_KEYS, TOKEN_ISO_FORMAT } from '../helpers';\n\ninterface UseDateCalendarStateParams {\n inputRef?: React.RefObject<HTMLInputElement | null>;\n min?: Moment;\n max?: Moment;\n onPressEnter?: (activeDescendant: string) => void;\n}\n\ninterface UseDateCalendarStateReturn extends DateSharedContextProps {\n handleKeyDownNavigation: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\nexport const useDateCalendarState = (\n params: UseDateCalendarStateParams = {},\n): UseDateCalendarStateReturn => {\n const { inputRef, min, max, onPressEnter } = params;\n const [calendarBoxOpen, setCalendarBoxOpen] = React.useState(false);\n const [activeDescendant, setActiveDescendant] = React.useState<string>(\n moment().format(TOKEN_ISO_FORMAT),\n );\n const [calendarDisplayDate, setCalendarDisplayDate] = React.useState<Moment>(moment());\n const calendarRef = React.useRef<HTMLDivElement | null>(null);\n const dateContainerRef = React.useRef<HTMLDivElement | null>(null);\n\n const handleSetCalendarBoxOpen = React.useCallback(\n (value: boolean) => setCalendarBoxOpen(value), [],\n );\n const handleChangeActiveDescendant = React.useCallback(\n (value: string) => setActiveDescendant(value), [],\n );\n const handleChangeCalendarDisplayDate = React.useCallback(\n (value: Moment) => setCalendarDisplayDate(value), [],\n );\n const handleNextMonth = React.useCallback(() => setCalendarDisplayDate(prevDisplayDate =>\n prevDisplayDate.clone().add(1, 'month')), []);\n const handlePreviousMonth = React.useCallback(() => setCalendarDisplayDate(prevDisplayDate =>\n prevDisplayDate.clone().subtract(1, 'month')), []);\n\n const handleToggleCalendarBox = React.useCallback(() => {\n setCalendarBoxOpen((prevState) => {\n if (inputRef?.current !== document.activeElement) {\n inputRef?.current?.focus?.();\n }\n return !prevState;\n });\n }, [inputRef]);\n\n const clampToBounds = (day: Moment) => {\n if (min && day.isBefore(min, 'day')) return min.clone().startOf('day');\n if (max && day.isAfter(max, 'day')) return max.clone().startOf('day');\n return day;\n };\n\n const handleNavigateWithDays = (offset: number) => {\n setCalendarDisplayDate((prevDisplayDate) => {\n const daySelected = clampToBounds(prevDisplayDate.clone().add(offset, 'day'));\n setActiveDescendant(daySelected.format(TOKEN_ISO_FORMAT));\n return daySelected;\n });\n };\n\n const handleNavigateWithWeeks = (when: 'start' | 'end') => {\n setCalendarDisplayDate((prevDisplayDate) => {\n let daySelected = prevDisplayDate;\n if (when === 'end') daySelected = prevDisplayDate.clone().endOf('week');\n if (when === 'start') daySelected = prevDisplayDate.clone().startOf('week');\n daySelected = clampToBounds(daySelected);\n setActiveDescendant(daySelected.format(TOKEN_ISO_FORMAT));\n return daySelected;\n });\n };\n\n const handleKeyDownNavigation = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const isNavigationKey = Boolean(event.key) && !event.shiftKey && !event.altKey &&\n NAVIGATION_KEYS.includes(event.key);\n if (!calendarBoxOpen || !isNavigationKey) return;\n event.preventDefault();\n switch (event.key) {\n case Keys.arrowLeft: handleNavigateWithDays(-1);\n break;\n case Keys.arrowRight: handleNavigateWithDays(1);\n break;\n case Keys.arrowUp: handleNavigateWithDays(-7);\n break;\n case Keys.arrowDown: handleNavigateWithDays(7);\n break;\n case Keys.pageUp: handleNextMonth();\n break;\n case Keys.pageDown: handlePreviousMonth();\n break;\n case Keys.home: handleNavigateWithWeeks('start');\n break;\n case Keys.end: handleNavigateWithWeeks('end');\n break;\n case Keys.escape: setCalendarBoxOpen(false);\n break;\n case Keys.enter: onPressEnter?.(activeDescendant);\n break;\n default:\n break;\n }\n };\n\n return {\n calendarBoxOpen,\n activeDescendant,\n calendarDisplayDate,\n calendarRef,\n dateContainerRef,\n handleNextMonth,\n handlePreviousMonth,\n handleToggleCalendarBox,\n handleSetCalendarBoxOpen,\n handleChangeActiveDescendant,\n handleChangeCalendarDisplayDate,\n handleKeyDownNavigation,\n };\n};\n"],"names":["useDateCalendarState","t0","$","_c","t1","undefined","params","inputRef","min","max","onPressEnter","calendarBoxOpen","setCalendarBoxOpen","React","useState","t2","Symbol","for","moment","format","TOKEN_ISO_FORMAT","activeDescendant","setActiveDescendant","t3","calendarDisplayDate","setCalendarDisplayDate","calendarRef","useRef","dateContainerRef","t4","value","handleSetCalendarBoxOpen","t5","value_0","handleChangeActiveDescendant","t6","value_1","handleChangeCalendarDisplayDate","t7","_temp","handleNextMonth","t8","_temp2","handlePreviousMonth","t9","prevState","current","document","activeElement","focus","handleToggleCalendarBox","t10","day","isBefore","clone","startOf","isAfter","clampToBounds","t11","offset","prevDisplayDate_1","daySelected","prevDisplayDate","add","handleNavigateWithDays","t12","when","prevDisplayDate_2","daySelected_0","endOf","handleNavigateWithWeeks","t13","event","isNavigationKey","Boolean","key","shiftKey","altKey","NAVIGATION_KEYS","includes","preventDefault","bb84","Keys","arrowLeft","arrowRight","arrowUp","arrowDown","pageUp","pageDown","home","end","escape","enter","handleKeyDownNavigation","t14","prevDisplayDate_0","subtract"],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ interface UseDateMaskParams {
|
|
|
6
6
|
variant?: DateVariant;
|
|
7
7
|
defaultValue?: string;
|
|
8
8
|
undigitable?: boolean;
|
|
9
|
+
readOnly?: boolean;
|
|
9
10
|
onCommit: (date: Moment) => void;
|
|
10
11
|
onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;
|
|
11
12
|
onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;
|
|
@@ -13,8 +14,9 @@ interface UseDateMaskParams {
|
|
|
13
14
|
export declare const useDateMask: (params: UseDateMaskParams) => {
|
|
14
15
|
maskedValue: string;
|
|
15
16
|
unmaskedValue: string;
|
|
16
|
-
setMaskValue:
|
|
17
|
+
setMaskValue: (nextValue: string) => void;
|
|
17
18
|
handleOnPaste: (event: React.ClipboardEvent<HTMLInputElement>) => void;
|
|
18
19
|
handleOnBeforeInput: (event: React.InputEvent<HTMLInputElement>) => void;
|
|
20
|
+
handleOnKeyDownCapture: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
19
21
|
};
|
|
20
22
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
2
|
import hooks from "../../../node_modules/moment/dist/moment.js";
|
|
3
3
|
import { useIMask, IMask } from "react-imask";
|
|
4
|
-
import { getDateFormats } from "../helpers.js";
|
|
4
|
+
import { getMaskSegments, canSegmentAcceptDigits, getDateFormats } from "../helpers.js";
|
|
5
5
|
const buildMaskOptions = (variant) => {
|
|
6
6
|
const {
|
|
7
7
|
ptbrFormat
|
|
@@ -12,7 +12,6 @@ const buildMaskOptions = (variant) => {
|
|
|
12
12
|
lazy: false,
|
|
13
13
|
placeholderChar: "_",
|
|
14
14
|
overwrite: true,
|
|
15
|
-
autofix: "pad",
|
|
16
15
|
blocks: {
|
|
17
16
|
d: {
|
|
18
17
|
mask: IMask.MaskedRange,
|
|
@@ -38,13 +37,15 @@ const buildMaskOptions = (variant) => {
|
|
|
38
37
|
mask: IMask.MaskedRange,
|
|
39
38
|
from: 0,
|
|
40
39
|
to: 23,
|
|
41
|
-
maxLength: 2
|
|
40
|
+
maxLength: 2,
|
|
41
|
+
autofix: "pad"
|
|
42
42
|
},
|
|
43
43
|
M: {
|
|
44
44
|
mask: IMask.MaskedRange,
|
|
45
45
|
from: 0,
|
|
46
46
|
to: 59,
|
|
47
|
-
maxLength: 2
|
|
47
|
+
maxLength: 2,
|
|
48
|
+
autofix: "pad"
|
|
48
49
|
}
|
|
49
50
|
},
|
|
50
51
|
format: (date) => hooks(date).format(ptbrFormat),
|
|
@@ -52,125 +53,88 @@ const buildMaskOptions = (variant) => {
|
|
|
52
53
|
};
|
|
53
54
|
};
|
|
54
55
|
const useDateMask = (params) => {
|
|
55
|
-
const $ = compilerRuntimeExports.c(23);
|
|
56
56
|
const {
|
|
57
57
|
inputRef,
|
|
58
|
-
variant
|
|
58
|
+
variant = "date",
|
|
59
59
|
defaultValue,
|
|
60
|
-
undigitable
|
|
60
|
+
undigitable = false,
|
|
61
|
+
readOnly = false,
|
|
61
62
|
onCommit,
|
|
62
63
|
onPaste,
|
|
63
64
|
onBeforeInput
|
|
64
65
|
} = params;
|
|
65
|
-
const variant = t0 === void 0 ? "date" : t0;
|
|
66
|
-
const undigitable = t1 === void 0 ? false : t1;
|
|
67
|
-
let t2;
|
|
68
|
-
if ($[0] !== variant) {
|
|
69
|
-
t2 = getDateFormats(variant);
|
|
70
|
-
$[0] = variant;
|
|
71
|
-
$[1] = t2;
|
|
72
|
-
} else {
|
|
73
|
-
t2 = $[1];
|
|
74
|
-
}
|
|
75
66
|
const {
|
|
76
67
|
ptbrFormat
|
|
77
|
-
} =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const date = hooks(acceptedValue, ptbrFormat);
|
|
94
|
-
if (date.isValid()) {
|
|
95
|
-
onCommit(date);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
$[4] = onCommit;
|
|
99
|
-
$[5] = ptbrFormat;
|
|
100
|
-
$[6] = t4;
|
|
101
|
-
} else {
|
|
102
|
-
t4 = $[6];
|
|
103
|
-
}
|
|
104
|
-
let t5;
|
|
105
|
-
if ($[7] !== defaultValue || $[8] !== inputRef || $[9] !== t4) {
|
|
106
|
-
t5 = {
|
|
107
|
-
ref: inputRef,
|
|
108
|
-
defaultValue,
|
|
109
|
-
onAccept: t4
|
|
110
|
-
};
|
|
111
|
-
$[7] = defaultValue;
|
|
112
|
-
$[8] = inputRef;
|
|
113
|
-
$[9] = t4;
|
|
114
|
-
$[10] = t5;
|
|
115
|
-
} else {
|
|
116
|
-
t5 = $[10];
|
|
117
|
-
}
|
|
68
|
+
} = getDateFormats(variant);
|
|
69
|
+
const maskOptions = React.useMemo(() => buildMaskOptions(variant), [variant]);
|
|
70
|
+
const onCommitRef = React.useRef(onCommit);
|
|
71
|
+
onCommitRef.current = onCommit;
|
|
72
|
+
const programmaticValueRef = React.useRef(null);
|
|
73
|
+
const handleAccept = (acceptedValue, mask) => {
|
|
74
|
+
if (acceptedValue === programmaticValueRef.current) {
|
|
75
|
+
programmaticValueRef.current = null;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!mask?.masked?.isComplete) return;
|
|
79
|
+
const date = hooks(acceptedValue, ptbrFormat);
|
|
80
|
+
if (date.isValid()) {
|
|
81
|
+
onCommitRef.current(date);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
118
84
|
const {
|
|
119
85
|
value,
|
|
120
86
|
unmaskedValue,
|
|
121
87
|
setValue
|
|
122
|
-
} = useIMask(maskOptions,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
return t8;
|
|
88
|
+
} = useIMask(maskOptions, {
|
|
89
|
+
ref: inputRef,
|
|
90
|
+
defaultValue,
|
|
91
|
+
onAccept: handleAccept
|
|
92
|
+
});
|
|
93
|
+
const setMaskValue = (nextValue) => {
|
|
94
|
+
programmaticValueRef.current = nextValue;
|
|
95
|
+
setValue(nextValue);
|
|
96
|
+
};
|
|
97
|
+
const handleOnKeyDownCapture = (event) => {
|
|
98
|
+
if (undigitable || readOnly) return;
|
|
99
|
+
if (event.ctrlKey || event.metaKey || event.altKey) return;
|
|
100
|
+
if (event.key.length !== 1 || !/\d/.test(event.key)) return;
|
|
101
|
+
const input = inputRef.current;
|
|
102
|
+
const start = input?.selectionStart;
|
|
103
|
+
const end = input?.selectionEnd;
|
|
104
|
+
if (!input || start == null || end == null) return;
|
|
105
|
+
const segment = getMaskSegments(ptbrFormat).find((item) => start < item.end);
|
|
106
|
+
if (!segment || end > segment.end) return;
|
|
107
|
+
const hasSelection = end > start;
|
|
108
|
+
const caret = hasSelection ? segment.start : Math.max(start, segment.start);
|
|
109
|
+
const typed = hasSelection ? event.key : input.value.slice(segment.start, caret).replace(/\D/g, "") + event.key;
|
|
110
|
+
if (!canSegmentAcceptDigits(typed, segment.key)) {
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
input.setSelectionRange(caret, segment.end);
|
|
115
|
+
};
|
|
116
|
+
const handleOnPaste = (event_0) => {
|
|
117
|
+
if (undigitable) {
|
|
118
|
+
event_0.preventDefault();
|
|
119
|
+
} else {
|
|
120
|
+
onPaste?.(event_0);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const handleOnBeforeInput = (event_1) => {
|
|
124
|
+
if (undigitable) {
|
|
125
|
+
event_1.preventDefault();
|
|
126
|
+
} else {
|
|
127
|
+
onBeforeInput?.(event_1);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
maskedValue: value,
|
|
132
|
+
unmaskedValue,
|
|
133
|
+
setMaskValue,
|
|
134
|
+
handleOnPaste,
|
|
135
|
+
handleOnBeforeInput,
|
|
136
|
+
handleOnKeyDownCapture
|
|
137
|
+
};
|
|
174
138
|
};
|
|
175
139
|
export {
|
|
176
140
|
useDateMask
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateMask.js","sources":["../../../../src/lib/inputs2/date/hooks/useDateMask.ts"],"sourcesContent":["import React from 'react';\nimport moment, { type Moment } from 'moment';\nimport { useIMask, IMask } from 'react-imask';\nimport type { DateVariant } from '../types';\nimport { getDateFormats } from '../helpers';\n\ninterface UseDateMaskParams {\n inputRef: React.RefObject<HTMLInputElement | null>;\n variant?: DateVariant;\n defaultValue?: string;\n undigitable?: boolean;\n onCommit: (date: Moment) => void;\n onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;\n onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;\n}\n\
|
|
1
|
+
{"version":3,"file":"useDateMask.js","sources":["../../../../src/lib/inputs2/date/hooks/useDateMask.ts"],"sourcesContent":["import React from 'react';\nimport moment, { type Moment } from 'moment';\nimport { useIMask, IMask } from 'react-imask';\nimport type { DateVariant } from '../types';\nimport { canSegmentAcceptDigits, getDateFormats, getMaskSegments } from '../helpers';\n\ninterface UseDateMaskParams {\n inputRef: React.RefObject<HTMLInputElement | null>;\n variant?: DateVariant;\n defaultValue?: string;\n undigitable?: boolean;\n readOnly?: boolean;\n onCommit: (date: Moment) => void;\n onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;\n onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;\n}\n\nconst buildMaskOptions = (variant: DateVariant) => {\n const { ptbrFormat } = getDateFormats(variant);\n return {\n mask: Date,\n pattern: variant === 'datetime' ? '`d/`m/`Y `H:`M' : '`d/`m/`Y',\n lazy: false,\n placeholderChar: '_',\n overwrite: true,\n blocks: {\n d: { mask: IMask.MaskedRange, from: 1, to: 31, maxLength: 2, autofix: 'pad' },\n m: { mask: IMask.MaskedRange, from: 1, to: 12, maxLength: 2, autofix: 'pad' },\n Y: { mask: IMask.MaskedRange, from: 1900, to: 2099, maxLength: 4 },\n H: { mask: IMask.MaskedRange, from: 0, to: 23, maxLength: 2, autofix: 'pad' },\n M: { mask: IMask.MaskedRange, from: 0, to: 59, maxLength: 2, autofix: 'pad' },\n },\n format: (date: Date) => moment(date).format(ptbrFormat),\n parse: (value: string) => moment(value, ptbrFormat).toDate(),\n } as any;\n};\n\nexport const useDateMask = (params: UseDateMaskParams) => {\n const {\n inputRef, variant = 'date', defaultValue, undigitable = false, readOnly = false,\n onCommit, onPaste, onBeforeInput,\n } = params;\n const { ptbrFormat } = getDateFormats(variant);\n const maskOptions = React.useMemo(() => buildMaskOptions(variant), [variant]);\n\n const onCommitRef = React.useRef(onCommit);\n onCommitRef.current = onCommit;\n const programmaticValueRef = React.useRef<string | null>(null);\n\n const handleAccept = (acceptedValue: string, mask: any) => {\n if (acceptedValue === programmaticValueRef.current) {\n programmaticValueRef.current = null;\n return;\n }\n if (!mask?.masked?.isComplete) return;\n const date = moment(acceptedValue, ptbrFormat);\n if (date.isValid()) { onCommitRef.current(date); }\n };\n\n const { value, unmaskedValue, setValue } = useIMask(maskOptions, {\n ref: inputRef,\n defaultValue,\n onAccept: handleAccept,\n });\n\n const setMaskValue = (nextValue: string) => {\n programmaticValueRef.current = nextValue;\n setValue(nextValue);\n };\n\n const handleOnKeyDownCapture = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (undigitable || readOnly) return;\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n if (event.key.length !== 1 || !/\\d/.test(event.key)) return;\n const input = inputRef.current;\n const start = input?.selectionStart;\n const end = input?.selectionEnd;\n if (!input || start == null || end == null) return;\n const segment = getMaskSegments(ptbrFormat).find(item => start < item.end);\n if (!segment || end > segment.end) return;\n const hasSelection = end > start;\n const caret = hasSelection ? segment.start : Math.max(start, segment.start);\n const typed = hasSelection\n ? event.key\n : input.value.slice(segment.start, caret).replace(/\\D/g, '') + event.key;\n if (!canSegmentAcceptDigits(typed, segment.key)) {\n event.preventDefault();\n return;\n }\n input.setSelectionRange(caret, segment.end);\n };\n\n const handleOnPaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n if (undigitable) {\n event.preventDefault();\n } else {\n onPaste?.(event);\n }\n };\n\n const handleOnBeforeInput = (event: React.InputEvent<HTMLInputElement>) => {\n if (undigitable) {\n event.preventDefault();\n } else {\n onBeforeInput?.(event);\n }\n };\n\n return {\n maskedValue: value,\n unmaskedValue,\n setMaskValue,\n handleOnPaste,\n handleOnBeforeInput,\n handleOnKeyDownCapture,\n };\n};\n"],"names":["buildMaskOptions","variant","ptbrFormat","getDateFormats","mask","Date","pattern","lazy","placeholderChar","overwrite","blocks","d","IMask","MaskedRange","from","to","maxLength","autofix","m","Y","H","M","format","date","moment","parse","value","toDate","useDateMask","params","inputRef","defaultValue","undigitable","readOnly","onCommit","onPaste","onBeforeInput","maskOptions","React","useMemo","onCommitRef","useRef","current","programmaticValueRef","handleAccept","acceptedValue","masked","isComplete","isValid","unmaskedValue","setValue","useIMask","ref","onAccept","setMaskValue","nextValue","handleOnKeyDownCapture","event","ctrlKey","metaKey","altKey","key","length","test","input","start","selectionStart","end","selectionEnd","segment","getMaskSegments","find","item","hasSelection","caret","Math","max","typed","slice","replace","canSegmentAcceptDigits","preventDefault","setSelectionRange","handleOnPaste","handleOnBeforeInput","maskedValue"],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Moment } from 'moment';
|
|
2
2
|
interface TimeSelectorProps {
|
|
3
|
-
/** null desabilita o seletor inteiro */
|
|
4
3
|
value: Moment | null;
|
|
5
|
-
|
|
4
|
+
selectedHour: number | null;
|
|
5
|
+
selectedMinute: number | null;
|
|
6
|
+
onSelectHour: (hour: number) => void;
|
|
7
|
+
onSelectMinute: (minute: number) => void;
|
|
6
8
|
min?: Moment;
|
|
7
9
|
max?: Moment;
|
|
8
10
|
testIdPrefix: string;
|