linear-react-components-ui 2.1.0-beta.0 → 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 (85) hide show
  1. package/lib/assets/styles/datepicker2.css +77 -4
  2. package/lib/inputs/number/Currency.js +19 -17
  3. package/lib/inputs/number/Currency.js.map +1 -1
  4. package/lib/inputs/number/Decimal.js +19 -17
  5. package/lib/inputs/number/Decimal.js.map +1 -1
  6. package/lib/inputs/number/index.js +17 -15
  7. package/lib/inputs/number/index.js.map +1 -1
  8. package/lib/inputs2/date/calendarbox.d.ts +23 -0
  9. package/lib/inputs2/date/calendarbox.js +254 -0
  10. package/lib/inputs2/date/calendarbox.js.map +1 -0
  11. package/lib/inputs2/date/datefield/base.js +590 -214
  12. package/lib/inputs2/date/datefield/base.js.map +1 -1
  13. package/lib/inputs2/date/datefield/triggers.js +4 -4
  14. package/lib/inputs2/date/datefield/triggers.js.map +1 -1
  15. package/lib/inputs2/date/datefield/types.d.ts +5 -12
  16. package/lib/inputs2/date/dateperiodfield/base.js +543 -674
  17. package/lib/inputs2/date/dateperiodfield/base.js.map +1 -1
  18. package/lib/inputs2/date/dateperiodfield/triggers.js +21 -9
  19. package/lib/inputs2/date/dateperiodfield/triggers.js.map +1 -1
  20. package/lib/inputs2/date/dateperiodfield/types.d.ts +7 -23
  21. package/lib/inputs2/date/helpers.d.ts +21 -4
  22. package/lib/inputs2/date/helpers.js +64 -4
  23. package/lib/inputs2/date/helpers.js.map +1 -1
  24. package/lib/inputs2/date/{base/constants.d.ts → hooks/useCalendarPosition.d.ts} +1 -1
  25. package/lib/inputs2/date/hooks/useCalendarPosition.js +93 -0
  26. package/lib/inputs2/date/hooks/useCalendarPosition.js.map +1 -0
  27. package/lib/inputs2/date/hooks/useDateCalendarState.d.ts +14 -0
  28. package/lib/inputs2/date/hooks/useDateCalendarState.js +250 -0
  29. package/lib/inputs2/date/hooks/useDateCalendarState.js.map +1 -0
  30. package/lib/inputs2/date/hooks/useDateMask.d.ts +20 -0
  31. package/lib/inputs2/date/hooks/useDateMask.js +178 -0
  32. package/lib/inputs2/date/hooks/useDateMask.js.map +1 -0
  33. package/lib/inputs2/date/timeselector.d.ts +15 -0
  34. package/lib/inputs2/date/timeselector.js +228 -0
  35. package/lib/inputs2/date/timeselector.js.map +1 -0
  36. package/lib/inputs2/date/types.d.ts +16 -1
  37. package/lib/inputs2/date/types.js.map +1 -1
  38. package/lib/inputs2/selectfield/base.js +1 -1
  39. package/lib/inputs2/selectfield/base.js.map +1 -1
  40. package/lib/menus/float/SubMenuContainer.d.ts +10 -28
  41. package/lib/menus/float/SubMenuContainer.js +97 -83
  42. package/lib/menus/float/SubMenuContainer.js.map +1 -1
  43. package/lib/node_modules/moment/dist/locale/pt-br.js +54 -0
  44. package/lib/node_modules/moment/dist/locale/pt-br.js.map +1 -0
  45. package/lib/treetable/helpers.d.ts +0 -2
  46. package/lib/treetable/helpers.js.map +1 -1
  47. package/package.json +1 -1
  48. package/lib/_virtual/index.js +0 -8
  49. package/lib/_virtual/index.js.map +0 -1
  50. package/lib/_virtual/index2.js +0 -5
  51. package/lib/_virtual/index2.js.map +0 -1
  52. package/lib/_virtual/index3.js +0 -5
  53. package/lib/_virtual/index3.js.map +0 -1
  54. package/lib/_virtual/react-is.development.js +0 -5
  55. package/lib/_virtual/react-is.development.js.map +0 -1
  56. package/lib/_virtual/react-is.production.min.js +0 -5
  57. package/lib/_virtual/react-is.production.min.js.map +0 -1
  58. package/lib/inputs2/date/base/constants.js +0 -69
  59. package/lib/inputs2/date/base/constants.js.map +0 -1
  60. package/lib/inputs2/date/datefield/calendarbox.d.ts +0 -6
  61. package/lib/inputs2/date/datefield/calendarbox.js +0 -228
  62. package/lib/inputs2/date/datefield/calendarbox.js.map +0 -1
  63. package/lib/inputs2/date/dateperiodfield/calendarbox.d.ts +0 -6
  64. package/lib/inputs2/date/dateperiodfield/calendarbox.js +0 -282
  65. package/lib/inputs2/date/dateperiodfield/calendarbox.js.map +0 -1
  66. package/lib/node_modules/object-assign/index.js +0 -79
  67. package/lib/node_modules/object-assign/index.js.map +0 -1
  68. package/lib/node_modules/prop-types/checkPropTypes.js +0 -69
  69. package/lib/node_modules/prop-types/checkPropTypes.js.map +0 -1
  70. package/lib/node_modules/prop-types/factoryWithThrowingShims.js +0 -59
  71. package/lib/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
  72. package/lib/node_modules/prop-types/factoryWithTypeCheckers.js +0 -452
  73. package/lib/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
  74. package/lib/node_modules/prop-types/index.js +0 -21
  75. package/lib/node_modules/prop-types/index.js.map +0 -1
  76. package/lib/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -13
  77. package/lib/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
  78. package/lib/node_modules/prop-types/lib/has.js +0 -12
  79. package/lib/node_modules/prop-types/lib/has.js.map +0 -1
  80. package/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -166
  81. package/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  82. package/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -107
  83. package/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  84. package/lib/node_modules/prop-types/node_modules/react-is/index.js +0 -18
  85. package/lib/node_modules/prop-types/node_modules/react-is/index.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 };