--- title: DateSpinner description: >- The `DateSpinner` component enables merchants to select dates using a spinner interface with scrollable columns for month, day, and year. Use it for compact date selection in space-constrained layouts or when selecting dates close to the current date. For visual calendar context, consider using [`DatePicker`](/docs/api/pos-ui-extensions/2025-10/polaris-web-components/forms/datepicker) instead. For text date entry, use [`DateField`](/docs/api/pos-ui-extensions/2025-10/polaris-web-components/forms/datefield). api_version: 2025-10 api_name: pos-ui-extensions source_url: html: >- https://shopify.dev/docs/api/pos-ui-extensions/latest/polaris-web-components/forms/datespinner md: >- https://shopify.dev/docs/api/pos-ui-extensions/latest/polaris-web-components/forms/datespinner.md --- # Date​Spinner The `DateSpinner` component enables merchants to select dates using a spinner interface with scrollable columns for month, day, and year. Use it for compact date selection in space-constrained layouts or when selecting dates close to the current date. For visual calendar context, consider using [`DatePicker`](https://shopify.dev/docs/api/pos-ui-extensions/2025-10/polaris-web-components/forms/datepicker) instead. For text date entry, use [`DateField`](https://shopify.dev/docs/api/pos-ui-extensions/2025-10/polaris-web-components/forms/datefield). ## Properties Configure the following properties on the `DateSpinner` component. * id string A unique identifier for the element used for targeting with CSS, JavaScript, or accessibility features. * value string Default: "" The currently selected date value in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`, for example, `"2024-05-15"`). An empty string means no date is selected. Other date formats require conversion before setting this property. Validation occurs when the user finishes editing (on blur), rather than on every keystroke, so invalid dates are flagged after completing entry. ## Events The `DateSpinner` component provides event callbacks for handling user interactions. Learn more about [handling events](https://shopify.dev/docs/api/polaris/using-polaris-web-components#handling-events). * blur (event: CallbackEvent<"s-date-spinner">) => void Called when the element loses focus. * change (event: CallbackEvent<"s-date-spinner">) => void Called after editing completes, typically on blur. * focus (event: CallbackEvent<"s-date-spinner">) => void Called when the element receives focus. * input (event: CallbackEvent<"s-date-spinner">) => void Called when the user makes any changes in the field. ### CallbackEvent Represents the event object passed to callback functions when interactive events occur. Contains metadata about the event, including the target element, event phase, and propagation behavior. * bubbles Whether the event bubbles up through the DOM tree. ```ts boolean ``` * cancelable Whether the event can be canceled. ```ts boolean ``` * composed Whether the event will trigger listeners outside of a shadow root. ```ts boolean ``` * currentTarget The element that the event listener is attached to. ```ts HTMLElementTagNameMap[T] ``` * detail Additional data associated with the event. ```ts any ``` * eventPhase The current phase of the event flow. ```ts number ``` * target The element that triggered the event. ```ts HTMLElementTagNameMap[T] | null ``` ```ts interface CallbackEvent { /** * The element that the event listener is attached to. */ currentTarget: HTMLElementTagNameMap[T]; /** * Whether the event bubbles up through the DOM tree. */ bubbles?: boolean; /** * Whether the event can be canceled. */ cancelable?: boolean; /** * Whether the event will trigger listeners outside of a shadow root. */ composed?: boolean; /** * Additional data associated with the event. */ detail?: any; /** * The current phase of the event flow. */ eventPhase: number; /** * The element that triggered the event. */ target: HTMLElementTagNameMap[T] | null; } ``` ### Examples * #### Select dates with a spinner ##### Description Enable compact date selection using a \`DateSpinner\` component with scrollable columns for month, day, and year. This example shows a basic date spinner for space-constrained layouts. ##### Default ```html Show ``` ## Preview ![](https://shopify.dev/images/templated-apis-screenshots/pos-ui-extensions/2025-10/date-spinner-default.png) ## Best practices * **Use for space-constrained layouts:** Choose `DateSpinner` for narrow layouts or split-screen interfaces where a calendar view would be impractical. * **Best for nearby dates:** Use when selecting dates close to the current date. For distant dates, [`DatePicker`](https://shopify.dev/docs/api/pos-ui-extensions/2025-10/polaris-web-components/forms/datepicker) provides faster navigation. * **Provide interaction cues:** Consider labels or instructions to help first-time users understand the scrollable column interface. ## Examples Learn how to control spinner visibility and handle date selection events. ### Examples * #### Control spinner visibility ##### Description Control \`DateSpinner\` visibility programmatically using the command system with \`show\` and \`hide\` methods. This example demonstrates using button commands to display or dismiss the spinner picker, enabling custom trigger patterns for date selection in constrained layouts. ##### Default ```jsx <> Select Date console.log('Date selected:', event.currentTarget.value)} /> ; ``` * #### Handle date selection events ##### Description Subscribe to date selection events to respond when merchants pick a date from the spinner columns. This example shows how to handle \`onChange\` events to capture selected dates, enabling validation, scheduling logic, or dynamic updates based on the chosen date. ##### Default ```jsx console.log('Input:', event.currentTarget.value)} onChange={(event) => console.log('Change:', event.currentTarget.value)} onFocus={(event) => console.log('Focus')} onBlur={(event) => console.log('Blur')} /> ```