Skip to content

Commit 82474e3

Browse files
committed
Add native ESM support (#391)
1 parent 4ac223b commit 82474e3

18 files changed

+60
-39
lines changed

package.json

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,31 @@
22
"name": "react-datetime-picker",
33
"version": "5.3.0",
44
"description": "A date range picker for your React app.",
5-
"main": "dist/cjs/index.js",
6-
"module": "dist/esm/index.js",
7-
"source": "src/index.ts",
8-
"types": "dist/cjs/index.d.ts",
5+
"type": "module",
96
"sideEffects": [
107
"*.css"
118
],
9+
"main": "./dist/cjs/index.js",
10+
"module": "./dist/esm/index.js",
11+
"source": "./src/index.ts",
12+
"types": "./dist/cjs/index.d.ts",
13+
"exports": {
14+
".": {
15+
"import": "./dist/esm/index.js",
16+
"require": "./dist/cjs/index.js"
17+
},
18+
"./dist/cjs/DateTimeInput": "./dist/cjs/DateTimeInput.js",
19+
"./dist/cjs/DateTimeInput.js": "./dist/cjs/DateTimeInput.js",
20+
"./dist/esm/DateTimeInput": "./dist/esm/DateTimeInput.js",
21+
"./dist/esm/DateTimeInput.js": "./dist/esm/DateTimeInput.js",
22+
"./dist/DateTimePicker.css": "./dist/DateTimePicker.css"
23+
},
1224
"scripts": {
1325
"build": "yarn build-js && yarn copy-styles",
14-
"build-js": "yarn build-js-esm && yarn build-js-cjs",
26+
"build-js": "yarn build-js-esm && yarn build-js-cjs && yarn build-js-cjs-package",
1527
"build-js-esm": "tsc --project tsconfig.build.json --outDir dist/esm --module esnext",
1628
"build-js-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs",
29+
"build-js-cjs-package": "echo '{\n \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
1730
"clean": "rimraf dist",
1831
"copy-styles": "cpy 'src/**/*.css' dist",
1932
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
@@ -23,7 +36,7 @@
2336
"test": "yarn lint && yarn tsc && yarn prettier && yarn unit",
2437
"tsc": "tsc --noEmit",
2538
"unit": "vitest",
26-
"watch": "yarn build-js-esm --watch & yarn build-js-cjs --watch & nodemon --watch src --ext css --exec \"yarn copy-styles\""
39+
"watch": "yarn build-js-esm --watch & yarn build-js-cjs --watch & yarn build-js-cjs-package & nodemon --watch src --ext css --exec \"yarn copy-styles\""
2740
},
2841
"keywords": [
2942
"calendar",

sample/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import { createRoot } from 'react-dom/client';
3-
import Sample from './Sample';
3+
4+
import Sample from './Sample.js';
45

56
createRoot(document.getElementById('react-root') as HTMLDivElement).render(<Sample />);

src/DateTimeInput.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import React from 'react';
33
import { fireEvent, render } from '@testing-library/react';
44
import userEvent from '@testing-library/user-event';
55

6-
import DateTimeInput from './DateTimeInput';
6+
import DateTimeInput from './DateTimeInput.js';
77

8-
import { muteConsole, restoreConsole } from '../test-utils';
8+
import { muteConsole, restoreConsole } from '../test-utils.js';
99

1010
vi.useFakeTimers();
1111

src/DateTimeInput.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
getHoursMinutesSeconds,
1212
} from '@wojtekmaj/date-utils';
1313

14-
import Divider from './Divider';
14+
import Divider from './Divider.js';
1515
import DayInput from 'react-date-picker/dist/cjs/DateInput/DayInput';
1616
import MonthInput from 'react-date-picker/dist/cjs/DateInput/MonthInput';
1717
import MonthSelect from 'react-date-picker/dist/cjs/DateInput/MonthSelect';
@@ -21,13 +21,13 @@ import Hour24Input from 'react-time-picker/dist/cjs/TimeInput/Hour24Input';
2121
import MinuteInput from 'react-time-picker/dist/cjs/TimeInput/MinuteInput';
2222
import SecondInput from 'react-time-picker/dist/cjs/TimeInput/SecondInput';
2323
import AmPm from 'react-time-picker/dist/cjs/TimeInput/AmPm';
24-
import NativeInput from './DateTimeInput/NativeInput';
24+
import NativeInput from './DateTimeInput/NativeInput.js';
2525

26-
import { getFormatter, getNumberFormatter, formatDate } from './shared/dateFormatter';
27-
import { convert12to24, convert24to12 } from './shared/dates';
28-
import { between, getAmPmLabels } from './shared/utils';
26+
import { getFormatter, getNumberFormatter, formatDate } from './shared/dateFormatter.js';
27+
import { convert12to24, convert24to12 } from './shared/dates.js';
28+
import { between, getAmPmLabels } from './shared/utils.js';
2929

30-
import type { AmPmType, Detail, LooseValuePiece } from './shared/types';
30+
import type { AmPmType, Detail, LooseValuePiece } from './shared/types.js';
3131

3232
const getFormatterOptionsCache: Record<string, Intl.DateTimeFormatOptions> = {};
3333

src/DateTimeInput/NativeInput.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest';
22
import React from 'react';
33
import { render } from '@testing-library/react';
44

5-
import NativeInput from './NativeInput';
5+
import NativeInput from './NativeInput.js';
66

77
describe('NativeInput', () => {
88
const defaultProps = {

src/DateTimePicker.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React from 'react';
33
import { act, fireEvent, render, waitFor, waitForElementToBeRemoved } from '@testing-library/react';
44
import userEvent from '@testing-library/user-event';
55

6-
import DateTimePicker from './DateTimePicker';
6+
import DateTimePicker from './DateTimePicker.js';
77

88
async function waitForElementToBeRemovedOrHidden(callback: () => HTMLElement | null) {
99
const element = callback();

src/DateTimePicker.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,19 @@ import Calendar from 'react-calendar';
99
import Clock from 'react-clock';
1010
import Fit from 'react-fit';
1111

12-
import DateTimeInput from './DateTimeInput';
12+
import DateTimeInput from './DateTimeInput.js';
1313

14-
import { isMaxDate, isMinDate, rangeOf } from './shared/propTypes';
14+
import { isMaxDate, isMinDate, rangeOf } from './shared/propTypes.js';
1515

1616
import type { ReactNodeArray } from 'prop-types';
17-
import type { ClassName, CloseReason, Detail, LooseValue, OpenReason, Value } from './shared/types';
17+
import type {
18+
ClassName,
19+
CloseReason,
20+
Detail,
21+
LooseValue,
22+
OpenReason,
23+
Value,
24+
} from './shared/types.js';
1825

1926
const baseClassName = 'react-datetime-picker';
2027
const outsideActionEvents = ['mousedown', 'focusin', 'touchstart'] as const;

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import DateTimePicker from './DateTimePicker';
1+
import DateTimePicker from './DateTimePicker.js';
22

3-
export type { DateTimePickerProps } from './DateTimePicker';
3+
export type { DateTimePickerProps } from './DateTimePicker.js';
44

55
export { DateTimePicker };
66

src/shared/dateFormatter.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from 'vitest';
2-
import { formatDate } from './dateFormatter';
2+
import { formatDate } from './dateFormatter.js';
33

44
describe('formatDate', () => {
55
it('returns proper full numeric date', () => {

src/shared/dates.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from 'vitest';
2-
import { convert12to24, convert24to12 } from './dates';
2+
import { convert12to24, convert24to12 } from './dates.js';
33

44
describe('convert12to24', () => {
55
it.each`

0 commit comments

Comments
 (0)