This commit is contained in:
2025-08-25 20:24:23 +08:00
parent 30106e0129
commit 0ae8d7a709
1044 changed files with 321581 additions and 0 deletions

View File

@@ -0,0 +1,326 @@
# Change Log
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.4.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.2.3...decap-cms-widget-datetime@3.4.0) (2025-07-15)
**Note:** Version bump only for package decap-cms-widget-datetime
# [3.3.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.2.3...decap-cms-widget-datetime@3.3.0) (2025-06-26)
**Note:** Version bump only for package decap-cms-widget-datetime
## [3.2.3](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.2.2...decap-cms-widget-datetime@3.2.3) (2024-08-30)
### Bug Fixes
- trigger change if default is {{now}} ([#7272](https://github.com/decaporg/decap-cms/issues/7272)) ([556e0d5](https://github.com/decaporg/decap-cms/commit/556e0d56aa623219d4f0f3be93bd2ba410e6596f))
## [3.2.2](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.2.1...decap-cms-widget-datetime@3.2.2) (2024-08-13)
### Reverts
- Revert "Update dependencies (#7264)" ([22d483a](https://github.com/decaporg/decap-cms/commit/22d483a5b0c654071ae05735ac4f49abdc13d38c)), closes [#7264](https://github.com/decaporg/decap-cms/issues/7264)
## [3.2.1](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.2.0...decap-cms-widget-datetime@3.2.1) (2024-08-13)
**Note:** Version bump only for package decap-cms-widget-datetime
# [3.2.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.5...decap-cms-widget-datetime@3.2.0) (2024-08-12)
### Fix
- improve datetime widget ([#7261](https://github.com/decaporg/decap-cms/issues/7261)) ([94993be](https://github.com/decaporg/decap-cms/commit/94993be8c5b206b61068487f2d751fb0aa77859a)), closes [#3679](https://github.com/decaporg/decap-cms/issues/3679) [#7250](https://github.com/decaporg/decap-cms/issues/7250)
### BREAKING CHANGES
- The datetime field is empty by default, from now on, but it was prefilled with the current date until now. Use `default: '{{now}}'` to prefill the field with the current date.
## [3.1.5](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.4...decap-cms-widget-datetime@3.1.5) (2024-04-16)
### Bug Fixes
- datetime parsing display value when format not provided ([#7181](https://github.com/decaporg/decap-cms/issues/7181)) ([9718772](https://github.com/decaporg/decap-cms/commit/9718772349d5199e01137ef08606eaa82da45e16))
## [3.1.4](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.3...decap-cms-widget-datetime@3.1.4) (2024-04-11)
### Bug Fixes
- fix formatInputValue ignoring format ([#7170](https://github.com/decaporg/decap-cms/issues/7170)) ([0b4b1cb](https://github.com/decaporg/decap-cms/commit/0b4b1cbdaf9da623f115633b86c67015921453b0))
## [3.1.3](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.2...decap-cms-widget-datetime@3.1.3) (2024-04-03)
### Bug Fixes
- **datetime-widget:** revert default date format to include timezone ([#7165](https://github.com/decaporg/decap-cms/issues/7165)) ([46294d6](https://github.com/decaporg/decap-cms/commit/46294d6fcd7f785f8c6346baeaa703d72b833b3b))
## [3.1.2](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.1...decap-cms-widget-datetime@3.1.2) (2024-03-29)
**Note:** Version bump only for package decap-cms-widget-datetime
## [3.1.1](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.0-beta.3...decap-cms-widget-datetime@3.1.1) (2024-03-21)
**Note:** Version bump only for package decap-cms-widget-datetime
# [3.1.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.0-beta.3...decap-cms-widget-datetime@3.1.0) (2024-02-01)
**Note:** Version bump only for package decap-cms-widget-datetime
# [3.1.0-beta.3](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.0-beta.2...decap-cms-widget-datetime@3.1.0-beta.3) (2024-01-31)
### Bug Fixes
- change datetime widget value format ([#7072](https://github.com/decaporg/decap-cms/issues/7072)) ([445a48c](https://github.com/decaporg/decap-cms/commit/445a48c54ad87184425c5f460de262b31c1f0cae)), closes [#7066](https://github.com/decaporg/decap-cms/issues/7066)
# [3.1.0-beta.2](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.0-beta.1...decap-cms-widget-datetime@3.1.0-beta.2) (2024-01-16)
### Bug Fixes
- change dayjs to per-package dependency ([#6992](https://github.com/decaporg/decap-cms/issues/6992)) ([0c278b0](https://github.com/decaporg/decap-cms/commit/0c278b0a83d93233d3b3e860d3029df20fe1c501))
# [3.1.0-beta.1](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.0-beta.0...decap-cms-widget-datetime@3.1.0-beta.1) (2023-11-23)
### Performance Improvements
- replace moment with dayjs ([#6980](https://github.com/decaporg/decap-cms/issues/6980)) ([22370b1](https://github.com/decaporg/decap-cms/commit/22370b13e49a4a5f58a60ebd4bc40ce4b141eb11))
# [3.1.0-beta.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.1.0...decap-cms-widget-datetime@3.1.0-beta.0) (2023-10-20)
### Reverts
- Revert "chore(release): publish" ([b89fc89](https://github.com/decaporg/decap-cms/commit/b89fc894dfbb5f4136b2e5427fd25a29378a58c6))
## [3.0.3](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.0.2...decap-cms-widget-datetime@3.0.3) (2023-10-13)
**Note:** Version bump only for package decap-cms-widget-datetime
## [3.0.2](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.0.1...decap-cms-widget-datetime@3.0.2) (2023-09-06)
**Note:** Version bump only for package decap-cms-widget-datetime
## [3.0.1](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@3.0.0...decap-cms-widget-datetime@3.0.1) (2023-08-25)
### Bug Fixes
- update peer dependencies ([#6886](https://github.com/decaporg/decap-cms/issues/6886)) ([e580ce5](https://github.com/decaporg/decap-cms/commit/e580ce52ce5f80fa040e8fbcab7fed0744f4f695))
# [3.0.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@2.8.0...decap-cms-widget-datetime@3.0.0) (2023-08-18)
**Note:** Version bump only for package decap-cms-widget-datetime
# [2.8.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@2.8.0-beta.0...decap-cms-widget-datetime@2.8.0) (2023-08-18)
**Note:** Version bump only for package decap-cms-widget-datetime
# 2.8.0-beta.0 (2023-08-18)
### Features
- rename packages ([#6863](https://github.com/decaporg/decap-cms/issues/6863)) ([d515e7b](https://github.com/decaporg/decap-cms/commit/d515e7bd33216a775d96887b08c4f7b1962941bb))
## [2.7.5-beta.0](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@2.7.4...decap-cms-widget-datetime@2.7.5-beta.0) (2023-07-27)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.7.4](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@2.7.3...decap-cms-widget-datetime@2.7.4) (2021-09-13)
### Bug Fixes
- **deps:** update react-datetime ([#5803](https://github.com/decaporg/decap-cms/issues/5803)) ([477efa5](https://github.com/decaporg/decap-cms/commit/477efa58f1a26e60c9ba5c0405e11132ecb7c68a))
## [2.7.3](https://github.com/decaporg/decap-cms/compare/decap-cms-widget-datetime@2.7.2...decap-cms-widget-datetime@2.7.3) (2021-08-17)
### Bug Fixes
- make 'now' button consistent ([#5716](https://github.com/decaporg/decap-cms/issues/5716)) ([97de9da](https://github.com/decaporg/decap-cms/commit/97de9da948fff3b132d4d31c5f9069780abf3cc6))
## [2.7.2](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.7.1...decap-cms-widget-datetime@2.7.2) (2021-05-19)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.7.1](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.7.0...decap-cms-widget-datetime@2.7.1) (2021-05-19)
### Bug Fixes
- **deps:** update dependency react-datetime to v3 ([#5383](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/5383)) ([a2735b5](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/a2735b5fd68470821841f608ce2123e8ce74c4e0))
# [2.7.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.6.8...decap-cms-widget-datetime@2.7.0) (2021-05-04)
### Features
- added react 17 as peer dependency in packages ([#5316](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/5316)) ([9e42380](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/9e423805707321396eec137f5b732a5b07a0dd3f))
## [2.6.8](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.6.7...decap-cms-widget-datetime@2.6.8) (2021-02-25)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.6.7](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.6.6...decap-cms-widget-datetime@2.6.7) (2021-02-23)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.6.6](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.6.5...decap-cms-widget-datetime@2.6.6) (2021-02-10)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.6.5](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.6.4...decap-cms-widget-datetime@2.6.5) (2020-09-20)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.6.4](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.6.3...decap-cms-widget-datetime@2.6.4) (2020-09-15)
**Note:** Version bump only for package decap-cms-widget-datetime
## 2.6.3 (2020-09-08)
### Reverts
- Revert "chore(release): publish" ([828bb16](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/828bb16415b8c22a34caa19c50c38b24ffe9ceae))
## 2.6.2 (2020-08-20)
### Reverts
- Revert "chore(release): publish" ([8262487](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/82624879ccbcb16610090041db28f00714d924c8))
## 2.6.1 (2020-07-27)
### Reverts
- Revert "chore(release): publish" ([118d50a](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/118d50a7a70295f25073e564b5161aa2b9883056))
# [2.6.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.5.0...decap-cms-widget-datetime@2.6.0) (2020-06-18)
### Features
- add widgets schema validation ([#3841](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/3841)) ([2b46608](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/2b46608f86d22c8ad34f75e396be7c34462d9e99))
# [2.5.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.4.0...decap-cms-widget-datetime@2.5.0) (2020-05-19)
### Features
- add pickerUtc option to datetime widget ([#3721](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/3721)) ([ef5ff03](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/ef5ff031dab99f73468c32835e2d94311967e09c))
# [2.4.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.3.0...decap-cms-widget-datetime@2.4.0) (2020-04-14)
### Features
- **widget-datetime:** add now to datepicker ([#3484](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/3484)) ([79b8469](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/79b8469337dade3bd7472b3f42b826efc7e0987d))
# [2.3.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.6...decap-cms-widget-datetime@2.3.0) (2020-04-07)
### Features
- **yaml:** support comments ([#3529](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/3529)) ([4afbbdd](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/4afbbdd8a99241d239f28c5be544bb0ca77e345b))
## [2.2.6](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.5...decap-cms-widget-datetime@2.2.6) (2020-02-17)
### Bug Fixes
- **widget-datetime:** use default value when value is undefined ([#3269](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/3269)) ([8cc5fcb](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/8cc5fcbb1957b224fe3adb01364eb0de658ad666))
## [2.2.5](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.4...decap-cms-widget-datetime@2.2.5) (2019-11-07)
### Bug Fixes
- **widget-date:** allow empty value ([#2705](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/2705)) ([d058697](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/d0586976443c4255ba122fba33bbe045069fc461))
## [2.2.4](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.3...decap-cms-widget-datetime@2.2.4) (2019-09-26)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.2.3](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.2...decap-cms-widget-datetime@2.2.3) (2019-07-24)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.2.2](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.2-beta.0...decap-cms-widget-datetime@2.2.2) (2019-04-10)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.2.2-beta.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.1...decap-cms-widget-datetime@2.2.2-beta.0) (2019-04-05)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.2.1](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.1-beta.2...decap-cms-widget-datetime@2.2.1) (2019-03-29)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.2.1-beta.2](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.1-beta.1...decap-cms-widget-datetime@2.2.1-beta.2) (2019-03-28)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.2.1-beta.1](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.1-beta.0...decap-cms-widget-datetime@2.2.1-beta.1) (2019-03-26)
### Bug Fixes
- export on decap-cms and maps on esm ([#2244](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/2244)) ([6ffd13b](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/6ffd13b))
## [2.2.1-beta.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.2.0...decap-cms-widget-datetime@2.2.1-beta.0) (2019-03-25)
### Bug Fixes
- update peer dep versions ([#2234](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/2234)) ([7987091](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/7987091))
# [2.2.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.1.0...decap-cms-widget-datetime@2.2.0) (2019-03-22)
### Features
- add ES module builds ([#2215](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/2215)) ([d142b32](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/d142b32))
# [2.1.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.1.0-beta.0...decap-cms-widget-datetime@2.1.0) (2019-03-22)
**Note:** Version bump only for package decap-cms-widget-datetime
# [2.1.0-beta.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.8-beta.0...decap-cms-widget-datetime@2.1.0-beta.0) (2019-03-21)
### Features
- provide usable UMD builds for all packages ([#2141](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/2141)) ([82cc794](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/82cc794))
## [2.0.8-beta.0](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.7...decap-cms-widget-datetime@2.0.8-beta.0) (2019-03-15)
### Features
- upgrade to Emotion 10 ([#2166](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/issues/2166)) ([ccef446](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/commit/ccef446))
## [2.0.7](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.6...decap-cms-widget-datetime@2.0.7) (2018-11-29)
**Note:** Version bump only for package decap-cms-widget-datetime
## [2.0.6](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.5...decap-cms-widget-datetime@2.0.6) (2018-11-12)
**Note:** Version bump only for package decap-cms-widget-datetime
<a name="2.0.5"></a>
## [2.0.5](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.4...decap-cms-widget-datetime@2.0.5) (2018-08-24)
**Note:** Version bump only for package decap-cms-widget-datetime
<a name="2.0.4"></a>
## [2.0.4](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.3...decap-cms-widget-datetime@2.0.4) (2018-08-07)
**Note:** Version bump only for package decap-cms-widget-datetime
<a name="2.0.3"></a>
## [2.0.3](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.2...decap-cms-widget-datetime@2.0.3) (2018-08-01)
**Note:** Version bump only for package decap-cms-widget-datetime
<a name="2.0.2"></a>
## [2.0.2](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime/compare/decap-cms-widget-datetime@2.0.1...decap-cms-widget-datetime@2.0.2) (2018-07-28)
**Note:** Version bump only for package decap-cms-widget-datetime
<a name="2.0.1"></a>
## 2.0.1 (2018-07-26)
<a name="2.0.0"></a>
# 2.0.0 (2018-07-26)
**Note:** Version bump only for package decap-cms-widget-datetime

View File

@@ -0,0 +1,9 @@
# Docs coming soon!
Decap CMS was converted from a single npm package to a "monorepo" of over 20 packages.
We haven't created a README for this package yet, but you can:
1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation
site](https://www.decapcms.org) for more info.
2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.
3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-datetime/README.md)!

View File

@@ -0,0 +1,31 @@
{
"name": "decap-cms-widget-datetime",
"description": "Widget for editing dates and times in Decap CMS.",
"version": "3.4.0",
"homepage": "https://www.decapcms.org/docs/widgets/#datetime",
"repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime",
"bugs": "https://github.com/decaporg/decap-cms/issues",
"module": "dist/esm/index.js",
"main": "dist/decap-cms-widget-datetime.js",
"license": "MIT",
"keywords": [
"decap-cms",
"widget",
"date",
"time",
"datetime"
],
"sideEffects": false,
"scripts": {
"develop": "npm run build:esm -- --watch",
"build": "cross-env NODE_ENV=production webpack",
"build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward"
},
"dependencies": {
"dayjs": "^1.11.10"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": "^19.1.0"
}
}

View File

@@ -0,0 +1,206 @@
/** @jsx jsx */
import React from 'react';
import PropTypes from 'prop-types';
import { jsx, css } from '@emotion/react';
import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat';
import localizedFormat from 'dayjs/plugin/localizedFormat';
import utc from 'dayjs/plugin/utc';
import { buttons } from 'decap-cms-ui-default';
dayjs.extend(customParseFormat);
dayjs.extend(localizedFormat);
dayjs.extend(utc);
function Buttons({ t, handleChange, getNow }) {
return (
<div
css={css`
display: flex;
gap: 20px;
width: fit-content;
`}
>
<button
css={css`
${buttons.button}
${buttons.widget}
`}
onClick={() => handleChange(getNow())}
data-testid="now-button"
>
{t('editor.editorWidgets.datetime.now')}
</button>
<button
css={css`
${buttons.button}
${buttons.widget}
`}
onClick={() => handleChange('')}
data-testid="clear-button"
>
{t('editor.editorWidgets.datetime.clear')}
</button>
</div>
);
}
class DateTimeControl extends React.Component {
static propTypes = {
field: PropTypes.object.isRequired,
forID: PropTypes.string,
onChange: PropTypes.func.isRequired,
classNameWrapper: PropTypes.string.isRequired,
setActiveStyle: PropTypes.func.isRequired,
setInactiveStyle: PropTypes.func.isRequired,
value: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
t: PropTypes.func.isRequired,
isDisabled: PropTypes.bool,
};
static defaultProps = {
isDisabled: false,
};
componentDidMount() {
// Manually validate PropTypes - React 19 breaking change
PropTypes.checkPropTypes(DateTimeControl.propTypes, this.props, 'prop', 'DateTimeControl');
const { value } = this.props;
if (value === '{{now}}') {
this.handleChange(this.getNow());
}
}
isUtc = this.props.field.get('picker_utc') || false;
escapeZ(str) {
if (/Z(?![\]])/.test(str)) {
return str.replace('Z', '[Z]');
}
return str;
}
getFormat() {
const { field } = this.props;
let inputType = 'datetime-local';
let inputFormat = 'YYYY-MM-DDTHH:mm';
let format = `YYYY-MM-DDTHH:mm:ss.SSS${this.isUtc ? '[Z]' : 'Z'}`;
let userFormat = field?.get('format');
let dateFormat = field?.get('date_format');
let timeFormat = field?.get('time_format');
if (dateFormat === true) dateFormat = 'YYYY-MM-DD';
if (timeFormat === true) timeFormat = 'HH:mm';
if (this.isUtc) {
userFormat = this.escapeZ(userFormat);
dateFormat = this.escapeZ(dateFormat);
timeFormat = this.escapeZ(timeFormat);
}
if (typeof dateFormat === 'string' && typeof timeFormat === 'string') {
format = `${dateFormat}T${timeFormat}`;
} else if (typeof timeFormat === 'string') {
inputType = 'time';
format = timeFormat;
} else if (typeof dateFormat === 'string') {
inputType = 'date';
format = dateFormat;
}
if (typeof userFormat === 'string') {
format = userFormat;
inputType = 'datetime-local';
}
if (dateFormat === false) inputType = 'time';
if (timeFormat === false) inputType = 'date';
if (inputType === 'datetime-local') inputFormat = 'YYYY-MM-DDTHH:mm';
if (inputType === 'date') inputFormat = 'YYYY-MM-DD';
if (inputType === 'time') inputFormat = 'HH:mm';
return { format, inputType, inputFormat };
}
isValidDate = dt => dayjs(dt, this.getFormat().inputFormat).isValid() || dt === '';
getNow() {
const { inputFormat } = this.getFormat();
return this.isUtc ? dayjs.utc().format(inputFormat) : dayjs().format(inputFormat);
}
formatInputValue(value) {
if (value === '') return value;
const { format, inputFormat } = this.getFormat();
const inputValue = this.isUtc
? dayjs.utc(value, format).format(inputFormat)
: dayjs(value, format).format(inputFormat);
if (this.isValidDate(inputValue)) {
return inputValue;
}
return this.isUtc ? dayjs.utc(value).format(inputFormat) : dayjs(value).format(inputFormat);
}
handleChange = datetime => {
if (!this.isValidDate(datetime)) return;
const { onChange } = this.props;
if (datetime === '') {
onChange('');
} else {
const { format, inputFormat } = this.getFormat();
const formattedValue = dayjs(datetime, inputFormat).format(format);
onChange(formattedValue);
}
};
onInputChange = e => {
const etv = e.target.value;
this.handleChange(etv);
};
render() {
const { forID, value, classNameWrapper, setActiveStyle, setInactiveStyle, t, isDisabled } =
this.props;
const { inputType } = this.getFormat();
return (
<div
className={classNameWrapper}
css={css`
display: flex !important;
gap: 20px;
align-items: center;
`}
>
<input
id={forID}
data-testid={forID}
type={inputType}
value={value ? this.formatInputValue(value) : ''}
onChange={this.onInputChange}
onFocus={setActiveStyle}
onBlur={setInactiveStyle}
disabled={isDisabled}
/>
{this.isUtc && (
<span
css={css`
font-size: 0.8em;
color: #666;
`}
>
UTC
</span>
)}
{!isDisabled && (
<Buttons t={t} handleChange={v => this.handleChange(v)} getNow={() => this.getNow()} />
)}
</div>
);
}
}
export default DateTimeControl;

View File

@@ -0,0 +1,13 @@
import React from 'react';
import PropTypes from 'prop-types';
import { WidgetPreviewContainer } from 'decap-cms-ui-default';
function DatePreview({ value }) {
return <WidgetPreviewContainer>{value ? value.toString() : null}</WidgetPreviewContainer>;
}
DatePreview.propTypes = {
value: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
};
export default DatePreview;

View File

@@ -0,0 +1,90 @@
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import dayjs from 'dayjs';
import DateTimeControl from '../DateTimeControl';
function setup(propsOverrides = {}) {
const props = {
forID: 'test-datetime',
onChange: jest.fn(),
classNameWrapper: 'classNameWrapper',
setActiveStyle: jest.fn(),
setInactiveStyle: jest.fn(),
value: '',
t: key => key,
isDisabled: false,
field: {
get: jest.fn().mockReturnValue('DD.MM.YYYY'),
},
...propsOverrides,
};
const utils = render(<DateTimeControl {...props} />);
const input = utils.getByTestId('test-datetime');
const nowButton = utils.getByTestId('now-button');
const clearButton = utils.getByTestId('clear-button');
return {
...utils,
props,
input,
nowButton,
clearButton,
};
}
describe('DateTimeControl', () => {
const mockDate = '2025-01-01T12:00:00.000Z';
beforeEach(() => {
jest.clearAllMocks();
jest.useFakeTimers();
jest.setSystemTime(new Date(mockDate));
});
afterEach(() => {
jest.useRealTimers();
});
test('renders the component with input, now button, and clear button', () => {
const { getByTestId } = setup();
expect(getByTestId('test-datetime')).toBeInTheDocument();
expect(getByTestId('now-button')).toBeInTheDocument();
expect(getByTestId('clear-button')).toBeInTheDocument();
});
test('set value to current date if now button is clicked', () => {
const { nowButton, props } = setup();
fireEvent.click(nowButton);
expect(props.onChange).toHaveBeenCalledWith(dayjs().format('DD.MM.YYYY'));
});
test('set value to empty string if clear button is clicked', () => {
const { clearButton, props } = setup({ value: '1970-01-01' });
fireEvent.click(clearButton);
expect(props.onChange).toHaveBeenCalledWith('');
});
test('sets value in custom format (local timezone) when input value changes', () => {
const { input, props } = setup({ field: new Map() });
const testDate = '2024-03-15T10:30:00';
fireEvent.change(input, { target: { value: testDate } });
const expectedValue = dayjs(testDate).format('YYYY-MM-DDTHH:mm:ss.SSSZ');
expect(props.onChange).toHaveBeenCalledWith(expectedValue);
});
test('sets value in custom format (UTC) when input value changes', () => {
const { input, props } = setup({ field: new Map([['picker_utc', true]]) });
const testDate = '2024-03-15T10:30:00';
fireEvent.change(input, { target: { value: testDate } });
const expectedValue = dayjs(testDate).format('YYYY-MM-DDTHH:mm:ss.SSS[Z]');
expect(props.onChange).toHaveBeenCalledWith(expectedValue);
});
});

View File

@@ -0,0 +1,16 @@
import controlComponent from './DateTimeControl';
import previewComponent from './DateTimePreview';
import schema from './schema';
function Widget(opts = {}) {
return {
name: 'datetime',
controlComponent,
previewComponent,
schema,
...opts,
};
}
export const DecapCmsWidgetDatetime = { Widget, controlComponent, previewComponent };
export default DecapCmsWidgetDatetime;

View File

@@ -0,0 +1,8 @@
export default {
properties: {
format: { type: 'string' },
date_format: { oneOf: [{ type: 'string' }, { type: 'boolean' }] },
time_format: { oneOf: [{ type: 'string' }, { type: 'boolean' }] },
picker_utc: { type: 'boolean' },
},
};

View File

@@ -0,0 +1,3 @@
const { getConfig } = require('../../scripts/webpack.js');
module.exports = getConfig();