@xy-planning-network/trees 0.2.62 → 0.3.3
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/README.md +103 -0
- package/config/tailwind.config.js +56 -0
- package/config/theme/animation.js +3 -0
- package/config/theme/colors.js +17 -0
- package/config/theme/fontFamily.js +4 -0
- package/config/theme/index.js +5 -0
- package/dist/trees.esm.js +63 -65
- package/dist/trees.min.js +2 -2
- package/dist/trees.ssr.js +64 -66
- package/package.json +7 -3
- package/src/index.css +147 -0
- package/src/lib-components/forms/BaseInput.vue +1 -1
- package/src/lib-components/forms/Checkbox.vue +4 -8
- package/src/lib-components/forms/InputHelp.vue +1 -1
- package/src/lib-components/forms/InputLabel.vue +1 -1
- package/src/lib-components/forms/MultiCheckboxes.vue +2 -2
- package/src/lib-components/forms/Radio.vue +2 -2
- package/src/lib-components/forms/Select.vue +8 -5
- package/src/lib-components/forms/TextArea.vue +1 -1
- package/src/lib-components/forms/YesOrNoRadio.vue +4 -6
- package/src/lib-components/layout/DateFilter.vue +2 -1
- package/src/lib-components/layout/SidebarLayout.vue +7 -7
- package/src/lib-components/layout/StackedLayout.vue +6 -6
- package/src/lib-components/lists/Cards.vue +1 -1
- package/src/lib-components/lists/StaticTable.vue +3 -3
- package/src/lib-components/lists/Table.vue +3 -3
- package/src/lib-components/navigation/ActionsDropdown.vue +2 -2
- package/src/lib-components/navigation/Paginator.vue +5 -5
- package/src/lib-components/navigation/Tabs.vue +4 -4
- package/src/lib-components/overlays/Slideover.vue +4 -3
package/src/index.css
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
@layer base {
|
|
6
|
+
html {
|
|
7
|
+
@apply antialiased;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* general body copy */
|
|
11
|
+
body {
|
|
12
|
+
@apply text-base leading-normal text-gray-900;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Headers */
|
|
16
|
+
h1 {
|
|
17
|
+
@apply text-3xl leading-9 font-semibold;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
h2 {
|
|
21
|
+
@apply text-2xl leading-7 font-semibold;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
h3 {
|
|
25
|
+
@apply text-lg leading-6 font-semibold;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
h4 {
|
|
29
|
+
@apply text-base leading-5 font-semibold;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
h5 {
|
|
33
|
+
@apply text-sm leading-5 font-semibold;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
h6 {
|
|
37
|
+
@apply text-xs leading-4 font-semibold;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Forms: here for backward compatibility. Use <BaseInput> instead. */
|
|
41
|
+
[type="text"],
|
|
42
|
+
[type="email"],
|
|
43
|
+
[type="password"],
|
|
44
|
+
[type="number"],
|
|
45
|
+
[type="search"],
|
|
46
|
+
[type="tel"],
|
|
47
|
+
textarea {
|
|
48
|
+
@apply mt-1 shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-600 rounded-md;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@layer components {
|
|
53
|
+
/* Badge classes - TODO: handle anchor tag class cases and generic wrapper cases */
|
|
54
|
+
.xy-badge {
|
|
55
|
+
@apply inline-flex justify-center items-center px-2 py-0.5 rounded text-xs font-semibold bg-gray-100 text-gray-800;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.xy-badge-blue {
|
|
59
|
+
@apply inline-flex justify-center items-center px-2 py-0.5 rounded text-xs font-semibold bg-blue-100 text-blue-800;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.xy-badge-yellow {
|
|
63
|
+
@apply inline-flex justify-center items-center px-2 py-0.5 rounded text-xs font-semibold bg-yellow-100 text-yellow-800;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* Button classes */
|
|
67
|
+
.xy-btn {
|
|
68
|
+
@apply inline-flex justify-center items-center px-4 py-2 border border-transparent text-sm font-semibold rounded-md shadow-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.xy-btn-secondary {
|
|
72
|
+
@apply inline-flex justify-center items-center px-4 py-2 border border-transparent text-sm font-semibold rounded-md shadow-md text-blue-700 bg-blue-100 hover:bg-blue-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.xy-btn-green {
|
|
76
|
+
@apply inline-flex justify-center items-center px-4 py-2 border border-transparent text-sm font-semibold rounded-md shadow-md text-white bg-xy-green hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.xy-btn-red {
|
|
80
|
+
@apply inline-flex justify-center items-center px-4 py-2 border border-transparent text-xs md:text-sm font-semibold rounded-md shadow-md text-red-700 bg-red-100 hover:bg-red-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-300 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.xy-btn-white {
|
|
84
|
+
@apply inline-flex justify-center items-center px-4 py-2 border border-xy-blue shadow-md text-sm font-semibold rounded-md text-xy-blue bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Header classes */
|
|
88
|
+
.h1 {
|
|
89
|
+
@apply text-3xl leading-9 font-semibold;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.h2 {
|
|
93
|
+
@apply text-2xl leading-7 font-semibold;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.h3 {
|
|
97
|
+
@apply text-lg leading-6 font-semibold;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.h4 {
|
|
101
|
+
@apply text-base leading-5 font-semibold;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.h5 {
|
|
105
|
+
@apply text-sm leading-5 font-semibold;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.h6 {
|
|
109
|
+
@apply text-xs leading-4 font-semibold;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.xy-h1-extra-flair {
|
|
113
|
+
@apply text-3xl font-bold leading-9 tracking-tight sm:text-4xl sm:leading-10;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.xy-h1-responsive {
|
|
117
|
+
@apply text-2xl leading-7 font-semibold lg:text-3xl lg:leading-9;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.xy-h2-responsive {
|
|
121
|
+
@apply text-lg leading-6 font-semibold lg:text-2xl lg:leading-7;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.xy-h3-responsive {
|
|
125
|
+
@apply text-base leading-5 font-semibold lg:text-lg lg:leading-6;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* Link classes */
|
|
129
|
+
.xy-link {
|
|
130
|
+
@apply font-semibold underline text-xy-blue hover:text-blue-700;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@layer utilities {
|
|
135
|
+
.max-h-screen-1\/4 {
|
|
136
|
+
max-height: 25vh;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.max-h-screen-1\/2 {
|
|
140
|
+
max-height: 50vh;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* Forms */
|
|
144
|
+
.xy-input-error {
|
|
145
|
+
@apply focus:ring-red-700 focus:border-red-700 text-red-900 placeholder-red-700 placeholder-opacity-75 border-red-700;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<input
|
|
5
5
|
:aria-labelledby="label ? `${uuid}-label` : undefined"
|
|
6
6
|
:checked="modelValue"
|
|
7
|
-
class="focus:ring-blue-500 h-4 w-4 text-
|
|
7
|
+
class="focus:ring-blue-500 h-4 w-4 text-blue-500 border-gray-600 rounded disabled:opacity-50 disabled:cursor-not-allowed"
|
|
8
8
|
:id="uuid"
|
|
9
9
|
type="checkbox"
|
|
10
10
|
v-bind="{
|
|
@@ -15,13 +15,8 @@
|
|
|
15
15
|
}"
|
|
16
16
|
/>
|
|
17
17
|
</div>
|
|
18
|
-
<div class="ml-3 text-sm leading-
|
|
19
|
-
<label
|
|
20
|
-
:id="`${uuid}-label`"
|
|
21
|
-
:for="uuid"
|
|
22
|
-
:class="{ 'font-semibold': emphasis }"
|
|
23
|
-
v-text="label"
|
|
24
|
-
></label>
|
|
18
|
+
<div class="ml-3 text-sm font-semibold leading-snug text-gray-900">
|
|
19
|
+
<label :id="`${uuid}-label`" :for="uuid" v-text="label"></label>
|
|
25
20
|
</div>
|
|
26
21
|
</div>
|
|
27
22
|
</template>
|
|
@@ -32,6 +27,7 @@ import { Options, Prop, Vue } from "vue-property-decorator";
|
|
|
32
27
|
|
|
33
28
|
@Options({ name: "Checkbox" })
|
|
34
29
|
export default class Checkbox extends Vue {
|
|
30
|
+
// TODO: checkbox should support the help text prop like base input, and label should use the label component or possible support a legend prop
|
|
35
31
|
@Prop({ type: Boolean, required: false }) emphasis?: boolean;
|
|
36
32
|
@Prop({ type: String, required: false }) label?: string;
|
|
37
33
|
@Prop({ type: Boolean, required: true }) modelValue!: boolean;
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
<div class="flex items-center h-5">
|
|
7
7
|
<input
|
|
8
8
|
type="checkbox"
|
|
9
|
-
class="focus:ring-blue-500 h-4 w-4 text-xy-blue border-gray-
|
|
9
|
+
class="focus:ring-blue-500 h-4 w-4 text-xy-blue border-gray-600 rounded disabled:opacity-50 disabled:cursor-not-allowed"
|
|
10
10
|
:id="`${uuid}-${index}`"
|
|
11
11
|
:value="option.value"
|
|
12
12
|
v-model="model"
|
|
13
13
|
v-bind="$attrs"
|
|
14
14
|
/>
|
|
15
15
|
</div>
|
|
16
|
-
<div class="ml-3 text-sm leading-
|
|
16
|
+
<div class="ml-3 text-sm font-semibold leading-snug text-gray-900">
|
|
17
17
|
<label :for="`${uuid}-${index}`" v-text="option.label"></label>
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
>
|
|
10
10
|
<input
|
|
11
11
|
:checked="modelValue === option.value"
|
|
12
|
-
class="w-4 h-4 border-gray-
|
|
12
|
+
class="w-4 h-4 border-gray-600 focus:ring-blue-500 text-xy-blue"
|
|
13
13
|
:id="`${uuid}-${index}`"
|
|
14
14
|
:name="uuid"
|
|
15
15
|
type="radio"
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
}"
|
|
23
23
|
/>
|
|
24
|
-
<span class="block ml-2 text-sm font-
|
|
24
|
+
<span class="block ml-2 text-sm font-semibold text-gray-900">
|
|
25
25
|
{{ option.label }}
|
|
26
26
|
</span>
|
|
27
27
|
</label>
|
|
@@ -45,11 +45,14 @@ export default class Select extends Vue {
|
|
|
45
45
|
@Prop({ type: String, required: false }) help?: string;
|
|
46
46
|
@Prop({ type: Array, required: true }) options!: Array<{
|
|
47
47
|
label: string;
|
|
48
|
-
value: string;
|
|
48
|
+
value: string | number;
|
|
49
49
|
}>;
|
|
50
50
|
@Prop({ type: String, required: false, default: "Select an option" })
|
|
51
51
|
placeholder?: string;
|
|
52
|
-
@Prop({ type: String, required: true }) modelValue!:
|
|
52
|
+
@Prop({ type: [String, Number], required: true }) modelValue!:
|
|
53
|
+
| string
|
|
54
|
+
| number
|
|
55
|
+
| undefined;
|
|
53
56
|
|
|
54
57
|
uuid = (this.$attrs.id as string) || Uniques.CreateIdAttribute();
|
|
55
58
|
|
|
@@ -57,11 +60,11 @@ export default class Select extends Vue {
|
|
|
57
60
|
const design = this.design ? this.design : "undefined";
|
|
58
61
|
return ({
|
|
59
62
|
undefined:
|
|
60
|
-
"mt-1 block w-full border border-gray-
|
|
63
|
+
"mt-1 block w-full border border-gray-600 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm",
|
|
61
64
|
standard:
|
|
62
|
-
"mt-1 block w-full border border-gray-
|
|
65
|
+
"mt-1 block w-full border border-gray-600 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm",
|
|
63
66
|
compressed:
|
|
64
|
-
"appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-
|
|
67
|
+
"appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-600 text-gray-900 focus:outline-none focus:ring-blue-500 focus:border-blue-500 focus:z-10 sm:text-sm",
|
|
65
68
|
} as any)[design];
|
|
66
69
|
}
|
|
67
70
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
>
|
|
9
9
|
<input
|
|
10
10
|
type="radio"
|
|
11
|
-
class="w-4 h-4 border-gray-
|
|
11
|
+
class="w-4 h-4 border-gray-600 focus:ring-blue-500 text-xy-blue"
|
|
12
12
|
:id="`${hasNameAttr ? name : uuid}-true`"
|
|
13
13
|
:name="hasNameAttr ? name : uuid"
|
|
14
14
|
:value="true"
|
|
@@ -20,9 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
}"
|
|
22
22
|
/>
|
|
23
|
-
<span class="block ml-2 text-sm font-
|
|
24
|
-
>Yes</span
|
|
25
|
-
>
|
|
23
|
+
<span class="block ml-2 text-sm font-semibold text-gray-900">Yes</span>
|
|
26
24
|
</label>
|
|
27
25
|
<label
|
|
28
26
|
class="inline-flex items-center ml-6"
|
|
@@ -31,7 +29,7 @@
|
|
|
31
29
|
>
|
|
32
30
|
<input
|
|
33
31
|
type="radio"
|
|
34
|
-
class="w-4 h-4 border-gray-
|
|
32
|
+
class="w-4 h-4 border-gray-600 focus:ring-blue-500 text-xy-blue"
|
|
35
33
|
:id="`${hasNameAttr ? name : uuid}-false`"
|
|
36
34
|
:name="hasNameAttr ? name : uuid"
|
|
37
35
|
:value="false"
|
|
@@ -43,7 +41,7 @@
|
|
|
43
41
|
},
|
|
44
42
|
}"
|
|
45
43
|
/>
|
|
46
|
-
<span class="block ml-2 text-sm font-
|
|
44
|
+
<span class="block ml-2 text-sm font-semibold text-gray-900">No</span>
|
|
47
45
|
</label>
|
|
48
46
|
</fieldset>
|
|
49
47
|
</template>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<div class="mt-4 flex md:mt-0 md:ml-4">
|
|
11
11
|
<select
|
|
12
12
|
@change="sortDirChanged($event.target.value)"
|
|
13
|
-
class="block w-full border border-gray-
|
|
13
|
+
class="block w-full border border-gray-600 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
|
|
14
14
|
>
|
|
15
15
|
<option value="DESC">Newest-Oldest</option>
|
|
16
16
|
<option value="ASC">Oldest-Newest</option>
|
|
@@ -31,6 +31,7 @@ import DateRangePicker from "../forms/DateRangePicker.vue";
|
|
|
31
31
|
|
|
32
32
|
@Options({ components: { DateRangePicker }, name: "DateFilter" })
|
|
33
33
|
export default class DateFilter extends Vue {
|
|
34
|
+
// TODO: sort select should use built in select component
|
|
34
35
|
@Prop({ type: Object, required: true }) dateRange!: {
|
|
35
36
|
minDate: number;
|
|
36
37
|
maxDate: number;
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
:class="[
|
|
63
63
|
isActive(item.url)
|
|
64
64
|
? 'bg-gray-100 text-gray-900'
|
|
65
|
-
: 'text-gray-
|
|
65
|
+
: 'text-gray-700 hover:bg-gray-50 hover:text-gray-900',
|
|
66
66
|
'group flex items-center px-2 py-2 text-base font-medium rounded-md',
|
|
67
67
|
]"
|
|
68
68
|
:target="item.openInTab ? '_blank' : '_self'"
|
|
@@ -71,8 +71,8 @@
|
|
|
71
71
|
:is="item.icon"
|
|
72
72
|
:class="[
|
|
73
73
|
isActive(item.url)
|
|
74
|
-
? 'text-gray-
|
|
75
|
-
: 'text-gray-
|
|
74
|
+
? 'text-gray-600'
|
|
75
|
+
: 'text-gray-500 group-hover:text-gray-600',
|
|
76
76
|
'mr-4 h-6 w-6',
|
|
77
77
|
]"
|
|
78
78
|
aria-hidden="true"
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
:class="[
|
|
109
109
|
isActive(item.url)
|
|
110
110
|
? 'bg-gray-100 text-gray-900'
|
|
111
|
-
: 'text-gray-
|
|
111
|
+
: 'text-gray-700 hover:bg-gray-100 hover:text-gray-900',
|
|
112
112
|
'group flex items-center px-2 py-2 text-sm font-medium rounded-md',
|
|
113
113
|
]"
|
|
114
114
|
:target="item.openInTab ? '_blank' : '_self'"
|
|
@@ -117,8 +117,8 @@
|
|
|
117
117
|
:is="item.icon"
|
|
118
118
|
:class="[
|
|
119
119
|
isActive(item.url)
|
|
120
|
-
? 'text-gray-
|
|
121
|
-
: 'text-gray-
|
|
120
|
+
? 'text-gray-600'
|
|
121
|
+
: 'text-gray-500 group-hover:text-gray-600',
|
|
122
122
|
'mr-3 h-6 w-6',
|
|
123
123
|
]"
|
|
124
124
|
aria-hidden="true"
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
:href="item.url"
|
|
177
177
|
:class="[
|
|
178
178
|
active ? 'bg-gray-100' : '',
|
|
179
|
-
'block px-4 py-2 text-sm text-gray-700',
|
|
179
|
+
'block px-4 py-2 text-sm text-gray-700 font-semibold',
|
|
180
180
|
]"
|
|
181
181
|
>{{ item.name }}</a
|
|
182
182
|
>
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
:class="[
|
|
16
16
|
isActive(item.url)
|
|
17
17
|
? 'border-blue-500 text-gray-900'
|
|
18
|
-
: 'border-transparent text-gray-
|
|
19
|
-
'inline-flex items-center px-1 pt-1 border-b-2 text-sm font-
|
|
18
|
+
: 'border-transparent text-gray-700 hover:text-gray-900 hover:border-blue-500',
|
|
19
|
+
'inline-flex items-center px-1 pt-1 border-b-2 text-sm font-semibold',
|
|
20
20
|
]"
|
|
21
21
|
:aria-current="isActive(item.url) ? 'page' : undefined"
|
|
22
22
|
>{{ item.name }}</a
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
:href="item.url"
|
|
55
55
|
:class="[
|
|
56
56
|
active ? 'bg-gray-100' : '',
|
|
57
|
-
'block px-4 py-2 text-sm text-gray-700',
|
|
57
|
+
'block px-4 py-2 text-sm text-gray-700 font-semibold',
|
|
58
58
|
]"
|
|
59
59
|
>{{ item.name }}</a
|
|
60
60
|
>
|
|
@@ -85,8 +85,8 @@
|
|
|
85
85
|
:class="[
|
|
86
86
|
isActive(item.url)
|
|
87
87
|
? 'bg-blue-50 border-blue-500 text-blue-700'
|
|
88
|
-
: 'border-transparent text-gray-
|
|
89
|
-
'block pl-3 pr-4 py-2 border-l-4 text-base font-
|
|
88
|
+
: 'border-transparent text-gray-700 hover:bg-gray-50 hover:border-gray-300 hover:text-gray-900',
|
|
89
|
+
'block pl-3 pr-4 py-2 border-l-4 text-base font-semibold',
|
|
90
90
|
]"
|
|
91
91
|
:aria-current="isActive(item.url) ? 'page' : undefined"
|
|
92
92
|
>{{ item.name }}</a
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
v-for="item in userNavigation"
|
|
114
114
|
:key="item.name"
|
|
115
115
|
:href="item.url"
|
|
116
|
-
class="block px-4 py-2 text-base font-medium text-gray-
|
|
116
|
+
class="block px-4 py-2 text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-100"
|
|
117
117
|
>{{ item.name }}</a
|
|
118
118
|
>
|
|
119
119
|
</div>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<thead>
|
|
10
10
|
<tr>
|
|
11
11
|
<th
|
|
12
|
-
class="px-6 py-3 text-xs font-medium tracking-wider text-left text-gray-
|
|
12
|
+
class="px-6 py-3 text-xs font-medium tracking-wider text-left text-gray-900 uppercase bg-gray-50 leading-4"
|
|
13
13
|
v-for="(col, idx) in tableData.columns"
|
|
14
14
|
:key="idx"
|
|
15
15
|
v-text="col.display"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
:key="item.id ? item.id : rowIdx"
|
|
23
23
|
>
|
|
24
24
|
<td
|
|
25
|
-
class="px-6 py-4 text-sm text-gray-
|
|
25
|
+
class="px-6 py-4 text-sm text-gray-700 whitespace-nowrap leading-5"
|
|
26
26
|
v-for="(col, colIdx) in tableData.columns"
|
|
27
27
|
:key="rowIdx + '-' + colIdx"
|
|
28
28
|
>
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<tr v-if="tableData.items.length == 0">
|
|
41
41
|
<td
|
|
42
42
|
:colspan="tableData.columns.length"
|
|
43
|
-
class="px-6 py-4 text-sm text-gray-
|
|
43
|
+
class="px-6 py-4 text-sm text-gray-700 whitespace-nowrap leading-5"
|
|
44
44
|
>
|
|
45
45
|
No items were found!
|
|
46
46
|
</td>
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<thead>
|
|
46
46
|
<tr>
|
|
47
47
|
<th
|
|
48
|
-
class="px-6 py-3 text-xs font-medium tracking-wider text-left text-gray-
|
|
48
|
+
class="px-6 py-3 text-xs font-medium tracking-wider text-left text-gray-900 uppercase border-b border-gray-200 bg-gray-50 leading-4"
|
|
49
49
|
v-for="(col, idx) in tableData.columns"
|
|
50
50
|
:key="idx"
|
|
51
51
|
>
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
:class="{ 'cursor-pointer': clickable }"
|
|
110
110
|
>
|
|
111
111
|
<td
|
|
112
|
-
class="px-6 py-4 text-sm text-gray-
|
|
112
|
+
class="px-6 py-4 text-sm text-gray-700 whitespace-nowrap border-b border-gray-200 leading-5"
|
|
113
113
|
v-for="(col, colIdx) in tableData.columns"
|
|
114
114
|
:key="rowIdx + '-' + colIdx"
|
|
115
115
|
:class="col.class"
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
<tr v-if="!hasContent">
|
|
130
130
|
<td
|
|
131
131
|
:colspan="tableData.columns.length"
|
|
132
|
-
class="px-6 py-4 text-sm text-gray-
|
|
132
|
+
class="px-6 py-4 text-sm text-gray-700 whitespace-nowrap border-b border-gray-200 leading-5"
|
|
133
133
|
>
|
|
134
134
|
No items were found!
|
|
135
135
|
</td>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<Menu as="div" class="relative flex justify-end items-center">
|
|
3
3
|
<MenuButton
|
|
4
|
-
class="w-8 h-8 bg-white inline-flex items-center justify-center text-gray-
|
|
4
|
+
class="w-8 h-8 bg-white inline-flex items-center justify-center text-gray-700 rounded-full hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
5
5
|
:disabled="!hasActionItems"
|
|
6
6
|
>
|
|
7
7
|
<span class="sr-only">Open options</span>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
type="submit"
|
|
26
26
|
:class="[
|
|
27
27
|
active ? 'bg-gray-100 text-gray-900' : 'text-gray-700',
|
|
28
|
-
'block w-full text-left px-4 py-2 text-sm',
|
|
28
|
+
'block w-full text-left px-4 py-2 text-sm font-semibold',
|
|
29
29
|
]"
|
|
30
30
|
v-text="item.label"
|
|
31
31
|
@click="emitEvent(item.event)"
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
@click.prevent="changePage(modelValue.page - 1)"
|
|
8
8
|
:class="
|
|
9
9
|
modelValue.page == 1
|
|
10
|
-
? 'text-gray-
|
|
11
|
-
: 'text-gray-
|
|
10
|
+
? 'text-gray-500 cursor-not-allowed pointer-events-none'
|
|
11
|
+
: 'text-gray-700 hover:text-gray-900 hover:border-gray-300'
|
|
12
12
|
"
|
|
13
13
|
>
|
|
14
14
|
<svg class="mr-3 h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
:class="
|
|
33
33
|
modelValue.page === i
|
|
34
34
|
? 'border-blue-500 text-blue-600 focus:outline-none focus:text-blue-800 focus:border-blue-700'
|
|
35
|
-
: 'border-transparent text-gray-
|
|
35
|
+
: 'border-transparent text-gray-700 hover:text-gray-900 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-400'
|
|
36
36
|
"
|
|
37
37
|
@click.prevent="changePage(i)"
|
|
38
38
|
></a>
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
@click.prevent="changePage(modelValue.page + 1)"
|
|
46
46
|
:class="
|
|
47
47
|
modelValue.page >= modelValue.totalPages
|
|
48
|
-
? 'text-gray-
|
|
49
|
-
: 'text-gray-
|
|
48
|
+
? 'text-gray-500 cursor-not-allowed pointer-events-none'
|
|
49
|
+
: 'text-gray-700 hover:text-gray-900 hover:border-gray-300'
|
|
50
50
|
"
|
|
51
51
|
>
|
|
52
52
|
Next
|
|
@@ -49,7 +49,7 @@ export default class Tabs extends Vue {
|
|
|
49
49
|
|
|
50
50
|
if (this.pillDesign) {
|
|
51
51
|
c =
|
|
52
|
-
"px-12 py-2 font-
|
|
52
|
+
"px-12 py-2 font-semibold text-md leading-5 rounded-t-md focus:outline-none ";
|
|
53
53
|
|
|
54
54
|
if (this.modelValue === currentTab) {
|
|
55
55
|
c =
|
|
@@ -58,14 +58,14 @@ export default class Tabs extends Vue {
|
|
|
58
58
|
} else {
|
|
59
59
|
c =
|
|
60
60
|
c +
|
|
61
|
-
"text-gray-
|
|
61
|
+
"text-gray-700 hover:text-gray-900 focus:text-gray-900 focus:bg-gray-100 border border-gray-200";
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
return c;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
c =
|
|
68
|
-
"px-1 py-4 text-sm font-
|
|
68
|
+
"px-1 py-4 text-sm font-semibold border-b-2 whitespace-nowrap leading-5 focus:outline-none ";
|
|
69
69
|
if (this.modelValue === currentTab) {
|
|
70
70
|
c =
|
|
71
71
|
c +
|
|
@@ -73,7 +73,7 @@ export default class Tabs extends Vue {
|
|
|
73
73
|
} else {
|
|
74
74
|
c =
|
|
75
75
|
c +
|
|
76
|
-
"border-transparent text-gray-
|
|
76
|
+
"border-transparent text-gray-700 hover:text-gray-900 hover:border-gray-300 focus:text-gray-900 focus:border-gray-300";
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
if (pastFirstTab) c = c + " ml-8";
|
|
@@ -83,9 +83,10 @@ export default class Slideover extends Vue {
|
|
|
83
83
|
@Prop({ type: String, required: true }) description!: string;
|
|
84
84
|
@Prop({ type: Boolean, required: true }) modelValue!: boolean;
|
|
85
85
|
|
|
86
|
-
@Emit()
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
@Emit("close")
|
|
87
|
+
@Emit("update:modelValue")
|
|
88
|
+
close(): boolean {
|
|
89
|
+
return false;
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
</script>
|