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

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 +599 -215
  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 +645 -751
  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 +25 -4
  16. package/lib/inputs2/date/helpers.js +79 -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 +22 -0
  25. package/lib/inputs2/date/hooks/useDateMask.js +215 -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
@@ -1,4 +1,4 @@
1
1
  import { CSSProperties, RefObject } from 'react';
2
- export declare const useCalendarPosition: (calendarBoxOpen: boolean, containerRef: RefObject<HTMLDivElement | null>) => {
2
+ export declare const useCalendarPosition: (calendarBoxOpen: boolean, containerRef: RefObject<HTMLDivElement | null>, calendarBoxRef: RefObject<HTMLDivElement | null>) => {
3
3
  calendarBoxStyles: CSSProperties;
4
4
  };
@@ -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,22 @@
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
+ readOnly?: boolean;
10
+ onCommit: (date: Moment) => void;
11
+ onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;
12
+ onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;
13
+ }
14
+ export declare const useDateMask: (params: UseDateMaskParams) => {
15
+ maskedValue: string;
16
+ unmaskedValue: string;
17
+ setMaskValue: React.Dispatch<string>;
18
+ handleOnPaste: (event: React.ClipboardEvent<HTMLInputElement>) => void;
19
+ handleOnBeforeInput: (event: React.InputEvent<HTMLInputElement>) => void;
20
+ handleOnKeyDownCapture: (event: React.KeyboardEvent<HTMLInputElement>) => void;
21
+ };
22
+ export {};
@@ -0,0 +1,215 @@
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, getMaskSegments } 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(29);
56
+ const {
57
+ inputRef,
58
+ variant: t0,
59
+ defaultValue,
60
+ undigitable: t1,
61
+ readOnly: t2,
62
+ onCommit,
63
+ onPaste,
64
+ onBeforeInput
65
+ } = params;
66
+ const variant = t0 === void 0 ? "date" : t0;
67
+ const undigitable = t1 === void 0 ? false : t1;
68
+ const readOnly = t2 === void 0 ? false : t2;
69
+ let t3;
70
+ if ($[0] !== variant) {
71
+ t3 = getDateFormats(variant);
72
+ $[0] = variant;
73
+ $[1] = t3;
74
+ } else {
75
+ t3 = $[1];
76
+ }
77
+ const {
78
+ ptbrFormat
79
+ } = t3;
80
+ let t4;
81
+ if ($[2] !== variant) {
82
+ t4 = buildMaskOptions(variant);
83
+ $[2] = variant;
84
+ $[3] = t4;
85
+ } else {
86
+ t4 = $[3];
87
+ }
88
+ const maskOptions = t4;
89
+ let t5;
90
+ if ($[4] !== onCommit || $[5] !== ptbrFormat) {
91
+ t5 = (acceptedValue, mask) => {
92
+ if (!mask?.masked?.isComplete) {
93
+ return;
94
+ }
95
+ const date = hooks(acceptedValue, ptbrFormat);
96
+ if (date.isValid()) {
97
+ onCommit(date);
98
+ }
99
+ };
100
+ $[4] = onCommit;
101
+ $[5] = ptbrFormat;
102
+ $[6] = t5;
103
+ } else {
104
+ t5 = $[6];
105
+ }
106
+ let t6;
107
+ if ($[7] !== defaultValue || $[8] !== inputRef || $[9] !== t5) {
108
+ t6 = {
109
+ ref: inputRef,
110
+ defaultValue,
111
+ onAccept: t5
112
+ };
113
+ $[7] = defaultValue;
114
+ $[8] = inputRef;
115
+ $[9] = t5;
116
+ $[10] = t6;
117
+ } else {
118
+ t6 = $[10];
119
+ }
120
+ const {
121
+ value,
122
+ unmaskedValue,
123
+ setValue
124
+ } = useIMask(maskOptions, t6);
125
+ let t7;
126
+ if ($[11] !== inputRef || $[12] !== ptbrFormat || $[13] !== readOnly || $[14] !== undigitable) {
127
+ t7 = (event) => {
128
+ if (undigitable || readOnly) {
129
+ return;
130
+ }
131
+ if (event.ctrlKey || event.metaKey || event.altKey) {
132
+ return;
133
+ }
134
+ if (event.key.length !== 1 || !/\d/.test(event.key)) {
135
+ return;
136
+ }
137
+ const input = inputRef.current;
138
+ const start = input?.selectionStart;
139
+ const end = input?.selectionEnd;
140
+ if (!input || start == null || end == null || start === end) {
141
+ return;
142
+ }
143
+ const segment = getMaskSegments(ptbrFormat).find((item) => start >= item.start && end <= item.end);
144
+ if (!segment) {
145
+ return;
146
+ }
147
+ input.setSelectionRange(segment.start, segment.end);
148
+ };
149
+ $[11] = inputRef;
150
+ $[12] = ptbrFormat;
151
+ $[13] = readOnly;
152
+ $[14] = undigitable;
153
+ $[15] = t7;
154
+ } else {
155
+ t7 = $[15];
156
+ }
157
+ const handleOnKeyDownCapture = t7;
158
+ let t8;
159
+ if ($[16] !== onPaste || $[17] !== undigitable) {
160
+ t8 = (event_0) => {
161
+ if (undigitable) {
162
+ event_0.preventDefault();
163
+ } else {
164
+ onPaste?.(event_0);
165
+ }
166
+ };
167
+ $[16] = onPaste;
168
+ $[17] = undigitable;
169
+ $[18] = t8;
170
+ } else {
171
+ t8 = $[18];
172
+ }
173
+ const handleOnPaste = t8;
174
+ let t9;
175
+ if ($[19] !== onBeforeInput || $[20] !== undigitable) {
176
+ t9 = (event_1) => {
177
+ if (undigitable) {
178
+ event_1.preventDefault();
179
+ } else {
180
+ onBeforeInput?.(event_1);
181
+ }
182
+ };
183
+ $[19] = onBeforeInput;
184
+ $[20] = undigitable;
185
+ $[21] = t9;
186
+ } else {
187
+ t9 = $[21];
188
+ }
189
+ const handleOnBeforeInput = t9;
190
+ let t10;
191
+ if ($[22] !== handleOnBeforeInput || $[23] !== handleOnKeyDownCapture || $[24] !== handleOnPaste || $[25] !== setValue || $[26] !== unmaskedValue || $[27] !== value) {
192
+ t10 = {
193
+ maskedValue: value,
194
+ unmaskedValue,
195
+ setMaskValue: setValue,
196
+ handleOnPaste,
197
+ handleOnBeforeInput,
198
+ handleOnKeyDownCapture
199
+ };
200
+ $[22] = handleOnBeforeInput;
201
+ $[23] = handleOnKeyDownCapture;
202
+ $[24] = handleOnPaste;
203
+ $[25] = setValue;
204
+ $[26] = unmaskedValue;
205
+ $[27] = value;
206
+ $[28] = t10;
207
+ } else {
208
+ t10 = $[28];
209
+ }
210
+ return t10;
211
+ };
212
+ export {
213
+ useDateMask
214
+ };
215
+ //# 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, 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\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, readOnly = 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 // Selecionar um dígito e digitar por cima é o gesto de \"reescrever este segmento\". Sem\n // normalizar a seleção, o dígito que não cabe transborda para o segmento seguinte e o\n // sobrescreve calado — digitar `13` sobre o mês de 12/10/2026 levava o ano para 1926.\n // Precisa ser na captura: o iMask escuta keydown no próprio input e fotografa a seleção\n // ali, então um handler de bolha chegaria tarde.\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 || start === end) return;\n const segment = getMaskSegments(ptbrFormat)\n .find(item => start >= item.start && end <= item.end);\n if (!segment) return;\n input.setSelectionRange(segment.start, 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: setValue,\n handleOnPaste,\n handleOnBeforeInput,\n handleOnKeyDownCapture,\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","readOnly","t2","onCommit","onPaste","onBeforeInput","undefined","t3","t4","maskOptions","t5","acceptedValue","masked","isComplete","isValid","t6","ref","onAccept","unmaskedValue","setValue","useIMask","t7","event","ctrlKey","metaKey","altKey","key","length","test","input","current","start","selectionStart","end","selectionEnd","segment","getMaskSegments","find","item","setSelectionRange","handleOnKeyDownCapture","t8","event_0","preventDefault","handleOnPaste","t9","event_1","handleOnBeforeInput","t10","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 };