@multiplatform.one/frappe-ui 7.65.2 → 7.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FormSidebar.cjs +95 -194
- package/dist/cjs/FormSidebar.native.js +107 -217
- package/dist/cjs/FormSidebar.native.js.map +1 -1
- package/dist/cjs/FrappeConnectionIndicator.cjs +5 -24
- package/dist/cjs/FrappeConnectionIndicator.native.js +5 -24
- package/dist/cjs/FrappeConnectionIndicator.native.js.map +1 -1
- package/dist/cjs/FrappeImageView.cjs +46 -65
- package/dist/cjs/FrappeImageView.native.js +46 -68
- package/dist/cjs/FrappeImageView.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +24 -67
- package/dist/cjs/FrappeListView.native.js +25 -71
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeRecordView.cjs +4 -0
- package/dist/cjs/FrappeRecordView.native.js +4 -0
- package/dist/cjs/FrappeRecordView.native.js.map +1 -1
- package/dist/cjs/FrappeReportBuilder.cjs +21 -18
- package/dist/cjs/FrappeReportBuilder.native.js +21 -18
- package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
- package/dist/cjs/SyncErrorNotice.cjs +8 -36
- package/dist/cjs/SyncErrorNotice.native.js +8 -36
- package/dist/cjs/SyncErrorNotice.native.js.map +1 -1
- package/dist/cjs/desk/DeskFormSidebar.cjs +1 -6
- package/dist/cjs/desk/DeskFormSidebar.native.js +1 -6
- package/dist/cjs/desk/DeskFormSidebar.native.js.map +1 -1
- package/dist/cjs/desk/DeskShell.native.js.map +1 -1
- package/dist/cjs/fields/Date/catalog.native.js +0 -1
- package/dist/cjs/fields/Date/catalog.native.js.map +1 -1
- package/dist/cjs/fields/Date/index.native.js +4 -363
- package/dist/cjs/fields/Date/index.native.js.map +1 -1
- package/dist/cjs/insights/InsightsFacetTags.cjs +16 -92
- package/dist/cjs/insights/InsightsFacetTags.native.js +15 -97
- package/dist/cjs/insights/InsightsFacetTags.native.js.map +1 -1
- package/dist/cjs/list/FacetBadge.cjs +4 -28
- package/dist/cjs/list/FacetBadge.native.js +4 -28
- package/dist/cjs/list/FacetBadge.native.js.map +1 -1
- package/dist/cjs/list/FacetRail.cjs +37 -128
- package/dist/cjs/list/FacetRail.native.js +32 -130
- package/dist/cjs/list/FacetRail.native.js.map +1 -1
- package/dist/cjs/list/RecordCard.cjs +107 -127
- package/dist/cjs/list/RecordCard.native.js +86 -96
- package/dist/cjs/list/RecordCard.native.js.map +1 -1
- package/dist/cjs/list/ShufflePanel.cjs +57 -36
- package/dist/cjs/list/ShufflePanel.native.js +64 -39
- package/dist/cjs/list/ShufflePanel.native.js.map +1 -1
- package/dist/cjs/record/RecordHero.cjs +7 -85
- package/dist/cjs/record/RecordHero.native.js +7 -85
- package/dist/cjs/record/RecordHero.native.js.map +1 -1
- package/dist/cjs/record/RecordPage.cjs +1 -0
- package/dist/cjs/record/RecordPage.native.js +1 -0
- package/dist/cjs/record/RecordPage.native.js.map +1 -1
- package/dist/cjs/report/ReportViewToolbar.cjs +70 -39
- package/dist/cjs/report/ReportViewToolbar.native.js +73 -40
- package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -1
- package/dist/esm/FormSidebar.mjs +98 -197
- package/dist/esm/FormSidebar.mjs.map +1 -1
- package/dist/esm/FormSidebar.native.js +110 -220
- package/dist/esm/FormSidebar.native.js.map +1 -1
- package/dist/esm/FrappeConnectionIndicator.mjs +7 -26
- package/dist/esm/FrappeConnectionIndicator.mjs.map +1 -1
- package/dist/esm/FrappeConnectionIndicator.native.js +7 -26
- package/dist/esm/FrappeConnectionIndicator.native.js.map +1 -1
- package/dist/esm/FrappeImageView.mjs +48 -67
- package/dist/esm/FrappeImageView.mjs.map +1 -1
- package/dist/esm/FrappeImageView.native.js +48 -70
- package/dist/esm/FrappeImageView.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +25 -68
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +26 -72
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeRecordView.mjs +4 -0
- package/dist/esm/FrappeRecordView.mjs.map +1 -1
- package/dist/esm/FrappeRecordView.native.js +4 -0
- package/dist/esm/FrappeRecordView.native.js.map +1 -1
- package/dist/esm/FrappeReportBuilder.mjs +21 -18
- package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
- package/dist/esm/FrappeReportBuilder.native.js +21 -18
- package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
- package/dist/esm/SyncErrorNotice.mjs +10 -38
- package/dist/esm/SyncErrorNotice.mjs.map +1 -1
- package/dist/esm/SyncErrorNotice.native.js +10 -38
- package/dist/esm/SyncErrorNotice.native.js.map +1 -1
- package/dist/esm/desk/DeskFormSidebar.mjs +1 -6
- package/dist/esm/desk/DeskFormSidebar.mjs.map +1 -1
- package/dist/esm/desk/DeskFormSidebar.native.js +1 -6
- package/dist/esm/desk/DeskFormSidebar.native.js.map +1 -1
- package/dist/esm/desk/DeskShell.mjs.map +1 -1
- package/dist/esm/desk/DeskShell.native.js.map +1 -1
- package/dist/esm/fields/Date/catalog.mjs.map +1 -1
- package/dist/esm/fields/Date/catalog.native.js +0 -1
- package/dist/esm/fields/Date/catalog.native.js.map +1 -1
- package/dist/esm/fields/Date/index.native.js +2 -361
- package/dist/esm/fields/Date/index.native.js.map +1 -1
- package/dist/esm/insights/InsightsFacetTags.mjs +18 -94
- package/dist/esm/insights/InsightsFacetTags.mjs.map +1 -1
- package/dist/esm/insights/InsightsFacetTags.native.js +17 -99
- package/dist/esm/insights/InsightsFacetTags.native.js.map +1 -1
- package/dist/esm/list/FacetBadge.mjs +5 -29
- package/dist/esm/list/FacetBadge.mjs.map +1 -1
- package/dist/esm/list/FacetBadge.native.js +5 -29
- package/dist/esm/list/FacetBadge.native.js.map +1 -1
- package/dist/esm/list/FacetRail.mjs +40 -131
- package/dist/esm/list/FacetRail.mjs.map +1 -1
- package/dist/esm/list/FacetRail.native.js +35 -133
- package/dist/esm/list/FacetRail.native.js.map +1 -1
- package/dist/esm/list/RecordCard.mjs +107 -127
- package/dist/esm/list/RecordCard.mjs.map +1 -1
- package/dist/esm/list/RecordCard.native.js +86 -96
- package/dist/esm/list/RecordCard.native.js.map +1 -1
- package/dist/esm/list/ShufflePanel.mjs +59 -38
- package/dist/esm/list/ShufflePanel.mjs.map +1 -1
- package/dist/esm/list/ShufflePanel.native.js +66 -41
- package/dist/esm/list/ShufflePanel.native.js.map +1 -1
- package/dist/esm/record/RecordHero.mjs +8 -86
- package/dist/esm/record/RecordHero.mjs.map +1 -1
- package/dist/esm/record/RecordHero.native.js +8 -86
- package/dist/esm/record/RecordHero.native.js.map +1 -1
- package/dist/esm/record/RecordPage.mjs +2 -1
- package/dist/esm/record/RecordPage.mjs.map +1 -1
- package/dist/esm/record/RecordPage.native.js +2 -1
- package/dist/esm/record/RecordPage.native.js.map +1 -1
- package/dist/esm/report/ReportViewToolbar.mjs +72 -41
- package/dist/esm/report/ReportViewToolbar.mjs.map +1 -1
- package/dist/esm/report/ReportViewToolbar.native.js +75 -42
- package/dist/esm/report/ReportViewToolbar.native.js.map +1 -1
- package/dist/jsx/FormSidebar.mjs +98 -197
- package/dist/jsx/FormSidebar.mjs.map +1 -1
- package/dist/jsx/FormSidebar.native.js +107 -217
- package/dist/jsx/FormSidebar.native.js.map +1 -1
- package/dist/jsx/FrappeConnectionIndicator.mjs +7 -26
- package/dist/jsx/FrappeConnectionIndicator.mjs.map +1 -1
- package/dist/jsx/FrappeConnectionIndicator.native.js +5 -24
- package/dist/jsx/FrappeConnectionIndicator.native.js.map +1 -1
- package/dist/jsx/FrappeImageView.mjs +48 -67
- package/dist/jsx/FrappeImageView.mjs.map +1 -1
- package/dist/jsx/FrappeImageView.native.js +46 -68
- package/dist/jsx/FrappeImageView.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +25 -68
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +25 -71
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeRecordView.mjs +4 -0
- package/dist/jsx/FrappeRecordView.mjs.map +1 -1
- package/dist/jsx/FrappeRecordView.native.js +4 -0
- package/dist/jsx/FrappeRecordView.native.js.map +1 -1
- package/dist/jsx/FrappeReportBuilder.mjs +21 -18
- package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
- package/dist/jsx/FrappeReportBuilder.native.js +21 -18
- package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
- package/dist/jsx/SyncErrorNotice.mjs +10 -38
- package/dist/jsx/SyncErrorNotice.mjs.map +1 -1
- package/dist/jsx/SyncErrorNotice.native.js +8 -36
- package/dist/jsx/SyncErrorNotice.native.js.map +1 -1
- package/dist/jsx/desk/DeskFormSidebar.mjs +1 -6
- package/dist/jsx/desk/DeskFormSidebar.mjs.map +1 -1
- package/dist/jsx/desk/DeskFormSidebar.native.js +1 -6
- package/dist/jsx/desk/DeskFormSidebar.native.js.map +1 -1
- package/dist/jsx/desk/DeskShell.mjs.map +1 -1
- package/dist/jsx/desk/DeskShell.native.js.map +1 -1
- package/dist/jsx/fields/Date/catalog.mjs.map +1 -1
- package/dist/jsx/fields/Date/catalog.native.js +0 -1
- package/dist/jsx/fields/Date/catalog.native.js.map +1 -1
- package/dist/jsx/fields/Date/index.native.js +4 -363
- package/dist/jsx/fields/Date/index.native.js.map +1 -1
- package/dist/jsx/insights/InsightsFacetTags.mjs +18 -94
- package/dist/jsx/insights/InsightsFacetTags.mjs.map +1 -1
- package/dist/jsx/insights/InsightsFacetTags.native.js +15 -97
- package/dist/jsx/insights/InsightsFacetTags.native.js.map +1 -1
- package/dist/jsx/list/FacetBadge.mjs +5 -29
- package/dist/jsx/list/FacetBadge.mjs.map +1 -1
- package/dist/jsx/list/FacetBadge.native.js +4 -28
- package/dist/jsx/list/FacetBadge.native.js.map +1 -1
- package/dist/jsx/list/FacetRail.mjs +40 -131
- package/dist/jsx/list/FacetRail.mjs.map +1 -1
- package/dist/jsx/list/FacetRail.native.js +32 -130
- package/dist/jsx/list/FacetRail.native.js.map +1 -1
- package/dist/jsx/list/RecordCard.mjs +107 -127
- package/dist/jsx/list/RecordCard.mjs.map +1 -1
- package/dist/jsx/list/RecordCard.native.js +86 -96
- package/dist/jsx/list/RecordCard.native.js.map +1 -1
- package/dist/jsx/list/ShufflePanel.mjs +59 -38
- package/dist/jsx/list/ShufflePanel.mjs.map +1 -1
- package/dist/jsx/list/ShufflePanel.native.js +64 -39
- package/dist/jsx/list/ShufflePanel.native.js.map +1 -1
- package/dist/jsx/record/RecordHero.mjs +8 -86
- package/dist/jsx/record/RecordHero.mjs.map +1 -1
- package/dist/jsx/record/RecordHero.native.js +7 -85
- package/dist/jsx/record/RecordHero.native.js.map +1 -1
- package/dist/jsx/record/RecordPage.mjs +2 -1
- package/dist/jsx/record/RecordPage.mjs.map +1 -1
- package/dist/jsx/record/RecordPage.native.js +1 -0
- package/dist/jsx/record/RecordPage.native.js.map +1 -1
- package/dist/jsx/report/ReportViewToolbar.mjs +72 -41
- package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -1
- package/dist/jsx/report/ReportViewToolbar.native.js +73 -40
- package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -1
- package/package.json +16 -16
- package/src/FormSidebar.stories.tsx +1 -1
- package/src/FormSidebar.tsx +128 -253
- package/src/FrappeConnectionIndicator.tsx +6 -28
- package/src/FrappeImageView.stories.tsx +1 -6
- package/src/FrappeImageView.tsx +52 -66
- package/src/FrappeListView.controls.spec.tsx +3 -2
- package/src/FrappeListView.tsx +23 -55
- package/src/FrappeRecordView.tsx +16 -3
- package/src/FrappeReportBuilder.tsx +21 -19
- package/src/SyncErrorNotice.spec.tsx +7 -12
- package/src/SyncErrorNotice.stories.tsx +2 -4
- package/src/SyncErrorNotice.tsx +13 -41
- package/src/desk/DeskFormSidebar.tsx +1 -2
- package/src/desk/DeskShell.tsx +1 -0
- package/src/fields/Date/catalog.tsx +6 -7
- package/src/fields/Date/nativeIsCatalog.spec.tsx +26 -0
- package/src/fields/Date/typeParity.spec.tsx +20 -98
- package/src/frappeRemainder.designLaw.spec.ts +8 -7
- package/src/insights/InsightsFacetTags.tsx +21 -102
- package/src/list/FacetBadge.tsx +7 -29
- package/src/list/FacetRail.spec.tsx +11 -10
- package/src/list/FacetRail.tsx +49 -161
- package/src/list/RecordCard.native.tsx +63 -64
- package/src/list/RecordCard.spec.tsx +8 -5
- package/src/list/RecordCard.tsx +116 -129
- package/src/list/ShufflePanel.tsx +65 -38
- package/src/record/RecordHero.tsx +11 -51
- package/src/record/RecordPage.tsx +6 -1
- package/src/report/ReportViewToolbar.spec.tsx +45 -3
- package/src/report/ReportViewToolbar.tsx +109 -56
- package/types/FormSidebar.d.ts +13 -3
- package/types/FormSidebar.d.ts.map +1 -1
- package/types/FrappeConnectionIndicator.d.ts +2 -1
- package/types/FrappeConnectionIndicator.d.ts.map +1 -1
- package/types/FrappeImageView.d.ts.map +1 -1
- package/types/FrappeListView.d.ts.map +1 -1
- package/types/FrappeRecordView.d.ts.map +1 -1
- package/types/FrappeReportBuilder.d.ts.map +1 -1
- package/types/SyncErrorNotice.d.ts +4 -6
- package/types/SyncErrorNotice.d.ts.map +1 -1
- package/types/desk/DeskFormSidebar.d.ts.map +1 -1
- package/types/desk/DeskShell.d.ts.map +1 -1
- package/types/fields/Date/catalog.d.ts +5 -4
- package/types/fields/Date/catalog.d.ts.map +1 -1
- package/types/insights/InsightsFacetTags.d.ts +4 -1
- package/types/insights/InsightsFacetTags.d.ts.map +1 -1
- package/types/list/FacetBadge.d.ts +3 -3
- package/types/list/FacetBadge.d.ts.map +1 -1
- package/types/list/FacetRail.d.ts +7 -5
- package/types/list/FacetRail.d.ts.map +1 -1
- package/types/list/RecordCard.d.ts +6 -6
- package/types/list/RecordCard.d.ts.map +1 -1
- package/types/list/RecordCard.native.d.ts +4 -3
- package/types/list/RecordCard.native.d.ts.map +1 -1
- package/types/list/ShufflePanel.d.ts +8 -3
- package/types/list/ShufflePanel.d.ts.map +1 -1
- package/types/record/RecordHero.d.ts +5 -1
- package/types/record/RecordHero.d.ts.map +1 -1
- package/types/record/RecordPage.d.ts.map +1 -1
- package/types/report/ReportViewToolbar.d.ts.map +1 -1
- package/dist/cjs/fields/Date/dateTimePickerLoader.cjs +0 -38
- package/dist/cjs/fields/Date/dateTimePickerLoader.native.js +0 -42
- package/dist/cjs/fields/Date/dateTimePickerLoader.native.js.map +0 -1
- package/dist/cjs/fields/Date/sheetKeyboard.cjs +0 -54
- package/dist/cjs/fields/Date/sheetKeyboard.native.js +0 -57
- package/dist/cjs/fields/Date/sheetKeyboard.native.js.map +0 -1
- package/dist/esm/fields/Date/dateTimePickerLoader.mjs +0 -13
- package/dist/esm/fields/Date/dateTimePickerLoader.mjs.map +0 -1
- package/dist/esm/fields/Date/dateTimePickerLoader.native.js +0 -14
- package/dist/esm/fields/Date/dateTimePickerLoader.native.js.map +0 -1
- package/dist/esm/fields/Date/sheetKeyboard.mjs +0 -21
- package/dist/esm/fields/Date/sheetKeyboard.mjs.map +0 -1
- package/dist/esm/fields/Date/sheetKeyboard.native.js +0 -21
- package/dist/esm/fields/Date/sheetKeyboard.native.js.map +0 -1
- package/dist/jsx/fields/Date/dateTimePickerLoader.mjs +0 -13
- package/dist/jsx/fields/Date/dateTimePickerLoader.mjs.map +0 -1
- package/dist/jsx/fields/Date/dateTimePickerLoader.native.js +0 -42
- package/dist/jsx/fields/Date/dateTimePickerLoader.native.js.map +0 -1
- package/dist/jsx/fields/Date/sheetKeyboard.mjs +0 -21
- package/dist/jsx/fields/Date/sheetKeyboard.mjs.map +0 -1
- package/dist/jsx/fields/Date/sheetKeyboard.native.js +0 -57
- package/dist/jsx/fields/Date/sheetKeyboard.native.js.map +0 -1
- package/src/fields/Date/dateTimePickerLoader.ts +0 -25
- package/src/fields/Date/index.native.tsx +0 -445
- package/src/fields/Date/nativeFallback.spec.tsx +0 -21
- package/src/fields/Date/nativePresentation.spec.tsx +0 -278
- package/src/fields/Date/sheetKeyboard.spec.ts +0 -60
- package/src/fields/Date/sheetKeyboard.ts +0 -45
- package/types/fields/Date/dateTimePickerLoader.d.ts +0 -11
- package/types/fields/Date/dateTimePickerLoader.d.ts.map +0 -1
- package/types/fields/Date/index.native.d.ts +0 -14
- package/types/fields/Date/index.native.d.ts.map +0 -1
- package/types/fields/Date/sheetKeyboard.d.ts +0 -20
- package/types/fields/Date/sheetKeyboard.d.ts.map +0 -1
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the native `Date` field asks the OS picker for.
|
|
3
|
-
*
|
|
4
|
-
* The file this covers was unreachable until it was renamed from
|
|
5
|
-
* `date.native.tsx` to `index.native.tsx`, so nothing had ever exercised it.
|
|
6
|
-
* These cases pin the presentation contract that rename makes live:
|
|
7
|
-
*
|
|
8
|
-
* - iOS `date` opens the iOS 14+ calendar (`display="inline"`), not the legacy
|
|
9
|
-
* wheel — the whole point of the change.
|
|
10
|
-
* - iOS `time` keeps the wheel, which is still the correct iOS control.
|
|
11
|
-
* - iOS `datetime` runs calendar → wheel across the sheet's Next button, and
|
|
12
|
-
* commits one Frappe wire string built from both halves.
|
|
13
|
-
* - Android keeps `display="default"`, the Material dialog, and runs its own
|
|
14
|
-
* date-then-time sequence.
|
|
15
|
-
*
|
|
16
|
-
* The suite runs on web, so `react-native` resolves to `react-native-web` and
|
|
17
|
-
* the two native-only edges are mocked: the picker itself (recorded rather
|
|
18
|
-
* than rendered) and the platform flags.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
import { describe, it, expect, vi, beforeAll, beforeEach } from "vitest";
|
|
22
|
-
|
|
23
|
-
// Same cold-fork budget as the sibling Date.spec.tsx: the first field-module
|
|
24
|
-
// import transforms the whole fields graph.
|
|
25
|
-
vi.setConfig({ testTimeout: 240_000 });
|
|
26
|
-
|
|
27
|
-
const mockState = vi.hoisted(() => ({
|
|
28
|
-
isIos: true,
|
|
29
|
-
isAndroid: false,
|
|
30
|
-
/** Props of every mounted picker, newest last. */
|
|
31
|
-
picks: [] as Record<string, unknown>[],
|
|
32
|
-
keyboardInset: 0,
|
|
33
|
-
}));
|
|
34
|
-
|
|
35
|
-
vi.mock("../../shared/useKeyboardInset", () => ({
|
|
36
|
-
useKeyboardInset: () => mockState.keyboardInset,
|
|
37
|
-
}));
|
|
38
|
-
|
|
39
|
-
vi.mock("./dateTimePickerLoader", () => ({
|
|
40
|
-
loadDateTimePicker: () => (props: Record<string, unknown>) => {
|
|
41
|
-
mockState.picks.push(props);
|
|
42
|
-
return null;
|
|
43
|
-
},
|
|
44
|
-
}));
|
|
45
|
-
|
|
46
|
-
vi.mock("@multiplatform.one/platform", async (importOriginal) => {
|
|
47
|
-
const actual = (await importOriginal()) as Record<string, unknown>;
|
|
48
|
-
const real = actual.platform as Record<string, unknown>;
|
|
49
|
-
return {
|
|
50
|
-
...actual,
|
|
51
|
-
platform: new Proxy(
|
|
52
|
-
{},
|
|
53
|
-
{
|
|
54
|
-
get(_target, prop) {
|
|
55
|
-
if (prop === "isIos") return mockState.isIos;
|
|
56
|
-
if (prop === "isAndroid") return mockState.isAndroid;
|
|
57
|
-
return real[prop as string];
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
),
|
|
61
|
-
};
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// Mock react-native-reanimated to prevent ESM module resolution failures
|
|
65
|
-
// (same shim as tests/fieldRenderers.spec.tsx).
|
|
66
|
-
vi.mock("react-native-reanimated", () => ({
|
|
67
|
-
default: {
|
|
68
|
-
useSharedValue: (init: any) => ({ value: init }),
|
|
69
|
-
useAnimatedStyle: () => ({}),
|
|
70
|
-
withTiming: (val: any) => val,
|
|
71
|
-
withSpring: (val: any) => val,
|
|
72
|
-
createAnimatedComponent: (component: any) => component,
|
|
73
|
-
runOnJS: (fn: any) => fn,
|
|
74
|
-
runOnUI: (fn: any) => fn,
|
|
75
|
-
useDerivedValue: (fn: () => any) => ({ value: fn() }),
|
|
76
|
-
useAnimatedRef: () => ({ current: null }),
|
|
77
|
-
Easing: { linear: (v: any) => v, ease: (v: any) => v, bezier: () => (v: any) => v },
|
|
78
|
-
FadeIn: { duration: () => ({}) },
|
|
79
|
-
FadeOut: { duration: () => ({}) },
|
|
80
|
-
Layout: { duration: () => ({}) },
|
|
81
|
-
Extrapolation: { CLAMP: "clamp" },
|
|
82
|
-
measure: () => null,
|
|
83
|
-
scrollTo: () => {},
|
|
84
|
-
makeMutable: (init: any) => ({ value: init }),
|
|
85
|
-
},
|
|
86
|
-
useSharedValue: (init: any) => ({ value: init }),
|
|
87
|
-
useAnimatedStyle: () => ({}),
|
|
88
|
-
withTiming: (val: any) => val,
|
|
89
|
-
withSpring: (val: any) => val,
|
|
90
|
-
createAnimatedComponent: (component: any) => component,
|
|
91
|
-
runOnJS: (fn: any) => fn,
|
|
92
|
-
runOnUI: (fn: any) => fn,
|
|
93
|
-
useDerivedValue: (fn: () => any) => ({ value: fn() }),
|
|
94
|
-
useAnimatedRef: () => ({ current: null }),
|
|
95
|
-
Easing: { linear: (v: any) => v, ease: (v: any) => v, bezier: () => (v: any) => v },
|
|
96
|
-
FadeIn: { duration: () => ({}) },
|
|
97
|
-
FadeOut: { duration: () => ({}) },
|
|
98
|
-
Layout: { duration: () => ({}) },
|
|
99
|
-
}));
|
|
100
|
-
|
|
101
|
-
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
102
|
-
import { act, cleanup, fireEvent, waitFor } from "@testing-library/react";
|
|
103
|
-
import React from "react";
|
|
104
|
-
|
|
105
|
-
async function loadNativeDateField() {
|
|
106
|
-
return (await import("./index.native")).Date;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** Intl puts a narrow no-break space before the meridiem; the test should not care. */
|
|
110
|
-
const norm = (value: string) => value.replace(/\s+/gu, " ").trim();
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Press whatever pressable carries this text, once it exists. The wait is the
|
|
114
|
-
* point: the first paint of this graph can take a while on a loaded machine,
|
|
115
|
-
* and a bare query races it.
|
|
116
|
-
*/
|
|
117
|
-
async function press(root: ParentNode, text: string) {
|
|
118
|
-
let target: Element | null = null;
|
|
119
|
-
await waitFor(
|
|
120
|
-
() => {
|
|
121
|
-
const node = Array.from(root.querySelectorAll("*")).find(
|
|
122
|
-
(el) => el.children.length === 0 && norm(el.textContent ?? "") === norm(text),
|
|
123
|
-
);
|
|
124
|
-
if (!node) throw new Error(`no element with text "${text}"`);
|
|
125
|
-
target = node.closest('button, [role="button"]') ?? node;
|
|
126
|
-
},
|
|
127
|
-
{ timeout: 30_000 },
|
|
128
|
-
);
|
|
129
|
-
fireEvent.click(target!);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const lastPick = () => mockState.picks[mockState.picks.length - 1];
|
|
133
|
-
const waitForPick = (predicate: () => void) => waitFor(predicate, { timeout: 30_000 });
|
|
134
|
-
|
|
135
|
-
// Warm the graph here, not inside the first `it`: the transform is setup cost
|
|
136
|
-
// (110-155s quiet, past 240s under load), and charging it to an assertion made
|
|
137
|
-
// whichever case ran first time out.
|
|
138
|
-
beforeAll(async () => {
|
|
139
|
-
await loadNativeDateField();
|
|
140
|
-
}, 900_000);
|
|
141
|
-
|
|
142
|
-
beforeEach(() => {
|
|
143
|
-
// The iOS sheet is a portal, so a previous case's chrome would otherwise
|
|
144
|
-
// still be in the document when the next one asserts on it.
|
|
145
|
-
cleanup();
|
|
146
|
-
mockState.picks.length = 0;
|
|
147
|
-
mockState.isIos = true;
|
|
148
|
-
mockState.isAndroid = false;
|
|
149
|
-
mockState.keyboardInset = 0;
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
describe("native Date field — iOS presentation", () => {
|
|
153
|
-
it("a date opens the calendar, not the legacy wheel", async () => {
|
|
154
|
-
const DateField = await loadNativeDateField();
|
|
155
|
-
const result = renderWithProviders(
|
|
156
|
-
<DateField label="Due Date" value="2026-03-15" onChange={vi.fn()} type="date" />,
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
await press(result.container, "Mar 15, 2026");
|
|
160
|
-
|
|
161
|
-
await waitForPick(() => expect(mockState.picks.length).toBeGreaterThan(0));
|
|
162
|
-
expect(lastPick().mode).toBe("date");
|
|
163
|
-
expect(lastPick().display).toBe("inline");
|
|
164
|
-
// `spinner` for a date is the pre-iOS-14 wheel this change removes.
|
|
165
|
-
expect(lastPick().display).not.toBe("spinner");
|
|
166
|
-
// The one styling channel an OS control exposes is still driven.
|
|
167
|
-
expect(["light", "dark"]).toContain(lastPick().themeVariant);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it("shrinks the calendar when the keyboard is up so the sheet can sit above it", async () => {
|
|
171
|
-
mockState.keyboardInset = 420;
|
|
172
|
-
const DateField = await loadNativeDateField();
|
|
173
|
-
const result = renderWithProviders(
|
|
174
|
-
<DateField label="Due Date" value="2026-03-15" onChange={vi.fn()} type="date" />,
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
await press(result.container, "Mar 15, 2026");
|
|
178
|
-
|
|
179
|
-
await waitForPick(() => expect(mockState.picks.length).toBeGreaterThan(0));
|
|
180
|
-
const style = lastPick().style as { height: number };
|
|
181
|
-
expect(style.height).toBeLessThan(360);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it("a time keeps the wheel", async () => {
|
|
185
|
-
const DateField = await loadNativeDateField();
|
|
186
|
-
const result = renderWithProviders(
|
|
187
|
-
<DateField label="Reminder" value="09:00:00" onChange={vi.fn()} type="time" />,
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
await press(result.container, "9:00 AM");
|
|
191
|
-
|
|
192
|
-
await waitForPick(() => expect(mockState.picks.length).toBeGreaterThan(0));
|
|
193
|
-
expect(lastPick().mode).toBe("time");
|
|
194
|
-
expect(lastPick().display).toBe("spinner");
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it("a datetime runs calendar then wheel, and commits both halves", async () => {
|
|
198
|
-
const DateField = await loadNativeDateField();
|
|
199
|
-
const onChange = vi.fn();
|
|
200
|
-
const result = renderWithProviders(
|
|
201
|
-
<DateField
|
|
202
|
-
label="Starts On"
|
|
203
|
-
value="2026-03-15 14:30:00"
|
|
204
|
-
onChange={onChange}
|
|
205
|
-
type="datetime"
|
|
206
|
-
/>,
|
|
207
|
-
);
|
|
208
|
-
|
|
209
|
-
await press(result.container, "Mar 15, 2026, 2:30 PM");
|
|
210
|
-
await waitForPick(() => expect(mockState.picks.length).toBeGreaterThan(0));
|
|
211
|
-
expect(lastPick().mode).toBe("date");
|
|
212
|
-
expect(lastPick().display).toBe("inline");
|
|
213
|
-
|
|
214
|
-
await press(document.body, "Next");
|
|
215
|
-
await waitForPick(() => expect(lastPick().mode).toBe("time"));
|
|
216
|
-
expect(lastPick().display).toBe("spinner");
|
|
217
|
-
|
|
218
|
-
await press(document.body, "Done");
|
|
219
|
-
// Untouched, the sheet commits the value it opened on — the point is the
|
|
220
|
-
// wire shape, which carries both halves and no UTC rendering.
|
|
221
|
-
expect(onChange).toHaveBeenCalledTimes(1);
|
|
222
|
-
expect(onChange).toHaveBeenCalledWith("2026-03-15 14:30:00");
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
describe("native Date field — Android presentation", () => {
|
|
227
|
-
it("keeps the Material dialog and mounts inline, without the iOS sheet", async () => {
|
|
228
|
-
mockState.isIos = false;
|
|
229
|
-
mockState.isAndroid = true;
|
|
230
|
-
|
|
231
|
-
const DateField = await loadNativeDateField();
|
|
232
|
-
const result = renderWithProviders(
|
|
233
|
-
<DateField label="Due Date" value="2026-03-15" onChange={vi.fn()} type="date" />,
|
|
234
|
-
);
|
|
235
|
-
|
|
236
|
-
await press(result.container, "Mar 15, 2026");
|
|
237
|
-
|
|
238
|
-
await waitForPick(() => expect(mockState.picks.length).toBeGreaterThan(0));
|
|
239
|
-
expect(lastPick().mode).toBe("date");
|
|
240
|
-
expect(lastPick().display).toBe("default");
|
|
241
|
-
// No sheet on Android: the dialog is its own window, so there is no Done.
|
|
242
|
-
expect(result.container.textContent).not.toContain("Done");
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
it("a datetime advances from date to time after the first commit", async () => {
|
|
246
|
-
mockState.isIos = false;
|
|
247
|
-
mockState.isAndroid = true;
|
|
248
|
-
|
|
249
|
-
const DateField = await loadNativeDateField();
|
|
250
|
-
const onChange = vi.fn();
|
|
251
|
-
const result = renderWithProviders(
|
|
252
|
-
<DateField
|
|
253
|
-
label="Starts On"
|
|
254
|
-
value="2026-03-15 14:30:00"
|
|
255
|
-
onChange={onChange}
|
|
256
|
-
type="datetime"
|
|
257
|
-
/>,
|
|
258
|
-
);
|
|
259
|
-
|
|
260
|
-
await press(result.container, "Mar 15, 2026, 2:30 PM");
|
|
261
|
-
await waitForPick(() => expect(mockState.picks.length).toBeGreaterThan(0));
|
|
262
|
-
expect(lastPick().mode).toBe("date");
|
|
263
|
-
|
|
264
|
-
const onPickerChange = lastPick().onChange as (event: unknown, date?: Date) => void;
|
|
265
|
-
await act(async () => {
|
|
266
|
-
onPickerChange({ type: "set" }, new Date(2026, 2, 20, 0, 0));
|
|
267
|
-
});
|
|
268
|
-
await waitForPick(() => expect(lastPick().mode).toBe("time"));
|
|
269
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
270
|
-
|
|
271
|
-
const onTimeChange = lastPick().onChange as (event: unknown, date?: Date) => void;
|
|
272
|
-
await act(async () => {
|
|
273
|
-
onTimeChange({ type: "set" }, new Date(2026, 0, 1, 9, 45));
|
|
274
|
-
});
|
|
275
|
-
expect(onChange).toHaveBeenCalledTimes(1);
|
|
276
|
-
expect(onChange).toHaveBeenCalledWith("2026-03-20 09:45:00");
|
|
277
|
-
});
|
|
278
|
-
});
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MPO-64 leftover: the frappe-ui Date iOS sheet must use the same keyboard
|
|
3
|
-
* cap as FloatingPanel / SheetModal. KeyboardAvoidingView cannot shrink a
|
|
4
|
-
* fixed-height calendar, so the cap is the only thing that keeps the sheet
|
|
5
|
-
* above the suggestion strip.
|
|
6
|
-
*/
|
|
7
|
-
import { describe, expect, it } from "vitest";
|
|
8
|
-
import {
|
|
9
|
-
datePickerHeight,
|
|
10
|
-
dateSheetBottomPadding,
|
|
11
|
-
dateSheetMaxHeight,
|
|
12
|
-
DATE_PICKER_CALENDAR_HEIGHT,
|
|
13
|
-
DATE_SHEET_BACKDROP_STRIP,
|
|
14
|
-
DATE_SHEET_MIN_HEIGHT,
|
|
15
|
-
} from "./sheetKeyboard";
|
|
16
|
-
|
|
17
|
-
describe("dateSheetMaxHeight", () => {
|
|
18
|
-
it("uses the 85% detent when the keyboard is down", () => {
|
|
19
|
-
expect(dateSheetMaxHeight(800, 0, 47)).toBe(Math.round(800 * 0.85));
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it("caps to the space above the keyboard, less the 48pt backdrop strip", () => {
|
|
23
|
-
expect(dateSheetMaxHeight(800, 400, 0)).toBe(800 - 400 - DATE_SHEET_BACKDROP_STRIP);
|
|
24
|
-
expect(dateSheetMaxHeight(800, 400, 0)).toBeLessThan(dateSheetMaxHeight(800, 0, 0));
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it("keeps the backdrop strip below the status bar, not inside it", () => {
|
|
28
|
-
const windowHeight = 874;
|
|
29
|
-
const keyboardInset = 335;
|
|
30
|
-
const topInset = 62;
|
|
31
|
-
const sheetTop =
|
|
32
|
-
windowHeight - keyboardInset - dateSheetMaxHeight(windowHeight, keyboardInset, topInset);
|
|
33
|
-
expect(sheetTop - topInset).toBe(DATE_SHEET_BACKDROP_STRIP);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it("never collapses below the minimum sheet height", () => {
|
|
37
|
-
expect(dateSheetMaxHeight(800, 700, 47)).toBe(DATE_SHEET_MIN_HEIGHT);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
describe("datePickerHeight", () => {
|
|
42
|
-
it("keeps the calendar grid when the sheet is tall enough", () => {
|
|
43
|
-
expect(datePickerHeight("date", 700)).toBe(DATE_PICKER_CALENDAR_HEIGHT);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it("shrinks the calendar so the sheet can sit above the keyboard", () => {
|
|
47
|
-
const maxHeight = dateSheetMaxHeight(800, 400, 47);
|
|
48
|
-
const height = datePickerHeight("date", maxHeight);
|
|
49
|
-
expect(height).toBeLessThan(DATE_PICKER_CALENDAR_HEIGHT);
|
|
50
|
-
expect(height).toBeLessThanOrEqual(maxHeight);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
describe("dateSheetBottomPadding", () => {
|
|
55
|
-
it("drops the home-indicator inset while the keyboard covers it", () => {
|
|
56
|
-
expect(dateSheetBottomPadding(0, true)).toBe(24);
|
|
57
|
-
expect(dateSheetBottomPadding(336, true)).toBe(8);
|
|
58
|
-
expect(dateSheetBottomPadding(0, false)).toBe(16);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MPO-64 leftover: same keyboard cap as FloatingPanel / SheetModal.
|
|
3
|
-
*
|
|
4
|
-
* The Date iOS sheet used to give the calendar a fixed 360pt height inside a
|
|
5
|
-
* Modal. KeyboardAvoidingView cannot shrink that shape — it pads the container
|
|
6
|
-
* and the sheet overflows off the top. Cap the sheet to the space between the
|
|
7
|
-
* status bar and the keyboard (less a strip of backdrop) and shrink the picker
|
|
8
|
-
* to fit.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
export const DATE_SHEET_MAX_HEIGHT_RATIO = 0.85;
|
|
12
|
-
export const DATE_SHEET_BACKDROP_STRIP = 48;
|
|
13
|
-
export const DATE_SHEET_MIN_HEIGHT = 180;
|
|
14
|
-
export const DATE_SHEET_CHROME = 96;
|
|
15
|
-
export const DATE_PICKER_CALENDAR_HEIGHT = 360;
|
|
16
|
-
export const DATE_PICKER_WHEEL_HEIGHT = 200;
|
|
17
|
-
const minPickerHeight = 120;
|
|
18
|
-
|
|
19
|
-
export function dateSheetMaxHeight(
|
|
20
|
-
windowHeight: number,
|
|
21
|
-
keyboardInset: number,
|
|
22
|
-
topInset: number,
|
|
23
|
-
): number {
|
|
24
|
-
const available = Math.max(0, windowHeight - keyboardInset);
|
|
25
|
-
return Math.max(
|
|
26
|
-
DATE_SHEET_MIN_HEIGHT,
|
|
27
|
-
Math.round(
|
|
28
|
-
Math.min(
|
|
29
|
-
windowHeight * DATE_SHEET_MAX_HEIGHT_RATIO,
|
|
30
|
-
available - topInset - DATE_SHEET_BACKDROP_STRIP,
|
|
31
|
-
),
|
|
32
|
-
),
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** Home-indicator clearance; drop it while the keyboard already covers that band. */
|
|
37
|
-
export function dateSheetBottomPadding(keyboardInset: number, isIos: boolean): number {
|
|
38
|
-
if (keyboardInset > 0) return 8;
|
|
39
|
-
return isIos ? 24 : 16;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function datePickerHeight(mode: "date" | "time", maxHeight: number): number {
|
|
43
|
-
const preferred = mode === "time" ? DATE_PICKER_WHEEL_HEIGHT : DATE_PICKER_CALENDAR_HEIGHT;
|
|
44
|
-
return Math.min(preferred, Math.max(minPickerHeight, maxHeight - DATE_SHEET_CHROME));
|
|
45
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export type DateTimePickerComponent = typeof import("@react-native-community/datetimepicker").default;
|
|
2
|
-
export type { DateTimePickerEvent } from "@react-native-community/datetimepicker";
|
|
3
|
-
/**
|
|
4
|
-
* Loads the optional `@react-native-community/datetimepicker` peer at runtime,
|
|
5
|
-
* the same contract as forms' `nativeDateTime/dateTimePickerLoader.ts`. A
|
|
6
|
-
* static import of an absent peer stays external in the native bundle and
|
|
7
|
-
* hermesc rejects the leftover `import` statement (FZ-7357); the guarded
|
|
8
|
-
* `require` returns null instead, and the field renders its catalog half.
|
|
9
|
-
*/
|
|
10
|
-
export declare function loadDateTimePicker(): DateTimePickerComponent | null;
|
|
11
|
-
//# sourceMappingURL=dateTimePickerLoader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dateTimePickerLoader.d.ts","sourceRoot":"","sources":["../../../src/fields/Date/dateTimePickerLoader.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GACjC,cAAc,wCAAwC,EAAE,OAAO,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAIlF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAWnE"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { DateProps } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Design-law: trigger and sheet actions are house Button. The OS picker stays
|
|
4
|
-
* `Modal animationType="fade"` so the scrim plants in place (MPO-62); the
|
|
5
|
-
* sheet caps above the keyboard via inset padding (MPO-64).
|
|
6
|
-
*/
|
|
7
|
-
export type { DateProps } from "./types";
|
|
8
|
-
/**
|
|
9
|
-
* Without the optional `@react-native-community/datetimepicker` peer the
|
|
10
|
-
* field keeps working as the catalog picker the web half renders.
|
|
11
|
-
*/
|
|
12
|
-
declare function DateField<TData extends Record<string, unknown> = Record<string, unknown>, TName extends string = string>(props: DateProps<TData, TName>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export { DateField as Date };
|
|
14
|
-
//# sourceMappingURL=index.native.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../src/fields/Date/index.native.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC;;;;GAIG;AAEH,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAiYzC;;;GAGG;AACH,iBAAS,SAAS,CAChB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,2CAI/B;AAED,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MPO-64 leftover: same keyboard cap as FloatingPanel / SheetModal.
|
|
3
|
-
*
|
|
4
|
-
* The Date iOS sheet used to give the calendar a fixed 360pt height inside a
|
|
5
|
-
* Modal. KeyboardAvoidingView cannot shrink that shape — it pads the container
|
|
6
|
-
* and the sheet overflows off the top. Cap the sheet to the space between the
|
|
7
|
-
* status bar and the keyboard (less a strip of backdrop) and shrink the picker
|
|
8
|
-
* to fit.
|
|
9
|
-
*/
|
|
10
|
-
export declare const DATE_SHEET_MAX_HEIGHT_RATIO = 0.85;
|
|
11
|
-
export declare const DATE_SHEET_BACKDROP_STRIP = 48;
|
|
12
|
-
export declare const DATE_SHEET_MIN_HEIGHT = 180;
|
|
13
|
-
export declare const DATE_SHEET_CHROME = 96;
|
|
14
|
-
export declare const DATE_PICKER_CALENDAR_HEIGHT = 360;
|
|
15
|
-
export declare const DATE_PICKER_WHEEL_HEIGHT = 200;
|
|
16
|
-
export declare function dateSheetMaxHeight(windowHeight: number, keyboardInset: number, topInset: number): number;
|
|
17
|
-
/** Home-indicator clearance; drop it while the keyboard already covers that band. */
|
|
18
|
-
export declare function dateSheetBottomPadding(keyboardInset: number, isIos: boolean): number;
|
|
19
|
-
export declare function datePickerHeight(mode: "date" | "time", maxHeight: number): number;
|
|
20
|
-
//# sourceMappingURL=sheetKeyboard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheetKeyboard.d.ts","sourceRoot":"","sources":["../../../src/fields/Date/sheetKeyboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAG5C,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGjF"}
|