Alternative to label prop for custom label content.
DsSwitch
Props
Name
Type
Default
Description
modelValue
boolean
false
On/off state (use with v-model).
label
string
—
Label text beside the switch.
disabled
boolean
false
Disables the switch.
Events
Name
Payload
Description
update:modelValue
boolean
Emitted when toggle state changes.
Slots
Name
Description
default
Alternative to label prop for custom label content.
Example
DsCheckbox(v-model="agree" label="I agree to the terms")
DsSwitch(v-model="notifications" label="Email notifications")
DateTime Picker
Configurable date and/or time selection for forms.
DsDateTimePicker
Props
Name
Type
Default
Description
modelValue
string | null
null
Bound value (use with v-model). Format depends on showDate/showTime: YYYY-MM-DD, HH:mm, or YYYY-MM-DDTHH:mm.
label
string
—
Visible field label.
hint
string
—
Helper text shown below the field.
error
string
—
Error message; sets invalid state when present.
placeholder
string
—
Placeholder text when no value is set.
disabled
boolean
false
Disables the picker.
id
string
—
Custom element id; auto-generated if omitted.
showDate
boolean
true
Show the calendar month grid in the panel.
showTime
boolean
true
Show hour/minute (and optional seconds) controls in the panel.
minDate
string
—
Exclusive minimum date bound as YYYY-MM-DD. Days on or before this date are disabled.
maxDate
string
—
Exclusive maximum date bound as YYYY-MM-DD. Days on or after this date are disabled.
minuteStep
number
5
Step interval for the minute selector.
showSeconds
boolean
false
Include seconds in time value and selector (only when showTime is true).
Events
Name
Payload
Description
update:modelValue
string | null
Emitted when the date and/or time value changes.
Date & time
Select a date and time for your booking.
Date only
Time only
Example
// Date & time (default)
DsDateTimePicker(
v-model="appointment"
label="Appointment"
)
// Date only
DsDateTimePicker(
v-model="bookingDate"
label="Booking date"
:show-time="false"
min-date="2026-07-01"
max-date="2026-12-31"
)
// Time only
DsDateTimePicker(
v-model="reminderTime"
label="Reminder time"
:show-date="false"
)
Tag Input
Enter tags as chips for skills, industries, and categories.
DsTagInput
Props
Name
Type
Default
Description
modelValue
string[]
[]
Bound list of tags (use with v-model).
label
string
—
Visible field label.
hint
string
—
Helper text shown below the field.
error
string
—
Error message; sets invalid state when present.
placeholder
string
'Type and press Enter'
Input placeholder.
disabled
boolean
false
Disables the field.
Events
Name
Payload
Description
update:modelValue
string[]
Emitted when tags change.
PR StrategyMessaging
Press Enter to add a tag.
Example
DsTagInput(
v-model="tags"
label="Skills"
hint="Press Enter to add a tag."
)
Image Field
Image upload with a preview of the pending file.
DsImageField
Props
Name
Type
Default
Description
modelValue
File | null
null
Pending file selection, not yet uploaded (use with v-model).
src
string
''
URL of the stored image, previewed until a file is picked.
label
string
—
Visible field label.
hint
string
—
Helper text shown below the field.
error
string
—
Error message; sets invalid state when present.
previewAlt
string
'Preview'
Alt text / initials fallback name.
noun
string
'photo'
Names the subject in the button labels, e.g. 'Upload cover'.
accept
string
IMAGE_ACCEPT
Accepted MIME types for the file picker.
disabled
boolean
false
Disables the field.
Events
Name
Payload
Description
update:modelValue
File | null
Emitted when a file is picked, or null when a pending pick is undone.
remove
—
Emitted when Remove is pressed with no pending file, meaning the stored image should be dropped.
Photo
JPEG, PNG, WebP or GIF, up to 5 MB.
Example
DsImageField(
v-model="photo"
:src="photoUrl"
label="Photo"
hint="JPEG, PNG, WebP or GIF, up to 5 MB."
preview-alt="Profile photo"
@remove="photoUrl = ''"
)
Inline Edit
Edit-in-place field that inherits the surrounding typography, for editable public pages.
DsInlineEdit
Props
Name
Type
Default
Description
modelValue
string
''
Bound text value (use with v-model).
multiline
boolean
false
Renders an auto-growing textarea instead of a single-line input.
type
string
'text'
Native input type; ignored when multiline.
placeholder
string
—
Placeholder shown when the value is empty.
ariaLabel
string
—
Accessible name, since edit-in-place fields have no visible label.
DsTabs(v-model="activeTab" :tabs="tabs")
template(#overview) Overview content
template(#members) Team members
Pagination
Navigate paged data sets.
DsPagination
Props
Name
Type
Default
Description
modelValuerequired
number
—
Current page number (use with v-model).
totalPagesrequired
number
—
Total number of pages.
maxVisible
number
5
Maximum page buttons shown at once.
Events
Name
Payload
Description
update:modelValue
number
Emitted when the user selects a different page.
Example
DsPagination(v-model="page" :total-pages="8")
Feedback & Overlays
Alert
Contextual feedback messages.
DsAlert
Props
Name
Type
Default
Description
variant
'info' | 'success' | 'warning' | 'danger'
'info'
Semantic color and icon for the alert.
title
string
—
Optional bold heading above the message.
Slots
Name
Description
default
Alert message body.
Info
Your trial ends in 7 days.
Success
Payment processed successfully.
Warning
API rate limit approaching.
Error
Failed to save changes.
Example
DsAlert(variant="info" title="Info")
| Your trial ends in 7 days.
DsAlert(variant="success" title="Success")
| Payment processed successfully.
Toast
Floating notifications for transient feedback.
DsToast
Props
Name
Type
Default
Description
variant
'info' | 'success' | 'warning' | 'danger'
'info'
Semantic color and icon for the toast.
title
string
—
Optional bold heading above the message.
messagerequired
string
—
Toast message body.
duration
number
5000
Auto-dismiss delay in ms; 0 keeps the toast until dismissed.
Events
Name
Payload
Description
dismiss
—
Emitted when the toast is dismissed (close button or auto-dismiss).
Mount DsToastHost once in app.vue for global toasts.
Use the useToast() composable: show({ message, title?, variant?, duration? }), success(message, title?), error(message, title?).
Example
// Mount DsToastHost once in app.vue, then:
const toast = useToast()
toast.success('Payment processed successfully.')
toast.error('Failed to save changes.')
toast.show({ variant: 'info', title: 'Info', message: 'Your trial ends in 7 days.' })
Modal
Overlay dialog for focused tasks.
DsModal
Props
Name
Type
Default
Description
openrequired
boolean
—
Controls visibility (use with v-model:open).
title
string
—
Dialog title when header slot is not used.
Events
Name
Payload
Description
update:open
boolean
Emitted when the modal should close (backdrop click or close button).
Slots
Name
Description
default
Modal body content.
header
Custom header; overrides title prop.
footer
Footer area, typically for action buttons.
Example
DsButton(@click="open = true") Open modal
DsModal(v-model:open="open" title="Confirm action")
p Are you sure?
template(#footer)
DsButton(variant="ghost" @click="open = false") Cancel
DsButton(variant="danger") Delete
Tooltip
Supplementary text on hover or focus.
DsTooltip
Props
Name
Type
Default
Description
textrequired
string
—
Tooltip content shown on hover or focus.
Slots
Name
Description
default
Trigger element that activates the tooltip.
Export as CSV
Example
DsTooltip(text="Export as CSV")
DsButton(variant="secondary") Export
Spinner & Skeleton
Loading placeholders.
DsSpinner
Props
Name
Type
Default
Description
size
'sm' | 'md' | 'lg'
'md'
Spinner dimensions.
DsSkeleton
Props
Name
Type
Default
Description
variant
'text' | 'rect' | 'circle'
'text'
Shape of the placeholder.
width
string
'100%'
CSS width value.
height
string
—
CSS height value; variant provides defaults for text.