SMoneyField <s-money-field>
A numeric input for monetary amounts. SMoneyField is the typed Vue 3 wrapper for Shopify's Polaris <s-money-field> web component.
ts
import { SMoneyField } from 'polaris-vue-elements'Best practices
- Set
minandmaxto realistic limits. For example, a product price can use aminof 0.01 so it can't be zero, a discount can range from 0 to the order total, and a refund can be capped at the amount paid. Always check values against your business rules too. - Name the exact limit in
error. Instead of "Invalid amount", say something like "Price must be at least $0.01" so merchants know which constraint they broke. - Keep currency symbols out of
labelandplaceholder. Adding "$" or similar can clash with the currency formatting the field already handles. - Label the amount by its purpose. "Product base price" or "Discount amount" tells merchants more than "Amount" or "Price".
- Pre-fill
valuewhen editing. Show the current amount for existing values; for new entries, consider a sensible default such as 0.00 or a typical price.
vue
<SMoneyField label="Product base price" :min="0.01" />See Shopify's best practices for <s-money-field> for the full guidance.
Example
Value: (empty)
vue
<script setup>
import { ref } from 'vue'
import { SMoneyField } from 'polaris-vue-elements'
const value = ref('')
</script>
<template>
<SMoneyField label="Price" currencyCode="USD" placeholder="0.00" v-model="value" />
<p>Value: {{ value }}</p>
</template>v-model
v-model on <SMoneyField> binds to the value property and listens for the input DOM event.
template
<SMoneyField v-model="value" />is equivalent to:
template
<SMoneyField :value="value" @input="value = $event.target.value" />Props
| Prop | Type | Description |
|---|---|---|
autocomplete | string | A hint as to the intended content of the field. When set to on (the default), this property indicates that the field should support autofill, but you do not have any more semantic information on the intended contents. When set to off, you are indicating that this field contains sensitive information, or contents that are never saved, like one-time codes. Alternatively, you can provide value which describes the specific data you would like to be entered into this field during autofill. |
currencyCode | "auto" | "USD" | "EUR" | "GBP" | "CAD" | "AFN" | "ALL" | "DZD" … (154 more) | The currency code of the field. When set to 'auto', the field will display the currency code of the shop. If no currency code is set for the shop, resolve to 'XXX' the explicit non value. This value will match the global currency code of the shop, so if you need to know the currency code of the field, you can read the value from those APIs. |
defaultValue | string | The default value for the field. |
details | any | Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user. This will also be exposed to screen reader users. |
disabled | boolean | Disables the field, disallowing any interaction. |
error | any | Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately. |
id | string | A unique identifier for the element. |
label | any | Content to use as the field label. |
labelAccessibilityVisibility | "visible" | "exclusive" | Changes the visibility of the component's label. - visible: the label is visible to all users. - exclusive: the label is visually hidden but remains in the accessibility tree. |
max | number | The highest decimal or integer to be accepted for the field. When used with step the value will round down to the max number. Note: a user will still be able to use the keyboard to input a number higher than the max. It is up to the developer to add appropriate validation. |
min | number | The lowest decimal or integer to be accepted for the field. When used with step the value will round up to the min number. Note: a user will still be able to use the keyboard to input a number lower than the min. It is up to the developer to add appropriate validation. |
name | string | An identifier for the field that is unique within the nearest containing form. |
placeholder | string | A short hint that describes the expected value of the field. |
readOnly | boolean | The field cannot be edited by the user. It is focusable will be announced by screen readers. |
required | boolean | Whether the field needs a value. This requirement adds semantic value to the field, but it will not cause an error to appear automatically. If you want to present an error when this field is empty, you can do so with the error property. |
value | string |
Some type columns above are truncated for readability; the full union is available in the library's generated TypeScript types (
src/lib/generated/types.ts).
Events
| Event | Type |
|---|---|
blur | FocusEvent |
change | Event |
focus | FocusEvent |
input | Event |
Listen for these with @blur-style listeners on <SMoneyField>.
Slots
| Slot | Description |
|---|---|
details | |
error |