linear-react-components-ui 2.1.0-beta.1 → 2.1.0-beta.2

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 (44) hide show
  1. package/lib/assets/styles/datepicker2.css +77 -4
  2. package/lib/inputs2/date/calendarbox.d.ts +23 -0
  3. package/lib/inputs2/date/calendarbox.js +254 -0
  4. package/lib/inputs2/date/calendarbox.js.map +1 -0
  5. package/lib/inputs2/date/datefield/base.js +590 -214
  6. package/lib/inputs2/date/datefield/base.js.map +1 -1
  7. package/lib/inputs2/date/datefield/triggers.js +4 -4
  8. package/lib/inputs2/date/datefield/triggers.js.map +1 -1
  9. package/lib/inputs2/date/datefield/types.d.ts +5 -12
  10. package/lib/inputs2/date/dateperiodfield/base.js +543 -674
  11. package/lib/inputs2/date/dateperiodfield/base.js.map +1 -1
  12. package/lib/inputs2/date/dateperiodfield/triggers.js +21 -9
  13. package/lib/inputs2/date/dateperiodfield/triggers.js.map +1 -1
  14. package/lib/inputs2/date/dateperiodfield/types.d.ts +7 -23
  15. package/lib/inputs2/date/helpers.d.ts +21 -4
  16. package/lib/inputs2/date/helpers.js +64 -4
  17. package/lib/inputs2/date/helpers.js.map +1 -1
  18. package/lib/inputs2/date/{base/constants.d.ts → hooks/useCalendarPosition.d.ts} +1 -1
  19. package/lib/inputs2/date/hooks/useCalendarPosition.js +93 -0
  20. package/lib/inputs2/date/hooks/useCalendarPosition.js.map +1 -0
  21. package/lib/inputs2/date/hooks/useDateCalendarState.d.ts +14 -0
  22. package/lib/inputs2/date/hooks/useDateCalendarState.js +250 -0
  23. package/lib/inputs2/date/hooks/useDateCalendarState.js.map +1 -0
  24. package/lib/inputs2/date/hooks/useDateMask.d.ts +20 -0
  25. package/lib/inputs2/date/hooks/useDateMask.js +178 -0
  26. package/lib/inputs2/date/hooks/useDateMask.js.map +1 -0
  27. package/lib/inputs2/date/timeselector.d.ts +15 -0
  28. package/lib/inputs2/date/timeselector.js +228 -0
  29. package/lib/inputs2/date/timeselector.js.map +1 -0
  30. package/lib/inputs2/date/types.d.ts +16 -1
  31. package/lib/inputs2/date/types.js.map +1 -1
  32. package/lib/menus/float/SubMenuContainer.js +8 -16
  33. package/lib/menus/float/SubMenuContainer.js.map +1 -1
  34. package/lib/node_modules/moment/dist/locale/pt-br.js +54 -0
  35. package/lib/node_modules/moment/dist/locale/pt-br.js.map +1 -0
  36. package/package.json +1 -1
  37. package/lib/inputs2/date/base/constants.js +0 -69
  38. package/lib/inputs2/date/base/constants.js.map +0 -1
  39. package/lib/inputs2/date/datefield/calendarbox.d.ts +0 -6
  40. package/lib/inputs2/date/datefield/calendarbox.js +0 -228
  41. package/lib/inputs2/date/datefield/calendarbox.js.map +0 -1
  42. package/lib/inputs2/date/dateperiodfield/calendarbox.d.ts +0 -6
  43. package/lib/inputs2/date/dateperiodfield/calendarbox.js +0 -282
  44. package/lib/inputs2/date/dateperiodfield/calendarbox.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { c as compilerRuntimeExports } from "../../../_virtual/compiler-runtime.js";
