@dcrackel/hematournamentui 1.0.44 → 1.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.js +3 -4
- package/.storybook/preview.js +1 -2
- package/package.json +20 -17
- package/postcss.config.js +1 -0
- package/src/assets/empty_desert_icon.png +0 -0
- package/src/mocks/EventQuestionsMock.js +59 -0
- package/src/stories/Molecules/Buttons/BaseButton/BaseButton.stories.js +9 -1
- package/src/stories/Molecules/Buttons/BaseButton/BaseButton.vue +8 -2
- package/src/stories/Molecules/Buttons/ButtonBar/ButtonBar.stories.js +42 -0
- package/src/stories/Molecules/Buttons/ButtonBar/ButtonBar.vue +50 -0
- package/src/stories/Molecules/Cards/AdminFencerCard/AdminFencerCard.js +29 -0
- package/src/stories/Molecules/Cards/AdminFencerCard/AdminFencerCard.vue +67 -0
- package/src/stories/Molecules/Cards/Detail/TournamentCardDetail.vue +6 -1
- package/src/stories/Molecules/CombinationInputs/TitledInput/TitledInput.vue +1 -1
- package/src/stories/Molecules/Menus/TabBar/TabBar.stories.js +26 -0
- package/src/stories/Molecules/Menus/TabBar/TabBar.vue +14 -0
- package/src/stories/Molecules/StepIndicator/BaseStepIndicator/StepIndicator.stories.js +20 -0
- package/src/stories/Molecules/StepIndicator/BaseStepIndicator/StepIndicator.vue +100 -0
- package/src/stories/Organisms/Cards/TournamentCard/TournamentCard.stories.js +1 -0
- package/src/stories/Organisms/Cards/TournamentCard/TournamentCard.vue +7 -2
- package/src/stories/Organisms/ComplexInputs/FindLocation/FindLocation.vue +38 -32
- package/src/stories/Organisms/Grids/GridContainer.vue +4 -1
- package/src/stories/Templates/Menus/Admin/AdminLeftMenu.stories.js +6 -6
- package/src/stories/Templates/Menus/EditTournamentMenu/EditTournamentMenu.stories.js +11 -0
- package/src/stories/Templates/Menus/EditTournamentMenu/EditTournamentMenu.vue +68 -0
- package/src/stories/Templates/TournamentManagement/AddTournament/PageOne/AddTournamentPageOne.vue +13 -10
- package/src/stories/Templates/TournamentManagement/EditTournament/EditEvents/EditEvents.stories.js +13 -0
- package/src/stories/Templates/TournamentManagement/EditTournament/EditEvents/EditEvents.vue +39 -0
- package/src/stories/{Organisms/Forms/EditTournamentForm1.stories.js → Templates/TournamentManagement/EditTournament/EditPageOne/EditTournamentPageOne.stories.js} +4 -3
- package/src/stories/Templates/TournamentManagement/EditTournament/EditPageOne/EditTournamentPageOne.vue +116 -0
- package/src/stories/Templates/TournamentManagement/EditTournament/EditPageTwo/EditTournamentPageTwo.stories.js +30 -0
- package/src/stories/Templates/TournamentManagement/EditTournament/EditPageTwo/EditTournamentPageTwo.vue +112 -0
- package/src/stories/Molecules/Menus/EditTournamentMenu/EditTournamentMenu.stories.js +0 -30
- package/src/stories/Molecules/Menus/EditTournamentMenu/EditTournamentMenu.vue +0 -31
- package/src/stories/Organisms/Forms/EditTournamentForm1.vue +0 -66
package/.storybook/main.js
CHANGED
|
@@ -5,14 +5,13 @@ const config = {
|
|
|
5
5
|
"@storybook/addon-links",
|
|
6
6
|
"@storybook/addon-essentials",
|
|
7
7
|
"@storybook/addon-interactions",
|
|
8
|
-
"@storybook/addon-mdx-gfm"
|
|
8
|
+
"@storybook/addon-mdx-gfm",
|
|
9
|
+
"@chromatic-com/storybook"
|
|
9
10
|
],
|
|
10
11
|
framework: {
|
|
11
12
|
name: "@storybook/vue3-vite",
|
|
12
13
|
options: {},
|
|
13
14
|
},
|
|
14
|
-
docs: {
|
|
15
|
-
autodocs: "tag",
|
|
16
|
-
},
|
|
15
|
+
docs: {},
|
|
17
16
|
};
|
|
18
17
|
export default config;
|
package/.storybook/preview.js
CHANGED
|
@@ -4,7 +4,6 @@ import 'font-awesome/css/font-awesome.min.css';
|
|
|
4
4
|
|
|
5
5
|
const preview = {
|
|
6
6
|
parameters: {
|
|
7
|
-
actions: { argTypesRegex: "^on[A-Z].*" },
|
|
8
7
|
controls: {
|
|
9
8
|
matchers: {
|
|
10
9
|
color: /(background|color)$/i,
|
|
@@ -14,4 +13,4 @@ const preview = {
|
|
|
14
13
|
},
|
|
15
14
|
};
|
|
16
15
|
|
|
17
|
-
export default preview;
|
|
16
|
+
export default preview;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcrackel/hematournamentui",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.45",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/HemaTouranmentUI-lib.umd.js",
|
|
7
7
|
"module": "dist/HemaTouranmentUI-lib.es.js",
|
|
@@ -24,39 +24,42 @@
|
|
|
24
24
|
"@tiptap/extension-text-align": "^2.1.13",
|
|
25
25
|
"@tiptap/starter-kit": "^2.1.13",
|
|
26
26
|
"@tiptap/vue-3": "^2.1.13",
|
|
27
|
-
"@vuepic/vue-datepicker": "^7.4.
|
|
27
|
+
"@vuepic/vue-datepicker": "^7.4.1",
|
|
28
28
|
"concurrently": "^8.2.2",
|
|
29
29
|
"cropperjs": "^1.6.1",
|
|
30
30
|
"eslint-plugin-jest": "^27.6.3",
|
|
31
31
|
"font-awesome": "^4.7.0",
|
|
32
32
|
"happy-dom": "^12.10.3",
|
|
33
|
+
"postcss": "^8.4.38",
|
|
34
|
+
"postcss-nesting": "^12.1.5",
|
|
33
35
|
"vue": "^3.4.0",
|
|
34
36
|
"vue-avatar-cropper": "^6.0.10",
|
|
35
37
|
"vue-google-autocomplete": "^1.1.4"
|
|
36
38
|
},
|
|
37
39
|
"devDependencies": {
|
|
38
|
-
"@storybook
|
|
39
|
-
"@storybook/addon-
|
|
40
|
-
"@storybook/addon-
|
|
41
|
-
"@storybook/addon-
|
|
42
|
-
"@storybook/addon-
|
|
43
|
-
"@storybook/addon-
|
|
44
|
-
"@storybook/
|
|
45
|
-
"@storybook/
|
|
46
|
-
"@storybook/
|
|
47
|
-
"@storybook/
|
|
48
|
-
"@storybook/vue3
|
|
40
|
+
"@chromatic-com/storybook": "^1.4.0",
|
|
41
|
+
"@storybook/addon-actions": "^8.1.3",
|
|
42
|
+
"@storybook/addon-docs": "^8.1.3",
|
|
43
|
+
"@storybook/addon-essentials": "^8.1.3",
|
|
44
|
+
"@storybook/addon-interactions": "^8.1.3",
|
|
45
|
+
"@storybook/addon-links": "^8.1.3",
|
|
46
|
+
"@storybook/addon-mdx-gfm": "^8.1.3",
|
|
47
|
+
"@storybook/blocks": "^8.1.3",
|
|
48
|
+
"@storybook/react": "^8.1.3",
|
|
49
|
+
"@storybook/test": "^8.1.3",
|
|
50
|
+
"@storybook/vue3": "^8.1.3",
|
|
51
|
+
"@storybook/vue3-vite": "^8.1.3",
|
|
49
52
|
"@vitejs/plugin-vue": "^5.0.0",
|
|
50
53
|
"@vitest/coverage-v8": "^1.1.0",
|
|
51
54
|
"@vue/cli-plugin-babel": "^5.0.8",
|
|
52
55
|
"@vue/test-utils": "^2.4.3",
|
|
53
|
-
"autoprefixer": "^10.4.
|
|
56
|
+
"autoprefixer": "^10.4.19",
|
|
54
57
|
"eslint": "^8.56.0",
|
|
55
|
-
"eslint-plugin-storybook": "^0.
|
|
58
|
+
"eslint-plugin-storybook": "^0.8.0",
|
|
56
59
|
"eslint-plugin-vue": "^9.20.1",
|
|
57
|
-
"storybook": "^
|
|
60
|
+
"storybook": "^8.1.3",
|
|
58
61
|
"storybook-vue3-router": "^5.0.0",
|
|
59
|
-
"tailwindcss": "^3.4.
|
|
62
|
+
"tailwindcss": "^3.4.3",
|
|
60
63
|
"vite": "^5.0.10",
|
|
61
64
|
"vitest": "^1.1.0"
|
|
62
65
|
}
|
package/postcss.config.js
CHANGED
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const mockEventQuestions = [
|
|
2
|
+
{
|
|
3
|
+
"TotalPages": 2,
|
|
4
|
+
"Pages": [
|
|
5
|
+
{
|
|
6
|
+
"pageNumber": 1,
|
|
7
|
+
"questions": [
|
|
8
|
+
{
|
|
9
|
+
"id": 1,
|
|
10
|
+
"text": "What Weapon Form will this event be for?",
|
|
11
|
+
"answers": [
|
|
12
|
+
"Longsword",
|
|
13
|
+
"Saber",
|
|
14
|
+
"Rapier and Dagger",
|
|
15
|
+
"Sword and Buckler",
|
|
16
|
+
"Single Rapier",
|
|
17
|
+
"Small Sword",
|
|
18
|
+
"Messer"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": 2,
|
|
23
|
+
"text": "Gender Restriction",
|
|
24
|
+
"answers": [
|
|
25
|
+
"Open",
|
|
26
|
+
"Women",
|
|
27
|
+
"Gender Minority"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"pageNumber": 2,
|
|
34
|
+
"questions": [
|
|
35
|
+
{
|
|
36
|
+
"id": 3,
|
|
37
|
+
"text": "Division",
|
|
38
|
+
"answers": [
|
|
39
|
+
"Div1",
|
|
40
|
+
"Div2",
|
|
41
|
+
"Div3"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": 4,
|
|
46
|
+
"text": "How will your pools be seeded?",
|
|
47
|
+
"answers": [
|
|
48
|
+
"HEMA Ratings",
|
|
49
|
+
"Our Point System",
|
|
50
|
+
"Manual"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
export default mockEventQuestions;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import BaseButton from './BaseButton.vue';
|
|
2
|
+
|
|
2
3
|
export default {
|
|
3
4
|
title: 'Molecules/Buttons/BaseButton',
|
|
4
5
|
component: BaseButton,
|
|
@@ -35,7 +36,7 @@ export default {
|
|
|
35
36
|
control: {
|
|
36
37
|
type: 'select'
|
|
37
38
|
},
|
|
38
|
-
options: ['primary', 'secondary', 'tertiary', 'bright', 'admin', 'square'],
|
|
39
|
+
options: ['primary', 'secondary', 'tertiary', 'bright', 'admin', 'square', 'tabBar'],
|
|
39
40
|
defaultValue: 'primary'
|
|
40
41
|
}
|
|
41
42
|
}
|
|
@@ -97,3 +98,10 @@ export const IconButton = {
|
|
|
97
98
|
iconName: 'fa-check',
|
|
98
99
|
}
|
|
99
100
|
};
|
|
101
|
+
|
|
102
|
+
export const TabBarButton = {
|
|
103
|
+
args: {
|
|
104
|
+
type: 'tabBar',
|
|
105
|
+
label: 'Button'
|
|
106
|
+
}
|
|
107
|
+
};
|
|
@@ -36,7 +36,7 @@ export default {
|
|
|
36
36
|
type: {
|
|
37
37
|
type: String,
|
|
38
38
|
default: 'primary',
|
|
39
|
-
validator: value => ['primary', 'secondary', 'tertiary', 'bright', 'admin', 'adminSecondary', 'iconOnly', 'editor', 'square'].includes(value)
|
|
39
|
+
validator: value => ['primary', 'secondary', 'tertiary', 'bright', 'admin', 'adminSecondary', 'iconOnly', 'editor', 'square', 'tabBar'].includes(value)
|
|
40
40
|
},
|
|
41
41
|
selected: {
|
|
42
42
|
type: Boolean,
|
|
@@ -49,6 +49,7 @@ export default {
|
|
|
49
49
|
const typeClasses = {
|
|
50
50
|
primary: 'mx-1 p-2 items-center gap-2.5 text-center rounded-md shadow border border-dropdownSelect justify-center hover:bg-tertiary ' +
|
|
51
51
|
(props.selected ? 'bg-dropdownSelect' : 'bg-neutral'),
|
|
52
|
+
|
|
52
53
|
secondary: 'px-2.5 items-center gap-2.5 text-center my-1 p-3 border-b border-secondary hover:border-b hover:border-neutral w-full rounded-lg flex flex-row justify-center ' +
|
|
53
54
|
(props.selected ? 'bg-secondary' : 'bg-primary'),
|
|
54
55
|
|
|
@@ -70,8 +71,12 @@ export default {
|
|
|
70
71
|
|
|
71
72
|
square: 'p-8 my-3 items-center gap-2.5 rounded-md text-center shadow border border-dropdownSelect justify-center hover:bg-tertiary ' +
|
|
72
73
|
(props.selected ? 'bg-dropdownSelect' : 'bg-neutral'),
|
|
74
|
+
|
|
75
|
+
tabBar: 'p-2 items-center justify-center text-center hover:border-b hover:border-b-bright text-primaryHighlight '
|
|
76
|
+
+ (props.selected ? 'border-b border-b-bright' : 'border-b border-b-neutral'),
|
|
73
77
|
};
|
|
74
78
|
|
|
79
|
+
|
|
75
80
|
const sizeClasses = {
|
|
76
81
|
xs: 'text-xs',
|
|
77
82
|
sm: 'text-sm',
|
|
@@ -94,7 +99,8 @@ export default {
|
|
|
94
99
|
adminSecondary: 'neutral',
|
|
95
100
|
iconOnly: 'neutral',
|
|
96
101
|
editor: props.selected ? 'bright' : 'quaternary',
|
|
97
|
-
square: 'primary'
|
|
102
|
+
square: 'primary',
|
|
103
|
+
tabBar: 'primaryHighlight',
|
|
98
104
|
};
|
|
99
105
|
return colorMap[props.type];
|
|
100
106
|
}),
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import ButtonBar from './ButtonBar.vue';
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Molecules/Buttons/ButtonBar',
|
|
5
|
+
component: ButtonBar,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
args: {
|
|
8
|
+
buttons: [
|
|
9
|
+
{ id: 'btn1', label: 'Option 1' },
|
|
10
|
+
{ id: 'btn2', label: 'Option 2' }
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
argTypes: {
|
|
14
|
+
buttons: {
|
|
15
|
+
control: 'object'
|
|
16
|
+
},
|
|
17
|
+
selected: {
|
|
18
|
+
control: 'text'
|
|
19
|
+
},
|
|
20
|
+
onSelected: {},
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const Primary = {
|
|
25
|
+
args: {
|
|
26
|
+
buttons: [
|
|
27
|
+
{ id: 'btn1', label: 'Absent' },
|
|
28
|
+
{ id: 'btn2', label: 'Present' }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const ThreeButtons = {
|
|
34
|
+
args: {
|
|
35
|
+
buttons: [
|
|
36
|
+
{ id: 'btn1', label: 'Option 1' },
|
|
37
|
+
{ id: 'btn2', label: 'Option 2' },
|
|
38
|
+
{ id: 'btn3', label: 'Option 3' }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex">
|
|
3
|
+
<section v-for="(button, index) in buttons" :key="button.id" class="flex flex-row text-sm" @click="selectButton(button.id)">
|
|
4
|
+
<div class="py-3 px-4 transition-colors duration-200 border border-1"
|
|
5
|
+
:class="{
|
|
6
|
+
'rounded-l-xl': parseInt(index) === 0,
|
|
7
|
+
'rounded-r-xl': parseInt(index) === Object.keys(this.buttons).length - 1,
|
|
8
|
+
'bg-tertiary text-primaryHighlight': selected === button.id,
|
|
9
|
+
'bg-natural text-quaternary': selected !== button.id
|
|
10
|
+
}">
|
|
11
|
+
{{ button.label }}
|
|
12
|
+
</div>
|
|
13
|
+
</section>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import { watch, ref } from 'vue';
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
name: 'ButtonBar',
|
|
23
|
+
props: {
|
|
24
|
+
buttons: {
|
|
25
|
+
type: Array,
|
|
26
|
+
required: true,
|
|
27
|
+
},
|
|
28
|
+
selected: {
|
|
29
|
+
type: String,
|
|
30
|
+
default: null,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
emits: ['update:selected'],
|
|
34
|
+
setup(props, { emit }) {
|
|
35
|
+
const selected = ref(props.selected);
|
|
36
|
+
|
|
37
|
+
// Watch for external changes to the `selected` prop
|
|
38
|
+
watch(() => props.selected, (newValue) => {
|
|
39
|
+
selected.value = newValue;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const selectButton = (id) => {
|
|
43
|
+
selected.value = id;
|
|
44
|
+
emit('update:selected', id);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return { selected, selectButton };
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
</script>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import PlayerCard from './AdminFencerCard.vue';
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Molecules/Cards/PlayerCard',
|
|
5
|
+
component: PlayerCard,
|
|
6
|
+
argTypes: {
|
|
7
|
+
name: { control: 'text' },
|
|
8
|
+
points: { control: 'number' }
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const Template = (args) => ({
|
|
13
|
+
components: { PlayerCard },
|
|
14
|
+
setup() {
|
|
15
|
+
return { args };
|
|
16
|
+
},
|
|
17
|
+
template: '<PlayerCard v-bind="args" />',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const Default = Template.bind({});
|
|
21
|
+
Default.args = {
|
|
22
|
+
position: 1,
|
|
23
|
+
profileUrl: 'https://via.placeholder.com/150',
|
|
24
|
+
playerName: 'John Doe',
|
|
25
|
+
clubName: 'Super Duper Fencing club of really long name',
|
|
26
|
+
USAHemaRating: '1200',
|
|
27
|
+
HEMARating: 'A'
|
|
28
|
+
};
|
|
29
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="w-full flex flex-row justify-between border border-1 border-dropdownSelect h-20 rounded-xl">
|
|
3
|
+
<span class="w-3/4 flex flex-row">
|
|
4
|
+
<div class="flex flex-col justify-center px-2 mr-4 items-center border-r-2 border-dropdownSelect">
|
|
5
|
+
<BaseText :text="position" color="primary" size="md" weight="semi-bold" />
|
|
6
|
+
</div>
|
|
7
|
+
<div class="flex flex-col justify-center flex-shrink-0 mr-4">
|
|
8
|
+
<img :src="profileUrl" alt="player" class="w-14 h-14 rounded-xl" />
|
|
9
|
+
</div>
|
|
10
|
+
<div class="flex flex-col justify-center flex-shrink-0 mr-4 w-80">
|
|
11
|
+
<BaseText :text="playerName" color="dropdownSelect" size="md" weight="semi-bold" />
|
|
12
|
+
<BaseText :text="clubName" color="dropdownSelect" size="xs" weight="semi-bold" />
|
|
13
|
+
</div>
|
|
14
|
+
<div class="flex flex-col justify-center flex-shrink-0 mr-4">
|
|
15
|
+
<BaseText :text="'USA Hema: ' + USAHemaRating" color="primary" size="sm" weight="semi-bold" />
|
|
16
|
+
<BaseText :text="'HemaRating: ' + HEMARating" color="primary" size="sm" weight="semi-bold" />
|
|
17
|
+
</div>
|
|
18
|
+
</span>
|
|
19
|
+
|
|
20
|
+
<div class="flex flex-col justify-center mr-4" >
|
|
21
|
+
<ButtonBar
|
|
22
|
+
:buttons="{0:{id:'Absent',label:'Absent'},1:{id:'Present',label:'Present'}}"
|
|
23
|
+
v-on:selected="()=>({})"
|
|
24
|
+
/>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script>
|
|
30
|
+
|
|
31
|
+
import BaseText from "../../../Atoms/Text/BaseText.vue";
|
|
32
|
+
import ButtonBar from "../../Buttons/ButtonBar/ButtonBar.vue";
|
|
33
|
+
|
|
34
|
+
export default {
|
|
35
|
+
name: 'AdminFencerCard',
|
|
36
|
+
components: {
|
|
37
|
+
ButtonBar,
|
|
38
|
+
BaseText
|
|
39
|
+
},
|
|
40
|
+
props: {
|
|
41
|
+
position: {
|
|
42
|
+
type: Number,
|
|
43
|
+
required: true,
|
|
44
|
+
},
|
|
45
|
+
profileUrl: {
|
|
46
|
+
type: String,
|
|
47
|
+
required: true,
|
|
48
|
+
},
|
|
49
|
+
playerName: {
|
|
50
|
+
type: String,
|
|
51
|
+
required: true,
|
|
52
|
+
},
|
|
53
|
+
clubName: {
|
|
54
|
+
type: String,
|
|
55
|
+
required: true,
|
|
56
|
+
},
|
|
57
|
+
USAHemaRating: {
|
|
58
|
+
type: String,
|
|
59
|
+
required: true,
|
|
60
|
+
},
|
|
61
|
+
HEMARating: {
|
|
62
|
+
type: String,
|
|
63
|
+
required: true,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
</script>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<BaseText :text="`${detail.EndDate}`" color="primaryHighlight" size="sm" weight="light" />
|
|
11
11
|
</div>
|
|
12
12
|
<div class="flex flex-row w-full justify-end">
|
|
13
|
-
<BaseButton :label="`Edit`" class="mt-2" primary />
|
|
13
|
+
<BaseButton :label="`Edit`" class="mt-2" primary @click="onClick" />
|
|
14
14
|
</div>
|
|
15
15
|
</div>
|
|
16
16
|
</template>
|
|
@@ -48,6 +48,11 @@ export default {
|
|
|
48
48
|
tags: []
|
|
49
49
|
})
|
|
50
50
|
}
|
|
51
|
+
},
|
|
52
|
+
methods: {
|
|
53
|
+
onClick() {
|
|
54
|
+
this.$emit('edit', this.detail);
|
|
55
|
+
}
|
|
51
56
|
}
|
|
52
57
|
};
|
|
53
58
|
</script>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="flex flex-col mb-3">
|
|
3
|
-
<BaseText :invalid=invalid :text=title class="mb-1 ml-1" color="
|
|
3
|
+
<BaseText :invalid=invalid :text=title class="mb-1 ml-1" color="primaryHighlight"
|
|
4
4
|
size="sm" weight="normal"/>
|
|
5
5
|
<BaseInput :addBorder="true" :invalid=invalid :placeholder=placeholder :value=inputValue
|
|
6
6
|
@update:value="handleUpdateValue"/>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import TabBar from './TabBar.vue';
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Molecules/Menus/TabBar/TabBar',
|
|
5
|
+
component: TabBar,
|
|
6
|
+
tags: ['autodocs']
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const Template = (args) => ({
|
|
10
|
+
components: {TabBar},
|
|
11
|
+
setup() {
|
|
12
|
+
return {args};
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const Default = {
|
|
17
|
+
args: {
|
|
18
|
+
buttons: [
|
|
19
|
+
{label: 'Basic'},
|
|
20
|
+
{label: 'Details'},
|
|
21
|
+
{label: 'Events'},
|
|
22
|
+
{label: 'Payments'}, // should be greyed out if ferrotas not being used for this
|
|
23
|
+
{label: 'Staff'}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import StepIndicator from "./StepIndicator.vue";
|
|
2
|
+
import mockEventQuestions from "../../../../mocks/EventQuestionsMock.js";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Molecules/StepIndicator/BaseStepIndicator',
|
|
6
|
+
component: StepIndicator,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
args: {
|
|
9
|
+
eventQuestions: mockEventQuestions
|
|
10
|
+
},
|
|
11
|
+
argTypes: {}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const Default = {
|
|
15
|
+
args: {
|
|
16
|
+
eventQuestions: mockEventQuestions,
|
|
17
|
+
iconName: "fa-circle-1",
|
|
18
|
+
steps: 3
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<!--make as many circles as there are pages-->
|
|
2
|
+
<!--circles need labels underneath with the page number "page 1" etc-->
|
|
3
|
+
<!--highlight the circle that is the same number as the current page-->
|
|
4
|
+
<!--for numbers less than the current, replace circle and number with circle and checkmark-->
|
|
5
|
+
<!--also highlight the line between previous steps-->
|
|
6
|
+
<!--allow circles less than the current page number to be clickable objects that will take you back to that page-->
|
|
7
|
+
|
|
8
|
+
<!--<template>-->
|
|
9
|
+
<!-- <nav class="flex flex-row w-full">-->
|
|
10
|
+
<!-- <div v-for="(step, index) in steps" :key="index" class="flex flex-row">-->
|
|
11
|
+
<!-- <BaseIcon v-if="index > 0" :color="color" :icon-name="iconName" :size="size" :style="iconStyle"-->
|
|
12
|
+
<!-- data-testid="base-icon"/>-->
|
|
13
|
+
<!-- </div>-->
|
|
14
|
+
<!-- </nav>-->
|
|
15
|
+
<!--</template>-->
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<nav class="flex flex-row w-full">
|
|
19
|
+
<div v-for="step in steps" class="flex flex-row">
|
|
20
|
+
<BaseIcon class="mx-5" :color="color" :icon-name="`fa-regular fa-circle-${step}`" :size="size" :style="iconStyle" :hover="hover"
|
|
21
|
+
data-testid="base-icon"/>
|
|
22
|
+
<BaseText :color="'primaryHighlight'" :size="'sm'" :text="`Step ${step}`"
|
|
23
|
+
:weight="'normal'"/>
|
|
24
|
+
</div>
|
|
25
|
+
</nav>
|
|
26
|
+
</template>
|
|
27
|
+
<script>
|
|
28
|
+
|
|
29
|
+
import BaseIcon from "../../../Atoms/Icon/BaseIcon.vue";
|
|
30
|
+
import BaseText from "../../../Atoms/Text/BaseText.vue";
|
|
31
|
+
|
|
32
|
+
export default {
|
|
33
|
+
name: 'base-step-indicator',
|
|
34
|
+
components: {BaseText, BaseIcon},
|
|
35
|
+
|
|
36
|
+
props: {
|
|
37
|
+
// steps: {
|
|
38
|
+
// type: Array,
|
|
39
|
+
// required: true,
|
|
40
|
+
// default: () => []
|
|
41
|
+
// },
|
|
42
|
+
|
|
43
|
+
steps: {
|
|
44
|
+
type: Number,
|
|
45
|
+
default: 3
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
iconName: {
|
|
49
|
+
type: String,
|
|
50
|
+
default:
|
|
51
|
+
''
|
|
52
|
+
}
|
|
53
|
+
,
|
|
54
|
+
iconStyle: {
|
|
55
|
+
type: String,
|
|
56
|
+
default:
|
|
57
|
+
'fa-solid',
|
|
58
|
+
validator:
|
|
59
|
+
value => ['fa-solid', 'fa-regular', 'fa-light', 'fa-thing'].includes(value)
|
|
60
|
+
}
|
|
61
|
+
,
|
|
62
|
+
size: {
|
|
63
|
+
type: String,
|
|
64
|
+
default:
|
|
65
|
+
'md',
|
|
66
|
+
validator:
|
|
67
|
+
value => ['xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl'].includes(value)
|
|
68
|
+
},
|
|
69
|
+
color: {
|
|
70
|
+
type: String,
|
|
71
|
+
default: 'bright'
|
|
72
|
+
},
|
|
73
|
+
hover: {
|
|
74
|
+
type: String,
|
|
75
|
+
default: 'primary',
|
|
76
|
+
validator:
|
|
77
|
+
value => ['primary', 'secondary', 'tertiary', 'bright'].includes(value)
|
|
78
|
+
},
|
|
79
|
+
type: {
|
|
80
|
+
type: String,
|
|
81
|
+
default:
|
|
82
|
+
'primary',
|
|
83
|
+
validator:
|
|
84
|
+
value => ['primary', 'secondary', 'tertiary', 'bright', 'admin', 'adminSecondary', 'iconOnly', 'editor', 'square', 'tabBar'].includes(value)
|
|
85
|
+
}
|
|
86
|
+
,
|
|
87
|
+
selected: {
|
|
88
|
+
type: Boolean,
|
|
89
|
+
default:
|
|
90
|
+
false
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
setup(props) {
|
|
95
|
+
const typeClasses = {
|
|
96
|
+
primary: 'mx-1 p-2 items-center icon="fa-regular fa-circle-1" />'
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
</script>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="rounded-xl w-72 shadow">
|
|
3
3
|
<TournamentHeader :artwork="detail.images && detail.images.length > 0 ? detail.images[0].URL : ''" :tags="detail.tags" />
|
|
4
|
-
<TournamentDetail :detail="detail" />
|
|
4
|
+
<TournamentDetail :detail="detail" @click="onClick" />
|
|
5
5
|
</div>
|
|
6
6
|
</template>
|
|
7
7
|
|
|
@@ -20,7 +20,7 @@ export default {
|
|
|
20
20
|
type: Object,
|
|
21
21
|
required: true,
|
|
22
22
|
default: () => ({
|
|
23
|
-
|
|
23
|
+
tournamentId: null,
|
|
24
24
|
Name: '',
|
|
25
25
|
StartDate: '',
|
|
26
26
|
EndDate: '',
|
|
@@ -42,6 +42,11 @@ export default {
|
|
|
42
42
|
})
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
|
+
methods: {
|
|
46
|
+
onClick() {
|
|
47
|
+
this.$emit('edit', this.detail.TournamentId);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
45
50
|
};
|
|
46
51
|
|
|
47
52
|
</script>
|