diff --git a/src/components/shared/forms/Time.vue b/src/components/shared/forms/Time.vue
new file mode 100644
index 0000000..5be933e
--- /dev/null
+++ b/src/components/shared/forms/Time.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/src/components/shared/forms/croud-time.md b/src/components/shared/forms/croud-time.md
new file mode 100644
index 0000000..00fd6c1
--- /dev/null
+++ b/src/components/shared/forms/croud-time.md
@@ -0,0 +1,3 @@
+### Basic usage
+
+
diff --git a/src/components/shared/schedule/Editor.vue b/src/components/shared/schedule/Editor.vue
new file mode 100644
index 0000000..8c50216
--- /dev/null
+++ b/src/components/shared/schedule/Editor.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+ Date Range
+
+
+
+
+
+ Time
+
+
+
+
+
+ Occurs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/shared/schedule/MonthView.vue b/src/components/shared/schedule/MonthView.vue
new file mode 100644
index 0000000..e1fc9a4
--- /dev/null
+++ b/src/components/shared/schedule/MonthView.vue
@@ -0,0 +1,122 @@
+
+
+ {{ title }}
+
+
+ | {{ day }} |
+
+
+
+
+ |
+ {{ day.day }}
+ |
+
+
+
+
+
+
+
+
+
diff --git a/src/components/shared/schedule/SummaryView.vue b/src/components/shared/schedule/SummaryView.vue
new file mode 100644
index 0000000..bbb7321
--- /dev/null
+++ b/src/components/shared/schedule/SummaryView.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
diff --git a/src/components/shared/schedule/croud-schedule-editor.md b/src/components/shared/schedule/croud-schedule-editor.md
new file mode 100644
index 0000000..8e5ee5b
--- /dev/null
+++ b/src/components/shared/schedule/croud-schedule-editor.md
@@ -0,0 +1,18 @@
+### Basic usage
+
+
+
+### Slots
+You can replace the buttons by using the **actions** slot
+
+
+
+
+
+
+
+
+### Events
+This component emit's (.sync compatible) **update:schedule** and **cancelled** events
+
+
diff --git a/src/components/shared/schedule/month-view.md b/src/components/shared/schedule/month-view.md
new file mode 100644
index 0000000..063b4c1
--- /dev/null
+++ b/src/components/shared/schedule/month-view.md
@@ -0,0 +1,5 @@
+### Basic usage
+
+
+
+
diff --git a/src/components/shared/schedule/summary-view.md b/src/components/shared/schedule/summary-view.md
new file mode 100644
index 0000000..b93a7e4
--- /dev/null
+++ b/src/components/shared/schedule/summary-view.md
@@ -0,0 +1,6 @@
+### Basic usage
+
+
diff --git a/src/components/shared/schedule/views/Daily.vue b/src/components/shared/schedule/views/Daily.vue
new file mode 100644
index 0000000..6bdaf4f
--- /dev/null
+++ b/src/components/shared/schedule/views/Daily.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/src/components/shared/schedule/views/EditorViews.js b/src/components/shared/schedule/views/EditorViews.js
new file mode 100644
index 0000000..ffc6135
--- /dev/null
+++ b/src/components/shared/schedule/views/EditorViews.js
@@ -0,0 +1,133 @@
+import moment from 'moment'
+import { zipWith } from 'lodash'
+
+export default {
+ props: {
+ schedule: {
+ type: Object,
+ required: true,
+ },
+ },
+
+ data() {
+ return {
+ resets: {},
+
+ periods: [
+ 'First',
+ 'Second',
+ 'Third',
+ 'Fourth',
+ 'Last',
+ ],
+ }
+ },
+
+ computed: {
+ interval: {
+ get() {
+ return this.schedule.interval
+ },
+ set(val) {
+ this.$emit('update:schedule', {
+ ...this.schedule,
+ interval: val,
+ })
+ },
+ },
+
+ dayOfMonth: {
+ get() {
+ return this.schedule.day_of_month
+ },
+ set(val) {
+ this.$emit('update:schedule', {
+ ...this.schedule,
+ day_of_month: val,
+ })
+ },
+ },
+
+ weekOfMonth: {
+ get() {
+ return this.schedule.week_of_month
+ },
+ set(val) {
+ this.$emit('update:schedule', {
+ ...this.schedule,
+ week_of_month: val,
+ })
+ },
+ },
+
+ days: {
+ get() {
+ return Object.keys(this.schedule.days).filter(day => this.schedule.days[day]).join(',')
+ },
+ set(val) {
+ const days = {}
+
+ val.split(',').forEach((day) => {
+ days[day.toLowerCase()] = true
+ })
+
+ this.$emit('update:schedule', {
+ ...this.schedule,
+ days,
+ })
+ },
+ },
+
+ months: {
+ get() {
+ return Object.keys(this.schedule.months).filter(month => this.schedule.months[month]).join(',')
+ },
+ set(val) {
+ const months = {}
+
+ val.split(',').forEach((month) => {
+ months[month] = true
+ })
+
+ this.$emit('update:schedule', {
+ ...this.schedule,
+ months,
+ })
+ },
+ },
+
+ periodOptions() {
+ const periods = []
+ this.periods.forEach((period) => {
+ periods.push({ id: period.toLowerCase(), name: period })
+ })
+ return periods
+ },
+
+ dayOptions() {
+ return zipWith(moment.weekdaysShort().map(day => day.toLowerCase()), moment.weekdays(), (id, name) => ({ id, name }))
+ },
+
+ monthOptions() {
+ return zipWith(moment.monthsShort().map(month => month.toLowerCase()), moment.months(), (id, name) => ({ id, name }))
+ },
+
+ ordinal() {
+ return moment.localeData().ordinal(this.dayOfMonth).slice(-2)
+ },
+ },
+
+ methods: {
+ load() {
+ this.$emit('reset-schedule', this.resets)
+ },
+ },
+
+ ready() {
+ this.load()
+ },
+
+ mounted() {
+ this.load()
+ },
+}
diff --git a/src/components/shared/schedule/views/SameDayEachMonth.vue b/src/components/shared/schedule/views/SameDayEachMonth.vue
new file mode 100644
index 0000000..62a5a40
--- /dev/null
+++ b/src/components/shared/schedule/views/SameDayEachMonth.vue
@@ -0,0 +1,40 @@
+
+
+
+ Every
+
+
+
+ Day
+
+
+
+
+
+
diff --git a/src/components/shared/schedule/views/SameDayEachYear.vue b/src/components/shared/schedule/views/SameDayEachYear.vue
new file mode 100644
index 0000000..4fea7cf
--- /dev/null
+++ b/src/components/shared/schedule/views/SameDayEachYear.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
diff --git a/src/components/shared/schedule/views/SameWeekEachMonth.vue b/src/components/shared/schedule/views/SameWeekEachMonth.vue
new file mode 100644
index 0000000..e742498
--- /dev/null
+++ b/src/components/shared/schedule/views/SameWeekEachMonth.vue
@@ -0,0 +1,45 @@
+
+
+
+ Every
+
+
+
+ On
+
+
+
+
+
+
diff --git a/src/components/shared/schedule/views/SameWeekEachYear.vue b/src/components/shared/schedule/views/SameWeekEachYear.vue
new file mode 100644
index 0000000..8d6b246
--- /dev/null
+++ b/src/components/shared/schedule/views/SameWeekEachYear.vue
@@ -0,0 +1,48 @@
+
+
+
+ On
+
+
+
+
+ Month
+
+
+
+
+
+
diff --git a/src/components/shared/schedule/views/Weekly.vue b/src/components/shared/schedule/views/Weekly.vue
new file mode 100644
index 0000000..9fb9426
--- /dev/null
+++ b/src/components/shared/schedule/views/Weekly.vue
@@ -0,0 +1,118 @@
+
+
+
+ Every
+
+
+
+
+ On
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/mixins/styleguidist.js b/src/mixins/styleguidist.js
index d58165f..6a4c8d1 100644
--- a/src/mixins/styleguidist.js
+++ b/src/mixins/styleguidist.js
@@ -46,6 +46,7 @@ export default {
radio: 1,
cleave: '123456789012345',
telephone: '01743211176',
+ time: '09:00',
showSchema: false,
formSchema: [
diff --git a/styleguide.config.js b/styleguide.config.js
index e877c24..6570006 100644
--- a/styleguide.config.js
+++ b/styleguide.config.js
@@ -23,6 +23,10 @@ module.exports = {
name: 'Datatable',
components: 'src/components/shared/Datatable.vue',
},
+ {
+ name: 'Schedule',
+ components: 'src/components/shared/schedule/**/*.vue',
+ },
{
name: 'Modal',
content: 'src/components/shared/semantic/semantic-modal.md',