2
+ import { useState, useRef, useLayoutEffect } from "react";
3
+ const getOuterHeight = (element) => {
4
+ if (!element) return 0;
5
+ const {
6
+ borderTopWidth,
7
+ borderBottomWidth,
8
+ marginTop,
9
+ marginBottom
10
+ } = getComputedStyle(element);
11
+ const toNumber = (value) => parseFloat(value) || 0;
12
+ return element.scrollHeight + toNumber(borderTopWidth) + toNumber(borderBottomWidth) + toNumber(marginTop) + toNumber(marginBottom);
13
+ };
14
+ const useCalendarPosition = (calendarBoxOpen, containerRef, calendarBoxRef) => {
15
+ const $ = compilerRuntimeExports.c(8);
16
+ let t0;
17
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
18
+ t0 = {
19
+ top: 0,
20
+ left: 0,
21
+ position: "absolute"
22
+ };
23
+ $[0] = t0;
24
+ } else {
25
+ t0 = $[0];
26
+ }
27
+ const [calendarBoxStyles, setCalendarBoxStyles] = useState(t0);
28
+ const shouldAlignRight = useRef(false);
29
+ const shouldFlipAbove = useRef(false);
30
+ let t1;
31
+ let t2;
32
+ if ($[1] !== calendarBoxOpen || $[2] !== calendarBoxRef || $[3] !== containerRef) {
33
+ t1 = () => {
34
+ const updatePosition = (shouldReviewAlignment) => {
35
+ const anchor = containerRef.current?.getBoundingClientRect();
36
+ if (!anchor) {
37
+ return;
38
+ }
39
+ const measuredWidth = calendarBoxRef.current?.getBoundingClientRect().width ?? 0;
40
+ const boxWidth = Math.max(anchor.width, measuredWidth);
41
+ const boxHeight = getOuterHeight(calendarBoxRef.current);
42
+ if (shouldReviewAlignment) {
43
+ shouldAlignRight.current = anchor.left + boxWidth > window.innerWidth;
44
+ shouldFlipAbove.current = anchor.bottom + boxHeight > window.innerHeight && anchor.top - boxHeight >= 0;
45
+ }
46
+ const alignedLeft = shouldAlignRight.current ? Math.max(0, anchor.right - boxWidth) : anchor.left;
47
+ const alignedTop = shouldFlipAbove.current ? anchor.top - boxHeight : anchor.top + anchor.height;
48
+ setCalendarBoxStyles({
49
+ top: alignedTop + window.scrollY,
50
+ left: alignedLeft + window.scrollX,
51
+ width: anchor.width,
52
+ position: "absolute"
53
+ });
54
+ };
55
+ const handleScroll = () => updatePosition(false);
56
+ const handleResize = () => updatePosition(true);
57
+ if (calendarBoxOpen) {
58
+ updatePosition(true);
59
+ window.addEventListener("resize", handleResize);
60
+ window.addEventListener("scroll", handleScroll, true);
61
+ }
62
+ return () => {
63
+ window.removeEventListener("resize", handleResize);
64
+ window.removeEventListener("scroll", handleScroll, true);
65
+ };
66
+ };
67
+ t2 = [calendarBoxOpen, containerRef, calendarBoxRef];
68
+ $[1] = calendarBoxOpen;
69
+ $[2] = calendarBoxRef;
70
+ $[3] = containerRef;
71
+ $[4] = t1;
72
+ $[5] = t2;
73
+ } else {
74
+ t1 = $[4];
75
+ t2 = $[5];
76
+ }
77
+ useLayoutEffect(t1, t2);
78
+ let t3;
79
+ if ($[6] !== calendarBoxStyles) {
80
+ t3 = {
81
+ calendarBoxStyles
82
+ };
83
+ $[6] = calendarBoxStyles;
84
+ $[7] = t3;
85
+ } else {
86
+ t3 = $[7];
87
+ }
88
+ return t3;
89
+ };
90
+ export {
91
+ useCalendarPosition
92
+ };
93
+ //# sourceMappingURL=useCalendarPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendarPosition.js","sources":["../../../../src/lib/inputs2/date/hooks/useCalendarPosition.ts"],"sourcesContent":["import { CSSProperties, RefObject, useLayoutEffect, useRef, useState } from 'react';\n\n// A animação de abertura anima a altura: no primeiro frame o box mede quase zero, e é a\n// altura final que decide o flip.\nconst getOuterHeight = (element: HTMLDivElement | null) => {\n if (!element) return 0;\n const { borderTopWidth, borderBottomWidth, marginTop, marginBottom } = getComputedStyle(element);\n const toNumber = (value: string) => parseFloat(value) || 0;\n return element.scrollHeight + toNumber(borderTopWidth) + toNumber(borderBottomWidth)\n + toNumber(marginTop) + toNumber(marginBottom);\n};\n\nexport const useCalendarPosition = (\n calendarBoxOpen: boolean,\n containerRef: RefObject<HTMLDivElement | null>,\n calendarBoxRef: RefObject<HTMLDivElement | null>,\n) => {\n // Em `static` o box ocupa a largura inteira do `body`, e é essa largura que a primeira\n // medição leria.\n const [calendarBoxStyles, setCalendarBoxStyles] = useState<CSSProperties>({\n top: 0,\n left: 0,\n position: 'absolute',\n });\n const shouldAlignRight = useRef(false);\n const shouldFlipAbove = useRef(false);\n\n useLayoutEffect(() => {\n const updatePosition = (shouldReviewAlignment: boolean) => {\n const anchor = containerRef.current?.getBoundingClientRect();\n if (!anchor) return;\n // A largura mínima do box mora no SCSS, então ela é medida e não deduzida.\n const measuredWidth = calendarBoxRef.current?.getBoundingClientRect().width ?? 0;\n const boxWidth = Math.max(anchor.width, measuredWidth);\n const boxHeight = getOuterHeight(calendarBoxRef.current);\n // Refazer estas contas a cada scroll faria o box saltar no meio do gesto.\n if (shouldReviewAlignment) {\n shouldAlignRight.current = anchor.left + boxWidth > window.innerWidth;\n shouldFlipAbove.current = anchor.bottom + boxHeight > window.innerHeight\n && anchor.top - boxHeight >= 0;\n }\n const alignedLeft = shouldAlignRight.current\n ? Math.max(0, anchor.right - boxWidth)\n : anchor.left;\n const alignedTop = shouldFlipAbove.current\n ? anchor.top - boxHeight\n : anchor.top + anchor.height;\n setCalendarBoxStyles({\n top: alignedTop + window.scrollY,\n left: alignedLeft + window.scrollX,\n width: anchor.width,\n position: 'absolute',\n });\n };\n\n const handleScroll = () => updatePosition(false);\n const handleResize = () => updatePosition(true);\n\n if (calendarBoxOpen) {\n updatePosition(true);\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleScroll, true);\n }\n\n return () => {\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleScroll, true);\n };\n }, [calendarBoxOpen, containerRef, calendarBoxRef]);\n\n return { calendarBoxStyles };\n};\n"],"names":["getOuterHeight","element","borderTopWidth","borderBottomWidth","marginTop","marginBottom","getComputedStyle","toNumber","value","parseFloat","scrollHeight","useCalendarPosition","calendarBoxOpen","containerRef","calendarBoxRef","$","_c","t0","Symbol","for","top","left","position","calendarBoxStyles","setCalendarBoxStyles","useState","shouldAlignRight","useRef","shouldFlipAbove","t1","t2","updatePosition","shouldReviewAlignment","anchor","current","getBoundingClientRect","measuredWidth","width","boxWidth","Math","max","boxHeight","window","innerWidth","bottom","innerHeight","alignedLeft","right","alignedTop","height","scrollY","scrollX","handleScroll","handleResize","addEventListener","removeEventListener","useLayoutEffect","t3"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ import { Moment } from 'moment';
3
+ import { DateSharedContextProps } from '../types';
4
+ interface UseDateCalendarStateParams {
5
+ inputRef?: React.RefObject<HTMLInputElement | null>;
6
+ min?: Moment;
7
+ max?: Moment;
8
+ onPressEnter?: (activeDescendant: string) => void;
9
+ }
10
+ interface UseDateCalendarStateReturn extends DateSharedContextProps {
11
+ handleKeyDownNavigation: (event: React.KeyboardEvent<HTMLInputElement>) => void;
12
+ }
13
+ export declare const useDateCalendarState: (params?: UseDateCalendarStateParams) => UseDateCalendarStateReturn;
14
+ export {};
@@ -0,0 +1,250 @@
1
+ import { c as compilerRuntimeExports } from "../../../_virtual/compiler-runtime.js";
2
+ import React from "react";
3
+ import hooks from "../../../node_modules/moment/dist/moment.js";
4
+ import { Keys } from "../types.js";
5
+ import { TOKEN_ISO_FORMAT, NAVIGATION_KEYS } from "../helpers.js";
6
+ const useDateCalendarState = (t0) => {
7
+ const $ = compilerRuntimeExports.c(30);
8
+ let t1;
9
+ if ($[0] !== t0) {
10
+ t1 = t0 === void 0 ? {} : t0;
11
+ $[0] = t0;
12
+ $[1] = t1;
13
+ } else {
14
+ t1 = $[1];
15
+ }
16
+ const params = t1;
17
+ const {
18
+ inputRef,
19
+ min,
20
+ max,
21
+ onPressEnter
22
+ } = params;
23
+ const [calendarBoxOpen, setCalendarBoxOpen] = React.useState(false);
24
+ let t2;
25
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
26
+ t2 = hooks().format(TOKEN_ISO_FORMAT);
27
+ $[2] = t2;
28
+ } else {
29
+ t2 = $[2];
30
+ }
31
+ const [activeDescendant, setActiveDescendant] = React.useState(t2);
32
+ let t3;
33
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
34
+ t3 = hooks();
35
+ $[3] = t3;
36
+ } else {
37
+ t3 = $[3];
38
+ }
39
+ const [calendarDisplayDate, setCalendarDisplayDate] = React.useState(t3);
40
+ const calendarRef = React.useRef(null);
41
+ const dateContainerRef = React.useRef(null);
42
+ let t4;
43
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
44
+ t4 = (value) => setCalendarBoxOpen(value);
45
+ $[4] = t4;
46
+ } else {
47
+ t4 = $[4];
48
+ }
49
+ const handleSetCalendarBoxOpen = t4;
50
+ let t5;
51
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
52
+ t5 = (value_0) => setActiveDescendant(value_0);
53
+ $[5] = t5;
54
+ } else {
55
+ t5 = $[5];
56
+ }
57
+ const handleChangeActiveDescendant = t5;
58
+ let t6;
59
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
60
+ t6 = (value_1) => setCalendarDisplayDate(value_1);
61
+ $[6] = t6;
62
+ } else {
63
+ t6 = $[6];
64
+ }
65
+ const handleChangeCalendarDisplayDate = t6;
66
+ let t7;
67
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
68
+ t7 = () => setCalendarDisplayDate(_temp);
69
+ $[7] = t7;
70
+ } else {
71
+ t7 = $[7];
72
+ }
73
+ const handleNextMonth = t7;
74
+ let t8;
75
+ if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
76
+ t8 = () => setCalendarDisplayDate(_temp2);
77
+ $[8] = t8;
78
+ } else {
79
+ t8 = $[8];
80
+ }
81
+ const handlePreviousMonth = t8;
82
+ let t9;
83
+ if ($[9] !== inputRef) {
84
+ t9 = () => {
85
+ setCalendarBoxOpen((prevState) => {
86
+ if (inputRef?.current !== document.activeElement) {
87
+ inputRef?.current?.focus?.();
88
+ }
89
+ return !prevState;
90
+ });
91
+ };
92
+ $[9] = inputRef;
93
+ $[10] = t9;
94
+ } else {
95
+ t9 = $[10];
96
+ }
97
+ const handleToggleCalendarBox = t9;
98
+ let t10;
99
+ if ($[11] !== max || $[12] !== min) {
100
+ t10 = (day) => {
101
+ if (min && day.isBefore(min, "day")) {
102
+ return min.clone().startOf("day");
103
+ }
104
+ if (max && day.isAfter(max, "day")) {
105
+ return max.clone().startOf("day");
106
+ }
107
+ return day;
108
+ };
109
+ $[11] = max;
110
+ $[12] = min;
111
+ $[13] = t10;
112
+ } else {
113
+ t10 = $[13];
114
+ }
115
+ const clampToBounds = t10;
116
+ let t11;
117
+ if ($[14] !== clampToBounds) {
118
+ t11 = (offset) => {
119
+ setCalendarDisplayDate((prevDisplayDate_1) => {
120
+ const daySelected = clampToBounds(prevDisplayDate_1.clone().add(offset, "day"));
121
+ setActiveDescendant(daySelected.format(TOKEN_ISO_FORMAT));
122
+ return daySelected;
123
+ });
124
+ };
125
+ $[14] = clampToBounds;
126
+ $[15] = t11;
127
+ } else {
128
+ t11 = $[15];
129
+ }
130
+ const handleNavigateWithDays = t11;
131
+ let t12;
132
+ if ($[16] !== clampToBounds) {
133
+ t12 = (when) => {
134
+ setCalendarDisplayDate((prevDisplayDate_2) => {
135
+ let daySelected_0 = prevDisplayDate_2;
136
+ if (when === "end") {
137
+ daySelected_0 = prevDisplayDate_2.clone().endOf("week");
138
+ }
139
+ if (when === "start") {
140
+ daySelected_0 = prevDisplayDate_2.clone().startOf("week");
141
+ }
142
+ daySelected_0 = clampToBounds(daySelected_0);
143
+ setActiveDescendant(daySelected_0.format(TOKEN_ISO_FORMAT));
144
+ return daySelected_0;
145
+ });
146
+ };
147
+ $[16] = clampToBounds;
148
+ $[17] = t12;
149
+ } else {
150
+ t12 = $[17];
151
+ }
152
+ const handleNavigateWithWeeks = t12;
153
+ let t13;
154
+ if ($[18] !== activeDescendant || $[19] !== calendarBoxOpen || $[20] !== handleNavigateWithDays || $[21] !== handleNavigateWithWeeks || $[22] !== onPressEnter) {
155
+ t13 = (event) => {
156
+ const isNavigationKey = Boolean(event.key) && !event.shiftKey && !event.altKey && NAVIGATION_KEYS.includes(event.key);
157
+ if (!calendarBoxOpen || !isNavigationKey) {
158
+ return;
159
+ }
160
+ event.preventDefault();
161
+ bb84: switch (event.key) {
162
+ case Keys.arrowLeft: {
163
+ handleNavigateWithDays(-1);
164
+ break bb84;
165
+ }
166
+ case Keys.arrowRight: {
167
+ handleNavigateWithDays(1);
168
+ break bb84;
169
+ }
170
+ case Keys.arrowUp: {
171
+ handleNavigateWithDays(-7);
172
+ break bb84;
173
+ }
174
+ case Keys.arrowDown: {
175
+ handleNavigateWithDays(7);
176
+ break bb84;
177
+ }
178
+ case Keys.pageUp: {
179
+ handleNextMonth();
180
+ break bb84;
181
+ }
182
+ case Keys.pageDown: {
183
+ handlePreviousMonth();
184
+ break bb84;
185
+ }
186
+ case Keys.home: {
187
+ handleNavigateWithWeeks("start");
188
+ break bb84;
189
+ }
190
+ case Keys.end: {
191
+ handleNavigateWithWeeks("end");
192
+ break bb84;
193
+ }
194
+ case Keys.escape: {
195
+ setCalendarBoxOpen(false);
196
+ break bb84;
197
+ }
198
+ case Keys.enter: {
199
+ onPressEnter?.(activeDescendant);
200
+ break bb84;
201
+ }
202
+ }
203
+ };
204
+ $[18] = activeDescendant;
205
+ $[19] = calendarBoxOpen;
206
+ $[20] = handleNavigateWithDays;
207
+ $[21] = handleNavigateWithWeeks;
208
+ $[22] = onPressEnter;
209
+ $[23] = t13;
210
+ } else {
211
+ t13 = $[23];
212
+ }
213
+ const handleKeyDownNavigation = t13;
214
+ let t14;
215
+ if ($[24] !== activeDescendant || $[25] !== calendarBoxOpen || $[26] !== calendarDisplayDate || $[27] !== handleKeyDownNavigation || $[28] !== handleToggleCalendarBox) {
216
+ t14 = {
217
+ calendarBoxOpen,
218
+ activeDescendant,
219
+ calendarDisplayDate,
220
+ calendarRef,
221
+ dateContainerRef,
222
+ handleNextMonth,
223
+ handlePreviousMonth,
224
+ handleToggleCalendarBox,
225
+ handleSetCalendarBoxOpen,
226
+ handleChangeActiveDescendant,
227
+ handleChangeCalendarDisplayDate,
228
+ handleKeyDownNavigation
229
+ };
230
+ $[24] = activeDescendant;
231
+ $[25] = calendarBoxOpen;
232
+ $[26] = calendarDisplayDate;
233
+ $[27] = handleKeyDownNavigation;
234
+ $[28] = handleToggleCalendarBox;
235
+ $[29] = t14;
236
+ } else {
237
+ t14 = $[29];
238
+ }
239
+ return t14;
240
+ };
241
+ function _temp(prevDisplayDate) {
242
+ return prevDisplayDate.clone().add(1, "month");
243
+ }
244
+ function _temp2(prevDisplayDate_0) {
245
+ return prevDisplayDate_0.clone().subtract(1, "month");
246
+ }
247
+ export {
248
+ useDateCalendarState
249
+ };
250
+ //# sourceMappingURL=useDateCalendarState.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ import { Moment } from 'moment';
3
+ import { DateVariant } from '../types';
4
+ interface UseDateMaskParams {
5
+ inputRef: React.RefObject<HTMLInputElement | null>;
6
+ variant?: DateVariant;
7
+ defaultValue?: string;
8
+ undigitable?: boolean;
9
+ onCommit: (date: Moment) => void;
10
+ onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;
11
+ onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;
12
+ }
13
+ export declare const useDateMask: (params: UseDateMaskParams) => {
14
+ maskedValue: string;
15
+ unmaskedValue: string;
16
+ setMaskValue: React.Dispatch<string>;
17
+ handleOnPaste: (event: React.ClipboardEvent<HTMLInputElement>) => void;
18
+ handleOnBeforeInput: (event: React.InputEvent<HTMLInputElement>) => void;
19
+ };
20
+ export {};
@@ -0,0 +1,178 @@
1
+ import { c as compilerRuntimeExports } from "../../../_virtual/compiler-runtime.js";
2
+ import hooks from "../../../node_modules/moment/dist/moment.js";
3
+ import { useIMask, IMask } from "react-imask";
4
+ import { getDateFormats } from "../helpers.js";
5
+ const buildMaskOptions = (variant) => {
6
+ const {
7
+ ptbrFormat
8
+ } = getDateFormats(variant);
9
+ return {
10
+ mask: Date,
11
+ pattern: variant === "datetime" ? "`d/`m/`Y `H:`M" : "`d/`m/`Y",
12
+ lazy: false,
13
+ placeholderChar: "_",
14
+ overwrite: true,
15
+ autofix: "pad",
16
+ blocks: {
17
+ d: {
18
+ mask: IMask.MaskedRange,
19
+ from: 1,
20
+ to: 31,
21
+ maxLength: 2,
22
+ autofix: "pad"
23
+ },
24
+ m: {
25
+ mask: IMask.MaskedRange,
26
+ from: 1,
27
+ to: 12,
28
+ maxLength: 2,
29
+ autofix: "pad"
30
+ },
31
+ Y: {
32
+ mask: IMask.MaskedRange,
33
+ from: 1900,
34
+ to: 2099,
35
+ maxLength: 4
36
+ },
37
+ H: {
38
+ mask: IMask.MaskedRange,
39
+ from: 0,
40
+ to: 23,
41
+ maxLength: 2
42
+ },
43
+ M: {
44
+ mask: IMask.MaskedRange,
45
+ from: 0,
46
+ to: 59,
47
+ maxLength: 2
48
+ }
49
+ },
50
+ format: (date) => hooks(date).format(ptbrFormat),
51
+ parse: (value) => hooks(value, ptbrFormat).toDate()
52
+ };
53
+ };
54
+ const useDateMask = (params) => {
55
+ const $ = compilerRuntimeExports.c(23);
56
+ const {
57
+ inputRef,
58
+ variant: t0,
59
+ defaultValue,
60
+ undigitable: t1,
61
+ onCommit,
62
+ onPaste,
63
+ onBeforeInput
64
+ } = 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
+ const {
76
+ ptbrFormat
77
+ } = t2;
78
+ let t3;
79
+ if ($[2] !== variant) {
80
+ t3 = buildMaskOptions(variant);
81
+ $[2] = variant;
82
+ $[3] = t3;
83
+ } else {
84
+ t3 = $[3];
85
+ }
86
+ const maskOptions = t3;
87
+ let t4;
88
+ if ($[4] !== onCommit || $[5] !== ptbrFormat) {
89
+ t4 = (acceptedValue, mask) => {
90
+ if (!mask?.masked?.isComplete) {
91
+ return;
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
+ }
118
+ const {
119
+ value,
120
+ unmaskedValue,
121
+ setValue
122
+ } = useIMask(maskOptions, t5);
123
+ let t6;
124
+ if ($[11] !== onPaste || $[12] !== undigitable) {
125
+ t6 = (event) => {
126
+ if (undigitable) {
127
+ event.preventDefault();
128
+ } else {
129
+ onPaste?.(event);
130
+ }
131
+ };
132
+ $[11] = onPaste;
133
+ $[12] = undigitable;
134
+ $[13] = t6;
135
+ } else {
136
+ t6 = $[13];
137
+ }
138
+ const handleOnPaste = t6;
139
+ let t7;
140
+ if ($[14] !== onBeforeInput || $[15] !== undigitable) {
141
+ t7 = (event_0) => {
142
+ if (undigitable) {
143
+ event_0.preventDefault();
144
+ } else {
145
+ onBeforeInput?.(event_0);
146
+ }
147
+ };
148
+ $[14] = onBeforeInput;
149
+ $[15] = undigitable;
150
+ $[16] = t7;
151
+ } else {
152
+ t7 = $[16];
153
+ }
154
+ const handleOnBeforeInput = t7;
155
+ let t8;
156
+ if ($[17] !== handleOnBeforeInput || $[18] !== handleOnPaste || $[19] !== setValue || $[20] !== unmaskedValue || $[21] !== value) {
157
+ t8 = {
158
+ maskedValue: value,
159
+ unmaskedValue,
160
+ setMaskValue: setValue,
161
+ handleOnPaste,
162
+ handleOnBeforeInput
163
+ };
164
+ $[17] = handleOnBeforeInput;
165
+ $[18] = handleOnPaste;
166
+ $[19] = setValue;
167
+ $[20] = unmaskedValue;
168
+ $[21] = value;
169
+ $[22] = t8;
170
+ } else {
171
+ t8 = $[22];
172
+ }
173
+ return t8;
174
+ };
175
+ export {
176
+ useDateMask
177
+ };
178
+ //# sourceMappingURL=useDateMask.js.map
@@ -0,0 +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\n// Cada segmento é um bloco próprio: é isso que impede os dígitos de deslizarem para a\n// esquerda ao digitar por cima de uma seleção. O `pad` completa `3` como `03`.\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 autofix: 'pad',\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 },\n M: { mask: IMask.MaskedRange, from: 0, to: 59, maxLength: 2 },\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,\n onCommit, onPaste, onBeforeInput,\n } = params;\n const { ptbrFormat } = getDateFormats(variant);\n const maskOptions = React.useMemo(() => buildMaskOptions(variant), [variant]);\n\n const { value, unmaskedValue, setValue } = useIMask(maskOptions, {\n ref: inputRef,\n defaultValue,\n onAccept: (acceptedValue: string, mask: any) => {\n // onAccept dispara a cada tecla, então sem esse guard o onChange sairia\n // com datas pela metade enquanto a pessoa ainda está digitando.\n if (!mask?.masked?.isComplete) return;\n const date = moment(acceptedValue, ptbrFormat);\n if (date.isValid()) { onCommit(date); }\n },\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: setValue,\n handleOnPaste,\n handleOnBeforeInput,\n };\n};\n"],"names":["buildMaskOptions","variant","ptbrFormat","getDateFormats","mask","Date","pattern","lazy","placeholderChar","overwrite","autofix","blocks","d","IMask","MaskedRange","from","to","maxLength","m","Y","H","M","format","date","moment","parse","value","toDate","useDateMask","params","$","_c","inputRef","t0","defaultValue","undigitable","t1","onCommit","onPaste","onBeforeInput","undefined","t2","t3","maskOptions","t4","acceptedValue","masked","isComplete","isValid","t5","ref","onAccept","unmaskedValue","setValue","useIMask","t6","event","preventDefault","handleOnPaste","t7","event_0","handleOnBeforeInput","t8","maskedValue","setMaskValue"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Moment } from 'moment';
2
+ interface TimeSelectorProps {
3
+ /** null desabilita o seletor inteiro */
4
+ value: Moment | null;
5
+ onSelectTime: (hour: number, minute: number) => void;
6
+ min?: Moment;
7
+ max?: Moment;
8
+ testIdPrefix: string;
9
+ }
10
+ declare const TimeSelector: {
11
+ (props: TimeSelectorProps): import("react/jsx-runtime").JSX.Element;
12
+ displayName: string;
13
+ };
14
+ export { TimeSelector };
15
+ export type { TimeSelectorProps };