@wise/dynamic-flow-client 2.4.0 → 2.6.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.
Files changed (37) hide show
  1. package/build/i18n/tr.json +2 -2
  2. package/build/main.js +108 -24
  3. package/build/main.min.js +1 -1
  4. package/build/types/formControl/FormControl.d.ts +4 -6
  5. package/build/types/formControl/utils/getAutocompleteString.d.ts +2 -0
  6. package/build/types/formControl/utils/index.d.ts +1 -0
  7. package/build/types/revamp/domain/components/AlertComponent.d.ts +2 -0
  8. package/build/types/revamp/domain/components/ButtonComponent.d.ts +23 -0
  9. package/build/types/revamp/domain/components/HeadingComponent.d.ts +2 -0
  10. package/build/types/revamp/domain/components/ObjectComponent.d.ts +15 -7
  11. package/build/types/revamp/domain/components/ParagraphComponent.d.ts +2 -0
  12. package/build/types/revamp/domain/components/TextInputComponent.d.ts +4 -5
  13. package/build/types/revamp/domain/mappers/layout/alertLayoutToComponent.d.ts +2 -1
  14. package/build/types/revamp/domain/mappers/layout/buttonLayoutToComponent.d.ts +3 -0
  15. package/build/types/revamp/domain/mappers/layout/formLayoutToComponent.d.ts +3 -2
  16. package/build/types/revamp/domain/mappers/layout/headingLayoutToComponent.d.ts +2 -1
  17. package/build/types/revamp/domain/mappers/layout/paragraphLayoutToComponent.d.ts +2 -1
  18. package/build/types/revamp/domain/mappers/mapSchemaToComponents.d.ts +2 -2
  19. package/build/types/revamp/domain/mappers/mapStepToComponents.d.ts +7 -2
  20. package/build/types/revamp/domain/mappers/schema/objectSchemaToComponent.d.ts +3 -0
  21. package/build/types/revamp/domain/mappers/schema/stringSchemaToComponent.d.ts +2 -2
  22. package/build/types/revamp/domain/mappers/schema/types.d.ts +6 -2
  23. package/build/types/revamp/domain/mappers/utils/legacy-utils.d.ts +2 -0
  24. package/build/types/revamp/domain/types.d.ts +12 -6
  25. package/build/types/revamp/renderers/mappers/buttonComponentToProps.d.ts +3 -0
  26. package/build/types/revamp/renderers/mappers/componentToRendererProps.d.ts +2 -1
  27. package/build/types/revamp/renderers/mappers/objectComponentToProps.d.ts +4 -0
  28. package/build/types/revamp/renderers/types.d.ts +15 -0
  29. package/build/types/revamp/step/utils/render-utils.d.ts +5 -0
  30. package/build/types/revamp/utils/findComponent.d.ts +2 -0
  31. package/build/types/revamp/utils/getSubmittableData.d.ts +3 -0
  32. package/build/types/revamp/utils/type-utils.d.ts +4 -0
  33. package/build/types/revamp/wise/renderers/ButtonRenderer.d.ts +3 -0
  34. package/build/types/revamp/wise/renderers/ObjectRenderer.d.ts +3 -0
  35. package/build/types/revamp/wise/renderers/utils/layout-utils.d.ts +1 -1
  36. package/package.json +29 -28
  37. package/build/types/revamp/domain/components/Step.d.ts +0 -9
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "dynamicFlows.ArraySchema.addItem": "Kaydet",
3
- "dynamicFlows.ArraySchema.addItemTitle": "Add Item",
3
+ "dynamicFlows.ArraySchema.addItemTitle": "Öğe ekle",
4
4
  "dynamicFlows.ArraySchema.editItem": "Kaydet",
5
5
  "dynamicFlows.ArraySchema.maxItemsError": "Lütfen {maxItems} veya daha az ekleme yapın",
