diff --git a/app/imports/ui/StoryBook.vue b/app/imports/ui/StoryBook.vue
index 31d54bd9..1c5a01df 100644
--- a/app/imports/ui/StoryBook.vue
+++ b/app/imports/ui/StoryBook.vue
@@ -41,6 +41,7 @@
import AbilityListTile from '/imports/ui/components/AbilityListTile.Story.vue';
import AttributeCard from '/imports/ui/components/AttributeCard.Story.vue';
import AttributeEdit from '/imports/ui/components/AttributeEdit.Story.vue';
+ import ColorPicker from '/imports/ui/components/ColorPicker.Story.vue';
import ColumnLayout from "/imports/ui/components/ColumnLayout.Story.vue";
import DialogStack from '/imports/ui/dialogStack/DialogStack.Story.vue';
import EffectEdit from '/imports/ui/components/EffectEdit.Story.vue';
@@ -55,6 +56,7 @@
AbilityListTile,
AttributeCard,
AttributeEdit,
+ ColorPicker,
ColumnLayout,
DialogStack,
EffectEdit,
diff --git a/app/imports/ui/components/ColorPicker.Story.vue b/app/imports/ui/components/ColorPicker.Story.vue
new file mode 100644
index 00000000..3b3da569
--- /dev/null
+++ b/app/imports/ui/components/ColorPicker.Story.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/imports/ui/components/ColorPicker.vue b/app/imports/ui/components/ColorPicker.vue
new file mode 100644
index 00000000..e67656ff
--- /dev/null
+++ b/app/imports/ui/components/ColorPicker.vue
@@ -0,0 +1,189 @@
+
+
+
+ format_paint
+
+
+
+
+
+
+
+
+ check
+
+
+
+
+
+
+
+
+
+
+
+
+
+ check
+
+
+
+
+
+
+
+
+
+ Done
+
+
+
+
+
+
+
+
diff --git a/app/imports/ui/utility/swapCase.js b/app/imports/ui/utility/swapCase.js
new file mode 100644
index 00000000..55a377ef
--- /dev/null
+++ b/app/imports/ui/utility/swapCase.js
@@ -0,0 +1,7 @@
+export function kebabToCamelCase(string){
+ return string.replace(/-([a-z0-9])/g, g => g[1].toUpperCase());
+};
+
+export function camelToKebabCase(string){
+ return string.replace(/([a-z][A-Z0-9])/g, g => g[0] + '-' + g[1].toLowerCase());
+};