diff --git a/src/lib/components/ui/element-picker/ElementPicker.svelte b/src/lib/components/ui/element-picker/ElementPicker.svelte
new file mode 100644
index 00000000..1a5be14e
--- /dev/null
+++ b/src/lib/components/ui/element-picker/ElementPicker.svelte
@@ -0,0 +1,121 @@
+
+
+
+
+{#if shouldUseDropdown}
+ {#if multiple}
+
+ {:else}
+
+ {/if}
+{:else}
+
+{/if}
diff --git a/src/lib/components/ui/element-picker/ElementPickerSegmented.svelte b/src/lib/components/ui/element-picker/ElementPickerSegmented.svelte
new file mode 100644
index 00000000..e3e2a22e
--- /dev/null
+++ b/src/lib/components/ui/element-picker/ElementPickerSegmented.svelte
@@ -0,0 +1,117 @@
+
+
+
+
+
+ {#if multiple}
+
+ {#each elements as element}
+
+ {#snippet children()}
+
+
+
+ {/snippet}
+
+ {/each}
+
+ {:else}
+
+ {#each elements as element}
+
+ {#snippet children()}
+
+
+
+ {/snippet}
+
+ {/each}
+
+ {/if}
+
diff --git a/src/lib/components/ui/element-picker/element-picker.module.scss b/src/lib/components/ui/element-picker/element-picker.module.scss
new file mode 100644
index 00000000..69500fdc
--- /dev/null
+++ b/src/lib/components/ui/element-picker/element-picker.module.scss
@@ -0,0 +1,51 @@
+@use '$src/themes/spacing' as *;
+@use '$src/themes/layout' as *;
+@use '$src/themes/effects' as *;
+@use '$src/themes/colors' as *;
+
+.container {
+ display: inline-flex;
+ border-radius: $full-corner;
+ padding: $unit-half;
+
+ &.contained {
+ background-color: var(--segmented-control-background-bg);
+ }
+}
+
+.group {
+ display: flex;
+ gap: $unit-half;
+ align-items: center;
+}
+
+.item {
+ all: unset;
+ cursor: pointer;
+ border-radius: $full-corner;
+ padding: $unit-half;
+ @include smooth-transition($duration-quick, background-color, opacity);
+
+ &:hover:not(:disabled) {
+ background-color: var(--option-bg-hover);
+ }
+
+ &:focus-visible {
+ @include focus-ring($blue);
+ }
+
+ &[data-state='on'] {
+ background-color: var(--accent-subtle-bg);
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+}
+
+.image {
+ width: $unit-3x;
+ height: $unit-3x;
+ display: block;
+}