6
6
  "dynamicFlows.ArraySchema.minItemsError": "Lütfen en az {minItems} ekleme yapın.",
@@ -13,7 +13,7 @@
13
13
  "dynamicFlows.CameraCapture.reviewInstructions": "Fotoğrafınız net, okunaklı ve eksiksiz mi?",
14
14
  "dynamicFlows.CameraCapture.reviewRetry": "Hayır, tekrar dene",
15
15
  "dynamicFlows.CameraCapture.reviewSubmit": "Evet, gönder",
16
- "dynamicFlows.CameraCapture.rotatePhone.text": "Rotate your phone to portrait view to take a photo",
16
+ "dynamicFlows.CameraCapture.rotatePhone.text": "Fotoğraf çekmek için telefonunuzu dik pozisyonda tutun",
17
17
  "dynamicFlows.ControlFeedback.maxLength": "Lütfen {maxLength} veya daha az karakter girin.",
18
18
  "dynamicFlows.ControlFeedback.maximum": "Lütfen {maximum} veya daha düşük bir sayı girin.",
19
19
  "dynamicFlows.ControlFeedback.maximumDate": "Lütfen {maximum} veya daha erken bir tarih girin.",
package/build/main.js CHANGED
@@ -99,9 +99,9 @@ var require_classnames = __commonJS({
99
99
  }
100
100
  });
101
101
 
