+
);
}
diff --git a/packages/core/src/components/time-picker/time-picker.tsx b/packages/core/src/components/time-picker/time-picker.tsx
index eb091f66459..1ae9cf4bac1 100644
--- a/packages/core/src/components/time-picker/time-picker.tsx
+++ b/packages/core/src/components/time-picker/time-picker.tsx
@@ -530,23 +530,34 @@ export class TimePicker {
}
private setupVisibilityObserver() {
- let dropdownElement: Element | null = this.hostElement;
- while (dropdownElement && dropdownElement.tagName !== 'IX-DROPDOWN') {
- dropdownElement = dropdownElement.parentElement;
- }
+ let currentElement: Element | null = this.hostElement;
- if (!dropdownElement) {
- return;
- }
+ while (currentElement) {
+ if (currentElement.tagName === 'IX-DROPDOWN') {
+ this.visibilityObserver = new MutationObserver((mutations) =>
+ this.mutationObserverCallback(mutations)
+ );
- this.visibilityObserver = new MutationObserver((mutations) =>
- this.mutationObserverCallback(mutations)
- );
+ this.visibilityObserver.observe(currentElement, {
+ attributes: true,
+ attributeFilter: ['class', 'style'],
+ });
+ return;
+ }
- this.visibilityObserver.observe(dropdownElement, {
- attributes: true,
- attributeFilter: ['class', 'style'],
- });
+ // Try to go up via parentElement first
+ if (currentElement.parentElement) {
+ currentElement = currentElement.parentElement;
+ } else {
+ // We hit a shadow boundary, try to get the host element
+ const rootNode = currentElement.getRootNode();
+ if (rootNode && (rootNode as ShadowRoot).host) {
+ currentElement = (rootNode as ShadowRoot).host as Element;
+ } else {
+ break;
+ }
+ }
+ }
}
private mutationObserverCallback(mutations: MutationRecord[]) {
diff --git a/packages/html-test-app/src/preview-examples/datetime-input-disabled.html b/packages/html-test-app/src/preview-examples/datetime-input-disabled.html
new file mode 100644
index 00000000000..473dd0faa3f
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input-disabled.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ DateTime input disabled example
+
+
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/datetime-input-label.html b/packages/html-test-app/src/preview-examples/datetime-input-label.html
new file mode 100644
index 00000000000..27bee91fc5b
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input-label.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+ DateTime input with label and custom format example
+
+
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/datetime-input-min-max-date.html b/packages/html-test-app/src/preview-examples/datetime-input-min-max-date.html
new file mode 100644
index 00000000000..3890952ce73
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input-min-max-date.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+ DateTime input with min/max date example
+
+
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/datetime-input-readonly.html b/packages/html-test-app/src/preview-examples/datetime-input-readonly.html
new file mode 100644
index 00000000000..6199a6096da
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input-readonly.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ DateTime input readonly example
+
+
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/datetime-input-validation.html b/packages/html-test-app/src/preview-examples/datetime-input-validation.html
new file mode 100644
index 00000000000..9efd22f0849
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input-validation.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+ DateTime input validation example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/datetime-input-with-slots.html b/packages/html-test-app/src/preview-examples/datetime-input-with-slots.html
new file mode 100644
index 00000000000..71c84e15cd8
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input-with-slots.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ DateTime input with slots example
+
+
+
+
+
+ Slot
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/datetime-input.html b/packages/html-test-app/src/preview-examples/datetime-input.html
new file mode 100644
index 00000000000..acd5a99311d
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/datetime-input.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ DateTime input basic example
+
+
+
+
+
+
+
diff --git a/packages/html-test-app/src/preview-examples/quick-test.js b/packages/html-test-app/src/preview-examples/quick-test.js
new file mode 100644
index 00000000000..d0c31261ffe
--- /dev/null
+++ b/packages/html-test-app/src/preview-examples/quick-test.js
@@ -0,0 +1,34 @@
+// Quick DateTime Input Test - Copy and paste into browser console
+
+console.clear();
+console.log('🧪 Quick DateTime Input Test\n');
+
+const inputs = document.querySelectorAll('ix-datetime-input');
+console.log(`Found ${inputs.length} datetime-input components\n`);
+
+inputs.forEach((input, i) => {
+ const label = input.getAttribute('label') || `Input ${i + 1}`;
+ const nativeInput = input.shadowRoot?.querySelector('input');
+ const value = nativeInput?.value || '(empty)';
+ const disabled = input.hasAttribute('disabled');
+ const readonly = input.hasAttribute('readonly');
+ const required = input.hasAttribute('required');
+
+ console.log(`${i + 1}. ${label}`);
+ console.log(` Value: ${value}`);
+ console.log(` States: ${disabled ? 'DISABLED' : ''} ${readonly ? 'READONLY' : ''} ${required ? 'REQUIRED' : ''}`);
+ console.log('');
+});
+
+// Test typing in first input
+console.log('Testing manual input...');
+const firstInput = inputs[0]?.shadowRoot?.querySelector('input');
+if (firstInput) {
+ firstInput.value = '2026/01/21 14:30:00';
+ firstInput.dispatchEvent(new Event('input', { bubbles: true }));
+ console.log('✅ Typed: 2026/01/21 14:30:00');
+} else {
+ console.log('❌ Could not find input element');
+}
+
+console.log('\n✅ Test complete! Check the components in the page.');
diff --git a/packages/react-test-app/src/main.tsx b/packages/react-test-app/src/main.tsx
index e8d188f7b42..dcfa604272b 100644
--- a/packages/react-test-app/src/main.tsx
+++ b/packages/react-test-app/src/main.tsx
@@ -63,6 +63,13 @@ import DateInputWithSlots from './preview-examples/date-input-with-slots';
import Datepicker from './preview-examples/datepicker';
import DatepickerLocale from './preview-examples/datepicker-locale';
import DatepickerRange from './preview-examples/datepicker-range';
+import DatetimeInput from './preview-examples/datetime-input';
+import DatetimeInputDisabled from './preview-examples/datetime-input-disabled';
+import DatetimeInputLabel from './preview-examples/datetime-input-label';
+import DatetimeInputMinMaxDate from './preview-examples/datetime-input-min-max-date';
+import DatetimeInputReadonly from './preview-examples/datetime-input-readonly';
+import DatetimeInputValidation from './preview-examples/datetime-input-validation';
+import DatetimeInputWithSlots from './preview-examples/datetime-input-with-slots';
import Datetimepicker from './preview-examples/datetimepicker';
import Divider from './preview-examples/divider';
import Drawer from './preview-examples/drawer';
@@ -115,11 +122,11 @@ import GroupCustomEntry from './preview-examples/group-custom-entry';
import GroupHeaderSuppressed from './preview-examples/group-header-suppressed';
import HtmlTable from './preview-examples/html-table';
import HtmlTableStriped from './preview-examples/html-table-striped';
-import IconToggleButtonTertiary from './preview-examples/icon-toggle-button-tertiary';
-import IconToggleButtonSubtleTertiary from './preview-examples/icon-toggle-button-subtle-tertiary';
import IconToggleButtonSecondary from './preview-examples/icon-toggle-button-secondary';
-import IconToggleButtonSubtleSecondary from './preview-examples/icon-toggle-button-subtle-secondary';
import IconToggleButtonSubtlePrimary from './preview-examples/icon-toggle-button-subtle-primary';
+import IconToggleButtonSubtleSecondary from './preview-examples/icon-toggle-button-subtle-secondary';
+import IconToggleButtonSubtleTertiary from './preview-examples/icon-toggle-button-subtle-tertiary';
+import IconToggleButtonTertiary from './preview-examples/icon-toggle-button-tertiary';
import Input from './preview-examples/input';
import InputDisabled from './preview-examples/input-disabled';
import InputLabel from './preview-examples/input-label';
@@ -210,17 +217,17 @@ import Toast from './preview-examples/toast';
import ToastCustom from './preview-examples/toast-custom';
import ToastPosition from './preview-examples/toast-position';
import Toggle from './preview-examples/toggle';
-import ToggleButtonTertiary from './preview-examples/toggle-button-tertiary';
-import ToggleButtonSubtlePrimary from './preview-examples/toggle-button-subtle-primary';
import ToggleButtonSecondary from './preview-examples/toggle-button-secondary';
+import ToggleButtonSubtlePrimary from './preview-examples/toggle-button-subtle-primary';
import ToggleButtonSubtleSecondary from './preview-examples/toggle-button-subtle-secondary';
import ToggleButtonSubtleTertiary from './preview-examples/toggle-button-subtle-tertiary';
-import TooltipWithIcon from './preview-examples/tooltip-with-icon';
+import ToggleButtonTertiary from './preview-examples/toggle-button-tertiary';
import ToggleChecked from './preview-examples/toggle-checked';
import ToggleCustomLabel from './preview-examples/toggle-custom-label';
import ToggleDisabled from './preview-examples/toggle-disabled';
import ToggleIndeterminate from './preview-examples/toggle-indeterminate';
import Tooltip from './preview-examples/tooltip';
+import TooltipWithIcon from './preview-examples/tooltip-with-icon';
import Tree from './preview-examples/tree';
import TreeCustom from './preview-examples/tree-custom';
import Upload from './preview-examples/upload';
@@ -692,6 +699,31 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
path="/preview/date-input-with-slots"
element={}
/>
+ } />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
} />
} />
} />
diff --git a/packages/react-test-app/src/preview-examples/datetime-input-disabled.tsx b/packages/react-test-app/src/preview-examples/datetime-input-disabled.tsx
new file mode 100644
index 00000000000..42e478b0438
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input-disabled.tsx
@@ -0,0 +1,16 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput } from '@siemens/ix-react';
+
+function DatetimeInputDisabled() {
+ return ;
+}
+
+export default DatetimeInputDisabled;
diff --git a/packages/react-test-app/src/preview-examples/datetime-input-label.tsx b/packages/react-test-app/src/preview-examples/datetime-input-label.tsx
new file mode 100644
index 00000000000..b16651be150
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input-label.tsx
@@ -0,0 +1,23 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput } from '@siemens/ix-react';
+
+function DatetimeInputLabel() {
+ return (
+
+ );
+}
+
+export default DatetimeInputLabel;
diff --git a/packages/react-test-app/src/preview-examples/datetime-input-min-max-date.tsx b/packages/react-test-app/src/preview-examples/datetime-input-min-max-date.tsx
new file mode 100644
index 00000000000..b378811a49d
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input-min-max-date.tsx
@@ -0,0 +1,22 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput } from '@siemens/ix-react';
+
+function DatetimeInputMinMaxDate() {
+ return (
+
+ );
+}
+
+export default DatetimeInputMinMaxDate;
diff --git a/packages/react-test-app/src/preview-examples/datetime-input-readonly.tsx b/packages/react-test-app/src/preview-examples/datetime-input-readonly.tsx
new file mode 100644
index 00000000000..12268341354
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input-readonly.tsx
@@ -0,0 +1,16 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput } from '@siemens/ix-react';
+
+function DatetimeInputReadonly() {
+ return ;
+}
+
+export default DatetimeInputReadonly;
diff --git a/packages/react-test-app/src/preview-examples/datetime-input-validation.tsx b/packages/react-test-app/src/preview-examples/datetime-input-validation.tsx
new file mode 100644
index 00000000000..55173107f57
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input-validation.tsx
@@ -0,0 +1,50 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput } from '@siemens/ix-react';
+
+function DatetimeInputValidation() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default DatetimeInputValidation;
diff --git a/packages/react-test-app/src/preview-examples/datetime-input-with-slots.tsx b/packages/react-test-app/src/preview-examples/datetime-input-with-slots.tsx
new file mode 100644
index 00000000000..4a726c7873d
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input-with-slots.tsx
@@ -0,0 +1,21 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput, IxIcon, IxTypography } from '@siemens/ix-react';
+
+function DatetimeInputWithSlots() {
+ return (
+
+
+ Slot
+
+ );
+}
+
+export default DatetimeInputWithSlots;
diff --git a/packages/react-test-app/src/preview-examples/datetime-input.tsx b/packages/react-test-app/src/preview-examples/datetime-input.tsx
new file mode 100644
index 00000000000..5a384797a01
--- /dev/null
+++ b/packages/react-test-app/src/preview-examples/datetime-input.tsx
@@ -0,0 +1,16 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { IxDatetimeInput } from '@siemens/ix-react';
+
+function DatetimeInput() {
+ return ;
+}
+
+export default DatetimeInput;
diff --git a/packages/react/src/components.server.ts b/packages/react/src/components.server.ts
index 5e023d86cb4..55398a77e0f 100644
--- a/packages/react/src/components.server.ts
+++ b/packages/react/src/components.server.ts
@@ -8,7 +8,7 @@
// @ts-ignore - ignore potential type issues as the project is importing itself
import * as clientComponents from '@siemens/ix';
-import { type BorderlessChangedEvent, type CustomCloseEvent, type CustomLabelChangeEvent, type DateChangeEvent, type DateInputValidityState, type DateRangeChangeEvent, type DateTimeDateChangeEvent, type DateTimeSelectEvent, type ExpandedChangedEvent, type FilterState, type InputState, type IxBreadcrumbCustomEvent, type IxCardListCustomEvent, type IxCategoryFilterCustomEvent, type IxDateDropdownCustomEvent, type IxDateInputCustomEvent, type IxDatePickerCustomEvent, type IxDatetimePickerCustomEvent, type IxGroupItemCustomEvent, type IxInputCustomEvent, type IxMenuAboutCustomEvent, type IxMenuAboutItemCustomEvent, type IxMenuAboutNewsCustomEvent, type IxMenuAvatarItemCustomEvent, type IxMenuSettingsCustomEvent, type IxMenuSettingsItemCustomEvent, type IxModalHeaderCustomEvent, type IxNumberInputCustomEvent, type IxPaneCustomEvent, type IxSplitButtonCustomEvent, type IxTabItemCustomEvent, type IxTextareaCustomEvent, type IxTimeInputCustomEvent, type IxUploadCustomEvent, type TabClickDetail, type TimeInputValidityState, type VariantChangedEvent } from "@siemens/ix";
+import { type BorderlessChangedEvent, type CustomCloseEvent, type CustomLabelChangeEvent, type DateChangeEvent, type DateInputValidityState, type DateRangeChangeEvent, type DateTimeDateChangeEvent, type DateTimeInputValidityState, type DateTimeSelectEvent, type ExpandedChangedEvent, type FilterState, type InputState, type IxBreadcrumbCustomEvent, type IxCardListCustomEvent, type IxCategoryFilterCustomEvent, type IxDateDropdownCustomEvent, type IxDateInputCustomEvent, type IxDatePickerCustomEvent, type IxDatetimeInputCustomEvent, type IxDatetimePickerCustomEvent, type IxGroupItemCustomEvent, type IxInputCustomEvent, type IxMenuAboutCustomEvent, type IxMenuAboutItemCustomEvent, type IxMenuAboutNewsCustomEvent, type IxMenuAvatarItemCustomEvent, type IxMenuSettingsCustomEvent, type IxMenuSettingsItemCustomEvent, type IxModalHeaderCustomEvent, type IxNumberInputCustomEvent, type IxPaneCustomEvent, type IxSplitButtonCustomEvent, type IxTabItemCustomEvent, type IxTextareaCustomEvent, type IxTimeInputCustomEvent, type IxUploadCustomEvent, type TabClickDetail, type TimeInputValidityState, type VariantChangedEvent } from "@siemens/ix";
import { IxActionCard as IxActionCardElement } from "@siemens/ix/components/ix-action-card.js";
import { IxApplicationHeader as IxApplicationHeaderElement } from "@siemens/ix/components/ix-application-header.js";
import { IxApplication as IxApplicationElement } from "@siemens/ix/components/ix-application.js";
@@ -33,6 +33,7 @@ import { IxCustomField as IxCustomFieldElement } from "@siemens/ix/components/ix
import { IxDateDropdown as IxDateDropdownElement } from "@siemens/ix/components/ix-date-dropdown.js";
import { IxDateInput as IxDateInputElement } from "@siemens/ix/components/ix-date-input.js";
import { IxDatePicker as IxDatePickerElement } from "@siemens/ix/components/ix-date-picker.js";
+import { IxDatetimeInput as IxDatetimeInputElement } from "@siemens/ix/components/ix-datetime-input.js";
import { IxDatetimePicker as IxDatetimePickerElement } from "@siemens/ix/components/ix-datetime-picker.js";
import { IxDivider as IxDividerElement } from "@siemens/ix/components/ix-divider.js";
import { IxDrawer as IxDrawerElement } from "@siemens/ix/components/ix-drawer.js";
@@ -609,6 +610,50 @@ export const IxDatePicker: StencilReactComponent>,
+ onValidityStateChange: EventName>,
+ onIxFocus: EventName>,
+ onIxBlur: EventName>
+};
+
+export const IxDatetimeInput: StencilReactComponent = /*@__PURE__*/ createComponent({
+ tagName: 'ix-datetime-input',
+ properties: {
+ name: 'name',
+ placeholder: 'placeholder',
+ value: 'value',
+ dateFormat: 'date-format',
+ timeFormat: 'time-format',
+ locale: 'locale',
+ required: 'required',
+ disabled: 'disabled',
+ readonly: 'readonly',
+ minDate: 'min-date',
+ maxDate: 'max-date',
+ label: 'label',
+ helperText: 'helper-text',
+ invalidText: 'invalid-text',
+ infoText: 'info-text',
+ warningText: 'warning-text',
+ validText: 'valid-text',
+ showTextAsTooltip: 'show-text-as-tooltip',
+ i18nErrorDateTimeUnparsable: 'i-1-8n-error-date-time-unparsable',
+ i18nDone: 'i-1-8n-done',
+ i18nTime: 'i-1-8n-time',
+ ariaLabelPreviousMonthButton: 'aria-label-previous-month-button',
+ ariaLabelNextMonthButton: 'aria-label-next-month-button',
+ ariaLabelCalendarButton: 'aria-label-calendar-button',
+ showWeekNumbers: 'show-week-numbers',
+ weekStartIndex: 'week-start-index',
+ suppressSubmitOnEnter: 'suppress-submit-on-enter',
+ textAlignment: 'text-alignment'
+ },
+ hydrateModule: import('@siemens/ix/hydrate') as Promise,
+ clientModule: clientComponents.IxDatetimeInput as ReactWebComponent,
+ serializeShadowRoot,
+});
+
export type IxDatetimePickerEvents = {
onTimeChange: EventName>,
onDateChange: EventName>,
@@ -634,7 +679,8 @@ export const IxDatetimePicker: StencilReactComponent,
clientModule: clientComponents.IxDatetimePicker as ReactWebComponent,
diff --git a/packages/react/src/components.ts b/packages/react/src/components.ts
index 9d819492a12..32ed8cebbdf 100644
--- a/packages/react/src/components.ts
+++ b/packages/react/src/components.ts
@@ -7,7 +7,7 @@
/* eslint-disable */
-import { type BorderlessChangedEvent, type CustomCloseEvent, type CustomLabelChangeEvent, type DateChangeEvent, type DateInputValidityState, type DateRangeChangeEvent, type DateTimeDateChangeEvent, type DateTimeSelectEvent, type ExpandedChangedEvent, type FilterState, type InputState, type IxBreadcrumbCustomEvent, type IxCardListCustomEvent, type IxCategoryFilterCustomEvent, type IxDateDropdownCustomEvent, type IxDateInputCustomEvent, type IxDatePickerCustomEvent, type IxDatetimePickerCustomEvent, type IxGroupItemCustomEvent, type IxInputCustomEvent, type IxMenuAboutCustomEvent, type IxMenuAboutItemCustomEvent, type IxMenuAboutNewsCustomEvent, type IxMenuAvatarItemCustomEvent, type IxMenuSettingsCustomEvent, type IxMenuSettingsItemCustomEvent, type IxModalHeaderCustomEvent, type IxNumberInputCustomEvent, type IxPaneCustomEvent, type IxSplitButtonCustomEvent, type IxTabItemCustomEvent, type IxTextareaCustomEvent, type IxTimeInputCustomEvent, type IxUploadCustomEvent, type TabClickDetail, type TimeInputValidityState, type VariantChangedEvent } from "@siemens/ix";
+import { type BorderlessChangedEvent, type CustomCloseEvent, type CustomLabelChangeEvent, type DateChangeEvent, type DateInputValidityState, type DateRangeChangeEvent, type DateTimeDateChangeEvent, type DateTimeInputValidityState, type DateTimeSelectEvent, type ExpandedChangedEvent, type FilterState, type InputState, type IxBreadcrumbCustomEvent, type IxCardListCustomEvent, type IxCategoryFilterCustomEvent, type IxDateDropdownCustomEvent, type IxDateInputCustomEvent, type IxDatePickerCustomEvent, type IxDatetimeInputCustomEvent, type IxDatetimePickerCustomEvent, type IxGroupItemCustomEvent, type IxInputCustomEvent, type IxMenuAboutCustomEvent, type IxMenuAboutItemCustomEvent, type IxMenuAboutNewsCustomEvent, type IxMenuAvatarItemCustomEvent, type IxMenuSettingsCustomEvent, type IxMenuSettingsItemCustomEvent, type IxModalHeaderCustomEvent, type IxNumberInputCustomEvent, type IxPaneCustomEvent, type IxSplitButtonCustomEvent, type IxTabItemCustomEvent, type IxTextareaCustomEvent, type IxTimeInputCustomEvent, type IxUploadCustomEvent, type TabClickDetail, type TimeInputValidityState, type VariantChangedEvent } from "@siemens/ix";
import { IxActionCard as IxActionCardElement, defineCustomElement as defineIxActionCard } from "@siemens/ix/components/ix-action-card.js";
import { IxApplicationHeader as IxApplicationHeaderElement, defineCustomElement as defineIxApplicationHeader } from "@siemens/ix/components/ix-application-header.js";
import { IxApplication as IxApplicationElement, defineCustomElement as defineIxApplication } from "@siemens/ix/components/ix-application.js";
@@ -32,6 +32,7 @@ import { IxCustomField as IxCustomFieldElement, defineCustomElement as defineIxC
import { IxDateDropdown as IxDateDropdownElement, defineCustomElement as defineIxDateDropdown } from "@siemens/ix/components/ix-date-dropdown.js";
import { IxDateInput as IxDateInputElement, defineCustomElement as defineIxDateInput } from "@siemens/ix/components/ix-date-input.js";
import { IxDatePicker as IxDatePickerElement, defineCustomElement as defineIxDatePicker } from "@siemens/ix/components/ix-date-picker.js";
+import { IxDatetimeInput as IxDatetimeInputElement, defineCustomElement as defineIxDatetimeInput } from "@siemens/ix/components/ix-datetime-input.js";
import { IxDatetimePicker as IxDatetimePickerElement, defineCustomElement as defineIxDatetimePicker } from "@siemens/ix/components/ix-datetime-picker.js";
import { IxDivider as IxDividerElement, defineCustomElement as defineIxDivider } from "@siemens/ix/components/ix-divider.js";
import { IxDrawer as IxDrawerElement, defineCustomElement as defineIxDrawer } from "@siemens/ix/components/ix-drawer.js";
@@ -432,6 +433,27 @@ export const IxDatePicker: StencilReactComponent>,
+ onValidityStateChange: EventName>,
+ onIxFocus: EventName>,
+ onIxBlur: EventName>
+};
+
+export const IxDatetimeInput: StencilReactComponent = /*@__PURE__*/ createComponent({
+ tagName: 'ix-datetime-input',
+ elementClass: IxDatetimeInputElement,
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
+ react: React,
+ events: {
+ onValueChange: 'valueChange',
+ onValidityStateChange: 'validityStateChange',
+ onIxFocus: 'ixFocus',
+ onIxBlur: 'ixBlur'
+ } as IxDatetimeInputEvents,
+ defineCustomElement: defineIxDatetimeInput
+});
+
export type IxDatetimePickerEvents = {
onTimeChange: EventName>,
onDateChange: EventName>,
diff --git a/packages/storybook-docs/.storybook/define-custom-elements.ts b/packages/storybook-docs/.storybook/define-custom-elements.ts
index 288e8b14523..c010b082161 100644
--- a/packages/storybook-docs/.storybook/define-custom-elements.ts
+++ b/packages/storybook-docs/.storybook/define-custom-elements.ts
@@ -24,6 +24,7 @@ import { defineCustomElement as ixCustomField } from '@siemens/ix/components/ix-
import { defineCustomElement as ixDateDropdown } from '@siemens/ix/components/ix-date-dropdown.js';
import { defineCustomElement as ixDateInput } from '@siemens/ix/components/ix-date-input.js';
import { defineCustomElement as ixDatePicker } from '@siemens/ix/components/ix-date-picker.js';
+import { defineCustomElement as ixDatetimeInput } from '@siemens/ix/components/ix-datetime-input.js';
import { defineCustomElement as ixDatetimePicker } from '@siemens/ix/components/ix-datetime-picker.js';
import { defineCustomElement as ixDivider } from '@siemens/ix/components/ix-divider.js';
import { defineCustomElement as ixDrawer } from '@siemens/ix/components/ix-drawer.js';
@@ -126,6 +127,7 @@ ixCustomField();
ixDateDropdown();
ixDateInput();
ixDatePicker();
+ixDatetimeInput();
ixDatetimePicker();
ixDivider();
ixDrawer();
diff --git a/packages/vue-test-app/src/Root.vue b/packages/vue-test-app/src/Root.vue
index 988246d4e6d..46b8a1788d1 100644
--- a/packages/vue-test-app/src/Root.vue
+++ b/packages/vue-test-app/src/Root.vue
@@ -17,11 +17,11 @@ import AboutAndLegal from './preview-examples/about-and-legal.vue';
import ActionCard from './preview-examples/action-card.vue';
import AddIcons from './preview-examples/add-icons.vue';
import AgGrid from './preview-examples/aggrid.vue';
+import ApplicationAdvanced from './preview-examples/application-advanced.vue';
import ApplicationAppSwitch from './preview-examples/application-app-switch.vue';
import ApplicationBreakpoints from './preview-examples/application-breakpoints.vue';
import ApplicationHeader from './preview-examples/application-header.vue';
import Application from './preview-examples/application.vue';
-import ApplicationAdvanced from './preview-examples/application-advanced.vue';
import AvatarImage from './preview-examples/avatar-image.vue';
import AvatarInitials from './preview-examples/avatar-initials.vue';
import Avatar from './preview-examples/avatar.vue';
@@ -53,8 +53,8 @@ import CheckboxIndeterminate from './preview-examples/checkbox-indeterminate.vue
import Checkbox from './preview-examples/checkbox.vue';
import Chip from './preview-examples/chip.vue';
import ContentHeaderNoBack from './preview-examples/content-header-no-back.vue';
-import ContentHeader from './preview-examples/content-header.vue';
import ContentHeaderWithSlot from './preview-examples/content-header-with-slot.vue';
+import ContentHeader from './preview-examples/content-header.vue';
import Content from './preview-examples/content.vue';
import CustomFieldValidation from './preview-examples/custom-field-validation.vue';
import CustomField from './preview-examples/custom-field.vue';
@@ -65,6 +65,13 @@ import DateInput from './preview-examples/date-input.vue';
import DatepickerLocale from './preview-examples/datepicker-locale.vue';
import DatepickerRange from './preview-examples/datepicker-range.vue';
import Datepicker from './preview-examples/datepicker.vue';
+import DatetimeInputDisabled from './preview-examples/datetime-input-disabled.vue';
+import DatetimeInputLabel from './preview-examples/datetime-input-label.vue';
+import DatetimeInputMinMaxDate from './preview-examples/datetime-input-min-max-date.vue';
+import DatetimeInputReadonly from './preview-examples/datetime-input-readonly.vue';
+import DatetimeInputValidation from './preview-examples/datetime-input-validation.vue';
+import DatetimeInputWithSlots from './preview-examples/datetime-input-with-slots.vue';
+import DatetimeInput from './preview-examples/datetime-input.vue';
import Datetimepicker from './preview-examples/datetimepicker.vue';
import Divider from './preview-examples/divider.vue';
import DrawerFullHeight from './preview-examples/drawer-full-height.vue';
@@ -115,13 +122,13 @@ import GroupContextMenu from './preview-examples/group-context-menu.vue';
import GroupCustomEntry from './preview-examples/group-custom-entry.vue';
import GroupHeaderSuppressed from './preview-examples/group-header-suppressed.vue';
import Group from './preview-examples/group.vue';
-import HtmlTable from './preview-examples/html-table.vue';
import HtmlTableStriped from './preview-examples/html-table-striped.vue';
-import IconToggleButtonTertiary from './preview-examples/icon-toggle-button-tertiary.vue';
-import IconToggleButtonSubtleTertiary from './preview-examples/icon-toggle-button-subtle-tertiary.vue';
-import IconToggleButtonSubtleSecondary from './preview-examples/icon-toggle-button-subtle-secondary.vue';
-import IconToggleButtonSubtlePrimary from './preview-examples/icon-toggle-button-subtle-primary.vue';
+import HtmlTable from './preview-examples/html-table.vue';
import IconToggleButtonSecondary from './preview-examples/icon-toggle-button-secondary.vue';
+import IconToggleButtonSubtlePrimary from './preview-examples/icon-toggle-button-subtle-primary.vue';
+import IconToggleButtonSubtleSecondary from './preview-examples/icon-toggle-button-subtle-secondary.vue';
+import IconToggleButtonSubtleTertiary from './preview-examples/icon-toggle-button-subtle-tertiary.vue';
+import IconToggleButtonTertiary from './preview-examples/icon-toggle-button-tertiary.vue';
import InputDisabled from './preview-examples/input-disabled.vue';
import InputLabel from './preview-examples/input-label.vue';
import InputLegacyDisabled from './preview-examples/input-legacy-disabled.vue';
@@ -149,12 +156,13 @@ import LinkButton from './preview-examples/link-button.vue';
import Loading from './preview-examples/loading.vue';
import MenuCategory from './preview-examples/menu-category.vue';
import MenuWithBottomTabs from './preview-examples/menu-with-bottom-tabs.vue';
-import MessageBar from './preview-examples/message-bar.vue';
import MessageBarRemoval from './preview-examples/message-bar-removal.vue';
+import MessageBar from './preview-examples/message-bar.vue';
import Message from './preview-examples/message.vue';
+import ModalClose from './preview-examples/modal-close.vue';
+import ModalFormIxButtonSubmit from './preview-examples/modal-form-ix-button-submit.vue';
import ModalSizes from './preview-examples/modal-sizes.vue';
import ModalExample from './preview-examples/modal.vue';
-import ModalClose from './preview-examples/modal-close.vue';
import NumberInputDisabled from './preview-examples/number-input-disabled.vue';
import NumberInputLabel from './preview-examples/number-input-label.vue';
import NumberInputReadOnly from './preview-examples/number-input-readonly.vue';
@@ -168,6 +176,12 @@ import Pane from './preview-examples/pane.vue';
import PillVariants from './preview-examples/pill-variants.vue';
import Pill from './preview-examples/pill.vue';
import PopoverNews from './preview-examples/popover-news.vue';
+import ProgressIndicatorCircularSizes from './preview-examples/progress-indicator-circular-sizes.vue';
+import ProgressIndicatorCircularStatus from './preview-examples/progress-indicator-circular-status.vue';
+import ProgressIndicatorCircular from './preview-examples/progress-indicator-circular.vue';
+import ProgressIndicatorLinearSizes from './preview-examples/progress-indicator-linear-sizes.vue';
+import ProgressIndicatorLinearStatus from './preview-examples/progress-indicator-linear-status.vue';
+import ProgressIndicator from './preview-examples/progress-indicator.vue';
import PushCard from './preview-examples/push-card.vue';
import RadioButton from './preview-examples/radio-button.vue';
import RadioDisabled from './preview-examples/radio-disabled.vue';
@@ -203,19 +217,19 @@ import Timepicker from './preview-examples/timepicker.vue';
import ToastCustom from './preview-examples/toast-custom.vue';
import ToastPosition from './preview-examples/toast-position.vue';
import Toast from './preview-examples/toast.vue';
-import ToggleButtonTertiary from './preview-examples/toggle-button-tertiary.vue';
-import ToggleButtonSubtleTertiary from './preview-examples/toggle-button-subtle-tertiary.vue';
import ToggleButtonPrimary from './preview-examples/toggle-button-primary.vue';
-import ToggleButtonSubtleSecondary from './preview-examples/toggle-button-subtle-secondary.vue';
-import ToggleButtonSubtlePrimary from './preview-examples/toggle-button-subtle-primary.vue';
import ToggleButtonSecondary from './preview-examples/toggle-button-secondary.vue';
+import ToggleButtonSubtlePrimary from './preview-examples/toggle-button-subtle-primary.vue';
+import ToggleButtonSubtleSecondary from './preview-examples/toggle-button-subtle-secondary.vue';
+import ToggleButtonSubtleTertiary from './preview-examples/toggle-button-subtle-tertiary.vue';
+import ToggleButtonTertiary from './preview-examples/toggle-button-tertiary.vue';
import ToggleChecked from './preview-examples/toggle-checked.vue';
import ToggleCustomLabel from './preview-examples/toggle-custom-label.vue';
import ToggleDisabled from './preview-examples/toggle-disabled.vue';
import ToggleIndeterminate from './preview-examples/toggle-indeterminate.vue';
import Toggle from './preview-examples/toggle.vue';
-import Tooltip from './preview-examples/tooltip.vue';
import TooltipWithIcon from './preview-examples/tooltip-with-icon.vue';
+import Tooltip from './preview-examples/tooltip.vue';
import TreeCustom from './preview-examples/tree-custom.vue';
import Tree from './preview-examples/tree.vue';
import Upload from './preview-examples/upload.vue';
@@ -225,13 +239,6 @@ import VerticalTabsWithAvatar from './preview-examples/vertical-tabs-with-avatar
import VerticalTabs from './preview-examples/vertical-tabs.vue';
import WorkflowVertical from './preview-examples/workflow-vertical.vue';
import Workflow from './preview-examples/workflow.vue';
-import ModalFormIxButtonSubmit from './preview-examples/modal-form-ix-button-submit.vue';
-import ProgressIndicatorLinearStatus from './preview-examples/progress-indicator-linear-status.vue';
-import ProgressIndicatorCircularStatus from './preview-examples/progress-indicator-circular-status.vue';
-import ProgressIndicatorLinearSizes from './preview-examples/progress-indicator-linear-sizes.vue';
-import ProgressIndicatorCircularSizes from './preview-examples/progress-indicator-circular-sizes.vue';
-import ProgressIndicatorCircular from './preview-examples/progress-indicator-circular.vue';
-import ProgressIndicator from './preview-examples/progress-indicator.vue';
const routes: any = {
'/': App,
@@ -399,6 +406,13 @@ const routes: any = {
'/preview/number-input-with-slots': NumberInputWithSlots,
'/preview/date-input': DateInput,
'/preview/date-input-with-slots': DateInputWithSlots,
+ '/preview/datetime-input': DatetimeInput,
+ '/preview/datetime-input-disabled': DatetimeInputDisabled,
+ '/preview/datetime-input-label': DatetimeInputLabel,
+ '/preview/datetime-input-min-max-date': DatetimeInputMinMaxDate,
+ '/preview/datetime-input-readonly': DatetimeInputReadonly,
+ '/preview/datetime-input-validation': DatetimeInputValidation,
+ '/preview/datetime-input-with-slots': DatetimeInputWithSlots,
'/preview/workflow': Workflow,
'/preview/workflow-vertical': WorkflowVertical,
'/preview/tooltip': Tooltip,
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input-disabled.vue b/packages/vue-test-app/src/preview-examples/datetime-input-disabled.vue
new file mode 100644
index 00000000000..2150aa0bdca
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input-disabled.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input-label.vue b/packages/vue-test-app/src/preview-examples/datetime-input-label.vue
new file mode 100644
index 00000000000..846616421b7
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input-label.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input-min-max-date.vue b/packages/vue-test-app/src/preview-examples/datetime-input-min-max-date.vue
new file mode 100644
index 00000000000..946c2b69f40
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input-min-max-date.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input-readonly.vue b/packages/vue-test-app/src/preview-examples/datetime-input-readonly.vue
new file mode 100644
index 00000000000..e25c99b773c
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input-readonly.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input-validation.vue b/packages/vue-test-app/src/preview-examples/datetime-input-validation.vue
new file mode 100644
index 00000000000..e940e42cd74
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input-validation.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input-with-slots.vue b/packages/vue-test-app/src/preview-examples/datetime-input-with-slots.vue
new file mode 100644
index 00000000000..fe3024cf984
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input-with-slots.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ Slot
+
+
diff --git a/packages/vue-test-app/src/preview-examples/datetime-input.vue b/packages/vue-test-app/src/preview-examples/datetime-input.vue
new file mode 100644
index 00000000000..6eccc7e8e8c
--- /dev/null
+++ b/packages/vue-test-app/src/preview-examples/datetime-input.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/packages/vue/src/components.ts b/packages/vue/src/components.ts
index 169ef8d5fbd..ff01514d50a 100644
--- a/packages/vue/src/components.ts
+++ b/packages/vue/src/components.ts
@@ -29,6 +29,7 @@ import { defineCustomElement as defineIxCustomField } from '@siemens/ix/componen
import { defineCustomElement as defineIxDateDropdown } from '@siemens/ix/components/ix-date-dropdown.js';
import { defineCustomElement as defineIxDateInput } from '@siemens/ix/components/ix-date-input.js';
import { defineCustomElement as defineIxDatePicker } from '@siemens/ix/components/ix-date-picker.js';
+import { defineCustomElement as defineIxDatetimeInput } from '@siemens/ix/components/ix-datetime-input.js';
import { defineCustomElement as defineIxDatetimePicker } from '@siemens/ix/components/ix-datetime-picker.js';
import { defineCustomElement as defineIxDivider } from '@siemens/ix/components/ix-divider.js';
import { defineCustomElement as defineIxDrawer } from '@siemens/ix/components/ix-drawer.js';
@@ -475,6 +476,47 @@ export const IxDatePicker: StencilVueComponent = /*@__PURE__*/
]);
+export const IxDatetimeInput: StencilVueComponent = /*@__PURE__*/ defineContainer('ix-datetime-input', defineIxDatetimeInput, [
+ 'name',
+ 'placeholder',
+ 'value',
+ 'dateFormat',
+ 'timeFormat',
+ 'locale',
+ 'required',
+ 'disabled',
+ 'readonly',
+ 'minDate',
+ 'maxDate',
+ 'label',
+ 'helperText',
+ 'invalidText',
+ 'infoText',
+ 'warningText',
+ 'validText',
+ 'showTextAsTooltip',
+ 'i18nErrorDateTimeUnparsable',
+ 'i18nDone',
+ 'i18nTime',
+ 'ariaLabelPreviousMonthButton',
+ 'ariaLabelNextMonthButton',
+ 'ariaLabelCalendarButton',
+ 'showWeekNumbers',
+ 'weekStartIndex',
+ 'suppressSubmitOnEnter',
+ 'textAlignment',
+ 'valueChange',
+ 'validityStateChange',
+ 'ixFocus',
+ 'ixBlur'
+], [
+ 'valueChange',
+ 'validityStateChange',
+ 'ixFocus',
+ 'ixBlur'
+]);
+
+
export const IxDatetimePicker: StencilVueComponent = /*@__PURE__*/ defineContainer('ix-datetime-picker', defineIxDatetimePicker, [
'singleSelection',
'minDate',
@@ -493,6 +535,7 @@ export const IxDatetimePicker: StencilVueComponent = /*@__
'weekStartIndex',
'locale',
'showWeekNumbers',
+ 'embedded',
'timeChange',
'dateChange',
'dateSelect'
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-basic-1-chromium---classic-dark-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-basic-1-chromium---classic-dark-linux.png
new file mode 100644
index 00000000000..84c1b6f531c
Binary files /dev/null and b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-basic-1-chromium---classic-dark-linux.png differ
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-basic-1-chromium---classic-light-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-basic-1-chromium---classic-light-linux.png
new file mode 100644
index 00000000000..08d7a54161d
Binary files /dev/null and b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-basic-1-chromium---classic-light-linux.png differ
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-validation-1-chromium---classic-dark-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-validation-1-chromium---classic-dark-linux.png
new file mode 100644
index 00000000000..ce0952b708e
Binary files /dev/null and b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-validation-1-chromium---classic-dark-linux.png differ
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-validation-1-chromium---classic-light-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-validation-1-chromium---classic-light-linux.png
new file mode 100644
index 00000000000..7dfe9c11a10
Binary files /dev/null and b/testing/visual-testing/__screenshots__/tests/datetime-input/datetime-input.e2e.ts/datetime-input-validation-1-chromium---classic-light-linux.png differ
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-basic-1-chromium---classic-light-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-basic-1-chromium---classic-light-linux.png
index 52dfb7b452c..ff2b851ae60 100644
Binary files a/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-basic-1-chromium---classic-light-linux.png and b/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-basic-1-chromium---classic-light-linux.png differ
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-mobile-1-chromium---classic-light-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-mobile-1-chromium---classic-light-linux.png
index a010245cb4b..d2726b6b81e 100644
Binary files a/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-mobile-1-chromium---classic-light-linux.png and b/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-mobile-1-chromium---classic-light-linux.png differ
diff --git a/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-show-week-numbers-1-chromium---classic-light-linux.png b/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-show-week-numbers-1-chromium---classic-light-linux.png
index 6c0c0672f35..2f0f590e30e 100644
Binary files a/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-show-week-numbers-1-chromium---classic-light-linux.png and b/testing/visual-testing/__screenshots__/tests/datetime-picker/datetime-picker.e2e.ts/datetime-picker-show-week-numbers-1-chromium---classic-light-linux.png differ
diff --git a/testing/visual-testing/tests/datetime-input/basic/index.html b/testing/visual-testing/tests/datetime-input/basic/index.html
new file mode 100644
index 00000000000..68cf9de13b4
--- /dev/null
+++ b/testing/visual-testing/tests/datetime-input/basic/index.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+ DateTime Input Test
+
+
+
+
Default
+
+
+
Disabled
+
+
+
Readonly
+
+
+
With Label and Helper Text
+
+
+
Text Alignment End
+
+
+
Custom Format
+
+
+
+
+
diff --git a/testing/visual-testing/tests/datetime-input/datetime-input.e2e.ts b/testing/visual-testing/tests/datetime-input/datetime-input.e2e.ts
new file mode 100644
index 00000000000..215ddf68d41
--- /dev/null
+++ b/testing/visual-testing/tests/datetime-input/datetime-input.e2e.ts
@@ -0,0 +1,27 @@
+/*
+ * SPDX-FileCopyrightText: 2026 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { expect } from '@playwright/test';
+import { regressionTest } from '@utils/test';
+
+regressionTest.describe('datetime-input', () => {
+ regressionTest('basic', async ({ page }) => {
+ await page.goto('datetime-input/basic');
+ expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({
+ maxDiffPixels: 25,
+ });
+ });
+
+ regressionTest('validation', async ({ page }) => {
+ await page.goto('datetime-input/validation');
+ expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({
+ maxDiffPixels: 25,
+ });
+ });
+});
diff --git a/testing/visual-testing/tests/datetime-input/validation/index.html b/testing/visual-testing/tests/datetime-input/validation/index.html
new file mode 100644
index 00000000000..ca8cbafd682
--- /dev/null
+++ b/testing/visual-testing/tests/datetime-input/validation/index.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+ DateTime Input Validation Test
+
+
+