102
- // ../../node_modules/.pnpm/react-webcam@7.1.1_react-dom@18.2.0_react@18.2.0/node_modules/react-webcam/dist/react-webcam.js
102
+ // ../../node_modules/.pnpm/react-webcam@7.2.0_react-dom@18.2.0_react@18.2.0/node_modules/react-webcam/dist/react-webcam.js
103
103
  var require_react_webcam = __commonJS({
104
- "../../node_modules/.pnpm/react-webcam@7.1.1_react-dom@18.2.0_react@18.2.0/node_modules/react-webcam/dist/react-webcam.js"(exports, module2) {
104
+ "../../node_modules/.pnpm/react-webcam@7.2.0_react-dom@18.2.0_react@18.2.0/node_modules/react-webcam/dist/react-webcam.js"(exports, module2) {
105
105
  "use strict";
106
106
  (function webpackUniversalModuleDefinition(root, factory) {
107
107
  if (typeof exports === "object" && typeof module2 === "object")
@@ -477,7 +477,7 @@ var require_react_webcam = __commonJS({
477
477
  Webcam3.prototype.render = function() {
478
478
  var _this = this;
479
479
  var _a = this, state = _a.state, props = _a.props;
480
- var audio = props.audio, forceScreenshotSourceSize = props.forceScreenshotSourceSize, onUserMedia = props.onUserMedia, onUserMediaError = props.onUserMediaError, screenshotFormat = props.screenshotFormat, screenshotQuality = props.screenshotQuality, minScreenshotWidth = props.minScreenshotWidth, minScreenshotHeight = props.minScreenshotHeight, audioConstraints = props.audioConstraints, videoConstraints = props.videoConstraints, imageSmoothing = props.imageSmoothing, mirrored = props.mirrored, _b = props.style, style = _b === void 0 ? {} : _b, children = props.children, rest = __rest(props, ["audio", "forceScreenshotSourceSize", "onUserMedia", "onUserMediaError", "screenshotFormat", "screenshotQuality", "minScreenshotWidth", "minScreenshotHeight", "audioConstraints", "videoConstraints", "imageSmoothing", "mirrored", "style", "children"]);
480
+ var audio = props.audio, forceScreenshotSourceSize = props.forceScreenshotSourceSize, disablePictureInPicture = props.disablePictureInPicture, onUserMedia = props.onUserMedia, onUserMediaError = props.onUserMediaError, screenshotFormat = props.screenshotFormat, screenshotQuality = props.screenshotQuality, minScreenshotWidth = props.minScreenshotWidth, minScreenshotHeight = props.minScreenshotHeight, audioConstraints = props.audioConstraints, videoConstraints = props.videoConstraints, imageSmoothing = props.imageSmoothing, mirrored = props.mirrored, _b = props.style, style = _b === void 0 ? {} : _b, children = props.children, rest = __rest(props, ["audio", "forceScreenshotSourceSize", "disablePictureInPicture", "onUserMedia", "onUserMediaError", "screenshotFormat", "screenshotQuality", "minScreenshotWidth", "minScreenshotHeight", "audioConstraints", "videoConstraints", "imageSmoothing", "mirrored", "style", "children"]);
481
481
  var videoStyle = mirrored ? __assign(__assign({}, style), { transform: (style.transform || "") + " scaleX(-1)" }) : style;
482
482
  var childrenProps = {
483
483
  getScreenshot: this.getScreenshot.bind(this)
@@ -485,7 +485,7 @@ var require_react_webcam = __commonJS({
485
485
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](
486
486
  react__WEBPACK_IMPORTED_MODULE_0__["Fragment"],
487
487
  null,
488
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("video", __assign({ autoPlay: true, src: state.src, muted: !audio, playsInline: true, ref: function(ref) {
488
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("video", __assign({ autoPlay: true, disablePictureInPicture, src: state.src, muted: !audio, playsInline: true, ref: function(ref) {
489
489
  _this.video = ref;
490
490
  }, style: videoStyle }, rest)),
491
491
  children && children(childrenProps)
@@ -493,6 +493,7 @@ var require_react_webcam = __commonJS({
493
493
  };
494
494
  Webcam3.defaultProps = {
495
495
  audio: false,
496
+ disablePictureInPicture: false,
496
497
  forceScreenshotSourceSize: false,
497
498
  imageSmoothing: true,
498
499
  mirrored: false,
@@ -2491,7 +2492,7 @@ var DynamicButton = (props) => {
2491
2492
  import_components3.Button,
2492
2493
  {
2493
2494
  size: getButtonSize(component.size),
2494
- type,
2495
+ type: priority === "tertiary" ? void 0 : type,
2495
2496
  priority,
2496
2497
  block: true,
2497
2498
  className,
@@ -2753,7 +2754,7 @@ var ControlFeedback = (props) => {
2753
2754
  const validationMessages = __spreadValues(__spreadValues(__spreadValues({}, defaultValidationMessages), props.validationMessages), props.schema.validationMessages);
2754
2755
  const isErrorVisible = (props.submitted || !props.changed) && !!props.errors;
2755
2756
  const isValidationVisible = !isErrorVisible && (props.submitted || props.changed && props.blurred) && !!((_a = props.validations) == null ? void 0 : _a.length);
2756
- const isDescriptionVisible = props.focused && props.schema.description && !isValidationVisible;
2757
+ const isDescriptionVisible = props.schema.description && !isErrorVisible && !isValidationVisible;
2757
2758
  const hasInfoMessage = !!props.infoMessage;
2758
2759
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { id: props.id, children: [
2759
2760
  isErrorVisible ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_components7.InlineAlert, { type: "error", children: props.errors }) : null,
@@ -3026,7 +3027,8 @@ var ItemSummaryOption = ({
3026
3027
  onClick,
3027
3028
  media: getNavigationOptionMedia(item),
3028
3029
  title: item.title,
3029
- content: item.description
3030
+ content: item.description,
3031
+ showMediaAtAllSizes: true
3030
3032
  }
3031
3033
  );
3032
3034
  };
@@ -3365,7 +3367,8 @@ var RepeatableSchema = ({
3365
3367
  {
3366
3368
  onClick: onAddItem,
3367
3369
  media: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_icons.Plus, {}),
3368
- title: schema.addItemTitle || formatMessage(RepeatableSchema_messages_default.addItemTitle)
3370
+ title: schema.addItemTitle || formatMessage(RepeatableSchema_messages_default.addItemTitle),
3371
+ showMediaAtAllSizes: true
3369
3372
  }
3370
3373
  ),
3371
3374
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
@@ -3679,17 +3682,96 @@ var logInvalidTypeFallbackWarning = ({
3679
3682
  );
3680
3683
  };
3681
3684
 
3685
+ // src/formControl/utils/getAutocompleteString.ts
3686
+ var getAutocompleteString = (hints) => {
3687
+ const validHints = hints.filter((hint) => autocompleteHintMap[hint]);
3688
+ if (validHints.length === 0) {
3689
+ return "off";
3690
+ }
3691
+ return validHints.map((hint) => autocompleteHintMap[hint]).join(" ");
3692
+ };
3693
+ var autocompleteHintMap = {
3694
+ on: "on",
3695
+ name: "name",
3696
+ namePrefix: "honorific-prefix",
3697
+ givenName: "given-name",
3698
+ additionalName: "additional-name",
3699
+ familyName: "family-name",
3700
+ nameSuffix: "honorific-suffix",
3701
+ nickname: "nickname",
3702
+ email: "email",
3703
+ // Web doesn't have a specific mapping for new username, but this is semantically close enough
3704
+ newUsername: "username",
3705
+ username: "username",
3706
+ newPassword: "new-password",
3707
+ password: "current-password",
3708
+ oneTimeCode: "one-time-code",
3709
+ jobTitle: "organization-title",
3710
+ organizationName: "organization",
3711
+ fullStreetAddress: "street-address",
3712
+ streetAddressLine1: "address-line1",
3713
+ streetAddressLine2: "address-line2",
3714
+ streetAddressLine3: "address-line3",
3715
+ addressLevel1: "address-level1",
3716
+ addressLevel2: "address-level2",
3717
+ addressLevel3: "address-level3",
3718
+ addressLevel4: "address-level4",
3719
+ countryCode: "country",
3720
+ countryName: "country-name",
3721
+ postalCode: "postal-code",
3722
+ creditCardName: "cc-name",
3723
+ creditCardGivenName: "cc-given-name",
3724
+ creditCardMiddleName: "cc-additional-name",
3725
+ creditCardFamilyName: "cc-family-name",
3726
+ creditCardNumber: "cc-number",
3727
+ creditCardExpiration: "cc-exp",
3728
+ creditCardExpirationMonth: "cc-exp-month",
3729
+ creditCardExpirationYear: "cc-exp-year",
3730
+ creditCardSecurityCode: "cc-csc",
3731
+ creditCardType: "cc-type",
3732
+ transactionCurrency: "transaction-currency",
3733
+ transactionAmount: "transaction-amount",
3734
+ language: "language",
3735
+ birthdate: "bday",
3736
+ birthdateDay: "bday-day",
3737
+ birthdateMonth: "bday-month",
3738
+ birthdateYear: "bday-year",
3739
+ gender: "sex",
3740
+ phoneNumber: "tel",
3741
+ phoneCountryCode: "tel-country-code",
3742
+ phoneNational: "tel-national",
3743
+ phoneAreaCode: "tel-area-code",
3744
+ phoneLocal: "tel-local",
3745
+ phoneLocalPrefix: "tel-local-prefix",
3746
+ phoneLocalSuffix: "tel-local-suffix",
3747
+ phoneExtension: "tel-extension",
3748
+ url: "url",
3749
+ photo: "photo",
3750
+ impp: "impp",
3751
+ shipping: "shipping",
3752
+ billing: "billing",
3753
+ home: "home",
3754
+ work: "work",
3755
+ mobile: "mobile",
3756
+ fax: "fax",
3757
+ pager: "pager"
3758
+ };
3759
+
3682
3760
  // src/formControl/FormControl.tsx
3683
3761
  var import_jsx_runtime27 = require("react/jsx-runtime");
3684
3762
  var _FormControl = class _FormControl extends import_react15.PureComponent {
3685
3763
  constructor(props) {
3686
3764
  super(props);
3687
- /**
3688
- * autocomplete hides our form help so we need to disable it when help text
3689
- * is present. Chrome ignores autocomplete=off, the only way to disable it is
3690
- * to provide an 'invalid' value, for which 'disabled' serves.
3691
- */
3692
- this.getAutocompleteStatus = () => this.props.autoComplete ? "on" : "disabled";
3765
+ this.getAutocompleteValue = () => {
3766
+ const { autoComplete, autocompleteHint } = this.props;
3767
+ if (isArray(autocompleteHint)) {
3768
+ return getAutocompleteString(autocompleteHint);
3769
+ }
3770
+ if (autoComplete === true) {
3771
+ return "on";
3772
+ }
3773
+ return "off";
3774
+ };
3693
3775
  this.handleOnChange = (value) => {
3694
3776
  this.props.onChange(value);
3695
3777
  };
@@ -3842,7 +3924,7 @@ var _FormControl = class _FormControl extends import_react15.PureComponent {
3842
3924
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3843
3925
  "input",
3844
3926
  {
3845
- autoComplete: this.getAutocompleteStatus(),
3927
+ autoComplete: this.getAutocompleteValue(),
3846
3928
  className: "form-control",
3847
3929
  disabled,
3848
3930
  id,
@@ -3886,7 +3968,7 @@ var _FormControl = class _FormControl extends import_react15.PureComponent {
3886
3968
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3887
3969
  "input",
3888
3970
  {
3889
- autoComplete: this.getAutocompleteStatus(),
3971
+ autoComplete: this.getAutocompleteValue(),
3890
3972
  className: "form-control",
3891
3973
  disabled,
3892
3974
  id,
@@ -3964,7 +4046,7 @@ var _FormControl = class _FormControl extends import_react15.PureComponent {
3964
4046
  onFocus: this.handleOnFocus,
3965
4047
  onBlur: this.handleOnBlur,
3966
4048
  disabled,
3967
- autoComplete: this.getAutocompleteStatus()
4049
+ autoComplete: this.getAutocompleteValue()
3968
4050
  };
3969
4051
  if (this.props.displayPattern) {
3970
4052
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -4024,7 +4106,7 @@ var _FormControl = class _FormControl extends import_react15.PureComponent {
4024
4106
  onFocus: this.handleOnFocus,
4025
4107
  onBlur: this.handleOnBlur,
4026
4108
  disabled,
4027
- autoComplete: this.getAutocompleteStatus()
4109
+ autoComplete: this.getAutocompleteValue()
4028
4110
  };
4029
4111
  if (this.props.displayPattern) {
4030
4112
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -4253,6 +4335,7 @@ var SchemaFormControl = (props) => {
4253
4335
  options: options || [],
4254
4336
  placeholder: schema.placeholder,
4255
4337
  autoComplete: !schema.help,
4338
+ autocompleteHint: schema.autocompleteHint,
4256
4339
  disabled: disabled || schema.disabled,
4257
4340
  displayPattern: schema.displayFormat,
4258
4341
  // TODO: LOW avoid type assertion below
@@ -4415,11 +4498,11 @@ var OneOfSchema = (props) => {
4415
4498
  function getTitleAndHelp(schema, id) {
4416
4499
  var _a;
4417
4500
  const helpElement = schema.help ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Help_default, { help: schema.help }) : null;
4418
- const titleElement = isConstSchema(schema.oneOf[0]) ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("label", { className: "control-label d-inline", htmlFor: id, children: [
4501
+ const titleElement = isConstSchema(schema.oneOf[0]) ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "m-b-1", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("label", { className: "control-label d-inline", htmlFor: id, children: [
4419
4502
  schema.title,
4420
4503
  " ",
4421
4504
  helpElement
4422
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: helpElement ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("h4", { className: "m-b-2", children: [
4505
+ ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: helpElement ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("h4", { className: "m-b-2", children: [
4423
4506
  schema.title,
4424
4507
  " ",
4425
4508
  helpElement
@@ -5384,6 +5467,7 @@ var SearchInput = ({ title, value, onFocus, onChange }) => {
5384
5467
  {
5385
5468
  type: "text",
5386
5469
  value,
5470
+ className: "m-t-1",
5387
5471
  onFocus,
5388
5472
  onChange: (event) => onChange(event.currentTarget.value)
5389
5473
  }
@@ -5636,7 +5720,7 @@ var BasicTypeSchema = (props) => {
5636
5720
  const formGroupClasses = {
5637
5721
  "form-group": true,
5638
5722
  "has-error": (props.submitted || !changed) && !!props.errors || (props.submitted || changed && blurred) && !!validations.length,
5639
- "has-info": focused && !!props.schema.description || !!props.infoMessage
5723
+ "has-info": !!props.schema.description || !!props.infoMessage
5640
5724
  };
5641
5725
  const showLabel = props.schema.format !== "file" && props.schema.type !== "boolean";
5642
5726
  const schemaHelp = props.schema.help;
@@ -5644,7 +5728,7 @@ var BasicTypeSchema = (props) => {
5644
5728
  return !isHidden ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
5645
5729
  props.schema.alert && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(DynamicAlert_default, { component: props.schema.alert }),
5646
5730
  /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: (0, import_classnames6.default)(formGroupClasses), children: [
5647
- showLabel && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "d-inline-block", children: [
5731
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "d-inline-block m-b-1", children: [
5648
5732
  /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "control-label d-inline", htmlFor: id, children: props.schema.title }),
5649
5733
  !!schemaHelp && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Help_default, { help: schemaHelp })
5650
5734
  ] }),
@@ -7950,7 +8034,7 @@ var th_default = {
7950
8034
  // src/i18n/tr.json
7951
8035
  var tr_default = {
7952
8036
  "dynamicFlows.ArraySchema.addItem": "Kaydet",
7953
- "dynamicFlows.ArraySchema.addItemTitle": "Add Item",
8037
+ "dynamicFlows.ArraySchema.addItemTitle": "\xD6\u011Fe ekle",
7954
8038
  "dynamicFlows.ArraySchema.editItem": "Kaydet",
7955
8039
  "dynamicFlows.ArraySchema.maxItemsError": "L\xFCtfen {maxItems} veya daha az ekleme yap\u0131n",
7956
8040
  "dynamicFlows.ArraySchema.minItemsError": "L\xFCtfen en az {minItems} ekleme yap\u0131n.",
@@ -7963,7 +8047,7 @@ var tr_default = {
7963
8047
  "dynamicFlows.CameraCapture.reviewInstructions": "Foto\u011Fraf\u0131n\u0131z net, okunakl\u0131 ve eksiksiz mi?",
7964
8048
  "dynamicFlows.CameraCapture.reviewRetry": "Hay\u0131r, tekrar dene",
7965
8049
  "dynamicFlows.CameraCapture.reviewSubmit": "Evet, g\xF6nder",
7966
- "dynamicFlows.CameraCapture.rotatePhone.text": "Rotate your phone to portrait view to take a photo",
8050
+ "dynamicFlows.CameraCapture.rotatePhone.text": "Foto\u011Fraf \xE7ekmek i\xE7in telefonunuzu dik pozisyonda tutun",
7967
8051
  "dynamicFlows.ControlFeedback.maxLength": "L\xFCtfen {maxLength} veya daha az karakter girin.",
7968
8052
  "dynamicFlows.ControlFeedback.maximum": "L\xFCtfen {maximum} veya daha d\xFC\u015F\xFCk bir say\u0131 girin.",
7969
8053
  "dynamicFlows.ControlFeedback.maximumDate": "L\xFCtfen {maximum} veya daha erken bir tarih girin.",