sprintify-ui 0.0.196 → 0.0.198

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.
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- class="inline-flex h-4 w-auto items-center justify-center rounded-full px-1.5"
3
+ class="inline-flex w-auto items-center justify-center rounded-full"
4
4
  :class="[sizeClass, colorClass]"
5
5
  >
6
6
  {{ countLabel }}
@@ -22,11 +22,13 @@ const props = defineProps({
22
22
  },
23
23
  size: {
24
24
  default: 'sm',
25
- type: String,
25
+ type: String as PropType<'xs' | 'sm' | 'md'>,
26
26
  },
27
27
  color: {
28
28
  default: 'danger',
29
- type: String as PropType<'danger' | 'primary' | 'dark' | 'light' | 'white'>,
29
+ type: String as PropType<
30
+ 'danger' | 'primary' | 'success' | 'warning' | 'dark' | 'light' | 'white'
31
+ >,
30
32
  },
31
33
  });
32
34
 
@@ -43,21 +45,27 @@ const countLabel = computed((): string => {
43
45
 
44
46
  const sizeClass = computed((): string => {
45
47
  if (props.size == 'xs') {
46
- return 'text-[10px]';
48
+ return 'text-[10px] px-1 h-[14px]';
47
49
  }
48
50
  if (props.size == 'sm') {
49
- return 'text-xs';
51
+ return 'text-xs px-1.5 h-4';
50
52
  }
51
- if (props.size == 'base') {
52
- return 'text-sm';
53
+ if (props.size == 'md') {
54
+ return 'text-sm px-1.5 h-5';
53
55
  }
54
- return 'text-xs';
56
+ return 'text-xs px-1.5 h-4';
55
57
  });
56
58
 
57
59
  const colorClass = computed((): string => {
58
60
  if (props.color == 'danger') {
59
61
  return 'bg-red-500 text-white';
60
62
  }
63
+ if (props.color == 'warning') {
64
+ return 'bg-yellow-400 text-white';
65
+ }
66
+ if (props.color == 'success') {
67
+ return 'bg-green-500 text-white';
68
+ }
61
69
  if (props.color == 'primary') {
62
70
  return 'bg-primary-500 text-white';
63
71
  }
@@ -6,18 +6,15 @@
6
6
  >
7
7
  <template #button="{ open }">
8
8
  <div
9
- class="relative flex items-center rounded-full p-1.5"
10
- :class="[open ? '' : '']"
9
+ class="relative flex items-center rounded-md p-1.5 hover:bg-slate-100"
10
+ :class="[open ? 'bg-slate-100' : '']"
11
11
  @click="onOpen"
12
12
  >
13
- <BaseIcon
14
- icon="heroicons:bell"
15
- class="h-6 w-6"
16
- :class="[dark ? 'text-slate-300' : 'text-slate-600']"
17
- ></BaseIcon>
13
+ <BaseIcon icon="fa-solid:bell" :class="[iconClasses]"></BaseIcon>
18
14
  <BaseCounter
19
15
  v-if="notificationsConfig.items.length"
20
16
  class="absolute top-0 right-0"
17
+ :size="counterSize"
21
18
  :count="notificationsConfig.items.length"
22
19
  ></BaseCounter>
23
20
  </div>
@@ -87,7 +84,7 @@ import { Notification } from '@/types/Notification';
87
84
 
88
85
  const emit = defineEmits(['click', 'open']);
89
86
 
90
- defineProps({
87
+ const props = defineProps({
91
88
  notificationsConfig: {
92
89
  required: true,
93
90
  type: Object as PropType<NotificationsConfig>,
@@ -96,6 +93,10 @@ defineProps({
96
93
  default: false,
97
94
  type: Boolean,
98
95
  },
96
+ size: {
97
+ default: 'md',
98
+ type: String as PropType<'xs' | 'sm' | 'md'>,
99
+ },
99
100
  });
100
101
 
101
102
  const breakpoints = useBreakpoints();
@@ -111,4 +112,34 @@ function onClick(notification: Notification) {
111
112
  function onOpen() {
112
113
  emit('open');
113
114
  }
115
+
116
+ const iconClasses = computed(() => {
117
+ const classList = [''];
118
+
119
+ if (props.dark) {
120
+ classList.push('text-slate-300');
121
+ } else {
122
+ classList.push('text-slate-600');
123
+ }
124
+
125
+ if (props.size == 'xs') {
126
+ classList.push('h-4 w-4');
127
+ } else if (props.size == 'sm') {
128
+ classList.push('h-5 w-5');
129
+ } else {
130
+ classList.push('h-6 w-6');
131
+ }
132
+
133
+ return classList;
134
+ });
135
+
136
+ const counterSize = computed(() => {
137
+ if (props.size == 'xs') {
138
+ return 'xs';
139
+ } else if (props.size == 'sm') {
140
+ return 'xs';
141
+ } else {
142
+ return 'sm';
143
+ }
144
+ });
114
145
  </script>
@@ -90,7 +90,7 @@
90
90
  {{ systemAlert.message }}
91
91
  </BaseSystemAlert>
92
92
 
93
- <div class="flex h-16 bg-white">
93
+ <div class="flex bg-white" :style="{ height: navbarHeight + 'px' }">
94
94
  <button
95
95
  type="button"
96
96
  class="border-r border-slate-200 px-4 text-slate-500 xl:hidden"
@@ -126,7 +126,8 @@
126
126
  :class="[dark ? 'bg-slate-800' : 'bg-white shadow']"
127
127
  >
128
128
  <div
129
- class="flex h-16 flex-shrink-0 items-center px-4"
129
+ class="flex flex-shrink-0 items-center px-4"
130
+ :style="{ height: navbarHeight + 'px' }"
130
131
  :class="[dark ? 'bg-slate-900' : 'bg-white']"
131
132
  >
132
133
  <img class="block h-8 w-auto" :src="logoUrl" :alt="appName" />
@@ -142,7 +143,7 @@
142
143
  </template>
143
144
 
144
145
  <script setup lang="ts">
145
- import { ref } from 'vue';
146
+ import { ref, PropType } from 'vue';
146
147
  import {
147
148
  Dialog,
148
149
  DialogPanel,
@@ -167,6 +168,10 @@ const props = defineProps({
167
168
  default: false,
168
169
  type: Boolean,
169
170
  },
171
+ size: {
172
+ default: 'md',
173
+ type: String as PropType<'xs' | 'sm' | 'md'>,
174
+ },
170
175
  });
171
176
 
172
177
  /**
@@ -196,6 +201,17 @@ function openMenu() {
196
201
  function closeMenu() {
197
202
  showMobileMenu.value = false;
198
203
  }
204
+ const navbarHeight = computed<number>(() => {
205
+ if (props.size === 'xs') {
206
+ return 50;
207
+ }
208
+
209
+ if (props.size === 'sm') {
210
+ return 54;
211
+ }
212
+
213
+ return 64;
214
+ });
199
215
 
200
216
  provide('toggleMenu', toggleMenu);
201
217
  provide('openMenu', openMenu);
@@ -1,5 +1,5 @@
1
1
  import { DateTime } from 'luxon';
2
- import BaseContainer from './BaseContainer.vue';
2
+ import PageDashboard from '../../.storybook/components/PageDashboard.vue';
3
3
  import BaseLayoutSidebarConfigurable from './BaseLayoutSidebarConfigurable.vue';
4
4
 
5
5
  export default {
@@ -24,12 +24,13 @@ export default {
24
24
  {
25
25
  label: 'Dashboard',
26
26
  to: '/',
27
- icon: 'heroicons-home',
27
+ icon: 'heroicons:home-20-solid',
28
28
  },
29
29
  {
30
30
  label: 'Articles',
31
31
  to: '/articles',
32
- icon: 'heroicons:document-text',
32
+ icon: 'heroicons:document-text-solid',
33
+ count: 3134,
33
34
  actions: [
34
35
  {
35
36
  label: 'Articles',
@@ -53,7 +54,7 @@ export default {
53
54
  {
54
55
  label: 'Users',
55
56
  to: '/users',
56
- icon: 'heroicons:users',
57
+ icon: 'heroicons:users-solid',
57
58
  },
58
59
  ],
59
60
  },
@@ -63,12 +64,12 @@ export default {
63
64
  {
64
65
  label: 'Account',
65
66
  to: '/account',
66
- icon: 'heroicons:cog',
67
+ icon: 'heroicons:cog-solid',
67
68
  },
68
69
  {
69
70
  label: 'Logout',
70
71
  action: logout,
71
- icon: 'heroicons:arrow-left-on-rectangle',
72
+ icon: 'heroicons:arrow-left-on-rectangle-solid',
72
73
  },
73
74
  ],
74
75
  },
@@ -77,17 +78,17 @@ export default {
77
78
  {
78
79
  label: 'Dashboard',
79
80
  to: '/',
80
- icon: 'heroicons-home',
81
+ icon: 'heroicons:home-solid',
81
82
  },
82
83
  {
83
84
  label: 'Settings',
84
85
  to: '/account',
85
- icon: 'heroicons:cog',
86
+ icon: 'heroicons:cog-solid',
86
87
  },
87
88
  {
88
89
  label: 'Logout',
89
90
  action: logout,
90
- icon: 'heroicons:arrow-left-on-rectangle',
91
+ icon: 'heroicons:arrow-left-on-rectangle-20-solid',
91
92
  },
92
93
  ],
93
94
  notifications: {
@@ -116,20 +117,16 @@ async function logout() {
116
117
 
117
118
  const Template = (args) => ({
118
119
  components: {
119
- BaseContainer,
120
120
  BaseLayoutSidebarConfigurable,
121
+ PageDashboard,
121
122
  },
122
123
  setup() {
123
124
  return { args };
124
125
  },
125
126
  template: `
126
127
  <BaseLayoutSidebarConfigurable v-bind="args">
127
- <div class="py-16">
128
- <BaseContainer size="3xl">
129
- <p v-for="i in 20" class="mb-1">
130
- Amet occaecat enim pariatur incididunt enim laborum enim. Duis cillum in in excepteur sit excepteur laboris consectetur magna. Commodo proident labore commodo duis veniam do nisi irure ipsum officia excepteur non. Nisi cillum mollit tempor ut.
131
- </p>
132
- </BaseContainer>
128
+ <div class="py-10 bg-slate-50">
129
+ <PageDashboard />
133
130
  </div>
134
131
  </BaseLayoutSidebarConfigurable>
135
132
  `,
@@ -146,3 +143,24 @@ Dark.args = {
146
143
  dark: true,
147
144
  logoUrl: 'https://sprintify.witify.io/img/logo/logo-side-dark.svg',
148
145
  };
146
+
147
+ export const SizeXS = Template.bind({});
148
+ SizeXS.args = {
149
+ size: 'xs',
150
+ dark: true,
151
+ logoUrl: 'https://sprintify.witify.io/img/logo/logo-side-dark.svg',
152
+ };
153
+
154
+ export const SizeSM = Template.bind({});
155
+ SizeSM.args = {
156
+ size: 'sm',
157
+ dark: true,
158
+ logoUrl: 'https://sprintify.witify.io/img/logo/logo-side-dark.svg',
159
+ };
160
+
161
+ export const SizeMD = Template.bind({});
162
+ SizeMD.args = {
163
+ size: 'md',
164
+ dark: true,
165
+ logoUrl: 'https://sprintify.witify.io/img/logo/logo-side-dark.svg',
166
+ };
@@ -1,23 +1,25 @@
1
1
  <template>
2
- <BaseLayoutSidebar :app-name="appName" :logo-url="logoUrl" :dark="dark">
2
+ <BaseLayoutSidebar
3
+ :app-name="appName"
4
+ :logo-url="logoUrl"
5
+ :dark="dark"
6
+ :size="size"
7
+ >
3
8
  <template #menu>
4
9
  <div class="px-3 py-6">
5
10
  <div class="space-y-8">
6
11
  <div v-for="section in actionSections" :key="section.title">
7
- <h2
8
- v-if="section.title"
9
- class="mb-3 pl-3 text-xs font-semibold uppercase tracking-widest"
10
- :class="dark ? 'text-slate-400' : 'text-slate-500'"
11
- >
12
+ <h2 v-if="section.title" class="pl-3" :class="sectionTitleClasses">
12
13
  {{ section.title }}
13
14
  </h2>
14
15
  <div>
15
- <div class="space-y-1">
16
+ <div :class="[size == 'md' ? 'space-y-1' : 'space-y-0.5']">
16
17
  <BaseNavbarSideItem
17
18
  v-for="item in section.actions"
18
19
  :key="item.label"
19
20
  :item="item"
20
21
  :dark="dark"
22
+ :size="size"
21
23
  />
22
24
  </div>
23
25
  </div>
@@ -38,16 +40,27 @@
38
40
  v-if="notifications"
39
41
  :notifications-config="notifications"
40
42
  class="mr-1 sm:mr-2"
43
+ :size="size"
41
44
  @click="onNotificationClick"
42
45
  @open="onNotificationOpen"
43
46
  ></BaseLayoutNotificationDropdown>
44
47
 
45
48
  <!-- Profile dropdown -->
46
- <div class="relative ml-3 mr-3">
47
- <BaseMenu :items="userMenu">
49
+ <div
50
+ class="relative mr-2"
51
+ :class="{
52
+ 'ml-2': size == 'md',
53
+ 'ml-1': size == 'sm',
54
+ 'ml-0': size == 'xs',
55
+ }"
56
+ >
57
+ <BaseMenu :items="userMenu" :size="size == 'xs' ? 'xs' : 'sm'">
48
58
  <template #button="{ open }">
49
- <div class="flex" :class="[open ? '' : '']">
50
- <BaseAvatar :user="user" show-details />
59
+ <div
60
+ class="flex rounded-md p-1.5 hover:bg-slate-100"
61
+ :class="[open ? 'bg-slate-100' : '']"
62
+ >
63
+ <BaseAvatar :user="user" :size="size" show-details />
51
64
  </div>
52
65
  </template>
53
66
  </BaseMenu>
@@ -103,6 +116,10 @@ const props = defineProps({
103
116
  default: false,
104
117
  type: Boolean,
105
118
  },
119
+ size: {
120
+ default: 'md',
121
+ type: String as PropType<'xs' | 'sm' | 'md'>,
122
+ },
106
123
  });
107
124
 
108
125
  const actionSections = computed((): ActionSection[] => {
@@ -120,6 +137,26 @@ const actionSections = computed((): ActionSection[] => {
120
137
  ];
121
138
  });
122
139
 
140
+ const sectionTitleClasses = computed((): string[] => {
141
+ const classList = ['mb-3 font-semibold uppercase tracking-widest'];
142
+
143
+ if (props.dark) {
144
+ classList.push('text-gray-400');
145
+ } else {
146
+ classList.push('text-gray-500');
147
+ }
148
+
149
+ if (props.size === 'xs') {
150
+ classList.push('text-[10px]');
151
+ } else if (props.size === 'sm') {
152
+ classList.push('text-[11px]');
153
+ } else if (props.size === 'md') {
154
+ classList.push('text-xs');
155
+ }
156
+
157
+ return classList;
158
+ });
159
+
123
160
  function onNotificationClick(notification: Notification) {
124
161
  emit('notification:click', notification);
125
162
  }
@@ -5,11 +5,7 @@
5
5
  <span :class="textSize">{{ label }}</span>
6
6
  </div>
7
7
  <div v-if="count" class="relative -top-px ml-[5px]">
8
- <BaseCounter
9
- :count="count"
10
- :max-digit="2"
11
- :color="active ? 'white' : 'primary'"
12
- />
8
+ <BaseCounter :count="count" :max-digit="2" :color="color" />
13
9
  </div>
14
10
  </div>
15
11
  </template>
@@ -79,11 +75,12 @@ const buttonClasses = computed((): string => {
79
75
  let baseClasses =
80
76
  'flex items-center justify-between w-full leading-tight py-2 text-sm text-left rounded';
81
77
 
78
+ baseClasses += ' ' + textColor.value;
79
+
82
80
  if (!props.active) {
83
81
  baseClasses += ' bg-white';
84
- baseClasses += ' ' + textColor.value;
85
82
  } else {
86
- baseClasses += ' bg-primary-600 text-white';
83
+ baseClasses += ' bg-slate-100';
87
84
  }
88
85
 
89
86
  if (props.icon) {
@@ -100,8 +97,6 @@ const iconClasses = computed((): string => {
100
97
 
101
98
  if (!props.active) {
102
99
  baseClasses += ' opacity-70 ' + textColor.value;
103
- } else {
104
- baseClasses += ' text-primary-100';
105
100
  }
106
101
 
107
102
  return baseClasses;
@@ -2,7 +2,7 @@
2
2
  <div :class="classes">
3
3
  <div class="group flex grow items-center">
4
4
  <BaseIcon v-if="icon" :icon="icon" :class="iconClasses" />
5
- {{ label }}
5
+ <span :class="[sizeClasses]">{{ label }}</span>
6
6
  </div>
7
7
  <div v-if="count" class="relative -top-px ml-[5px]">
8
8
  <BaseCounter :count="count" :max-digit="2" :color="'primary'" />
@@ -12,6 +12,7 @@
12
12
 
13
13
  <script lang="ts" setup>
14
14
  import { Icon as BaseIcon } from '@iconify/vue';
15
+ import { PropType } from 'vue';
15
16
  import BaseCounter from './BaseCounter.vue';
16
17
 
17
18
  const props = defineProps({
@@ -35,6 +36,10 @@ const props = defineProps({
35
36
  default: false,
36
37
  type: Boolean,
37
38
  },
39
+ size: {
40
+ default: 'md',
41
+ type: String as PropType<'sm' | 'md'>,
42
+ },
38
43
  });
39
44
 
40
45
  const classes = computed(() => {
@@ -42,12 +47,6 @@ const classes = computed(() => {
42
47
  'text-left border-b-2 px-2 flex items-center text-base font-medium w-full',
43
48
  ];
44
49
 
45
- if (props.dark) {
46
- classList.push('');
47
- } else {
48
- classList.push('');
49
- }
50
-
51
50
  if (props.active) {
52
51
  if (props.dark) {
53
52
  classList.push('border-white text-white');
@@ -77,4 +76,11 @@ const iconClasses = computed((): string[] => {
77
76
  }
78
77
  return classList;
79
78
  });
79
+
80
+ const sizeClasses = computed(() => {
81
+ if (props.size == 'sm') {
82
+ return 'text-sm';
83
+ }
84
+ return 'text-base';
85
+ });
80
86
  </script>
@@ -15,25 +15,21 @@
15
15
  :active="active"
16
16
  :count="item.count"
17
17
  :dark="dark"
18
+ :size="size"
18
19
  />
19
20
  </template>
20
21
  </BaseActionItem>
21
22
 
22
23
  <div
23
24
  v-if="showSubActions && item.actions && item.actions.length"
24
- class="ml-10 mt-1.5 mb-3"
25
+ class="mt-2 mb-3"
25
26
  >
26
- <div v-for="subItem in item.actions" :key="subItem.label" class="mb-1">
27
+ <div v-for="subItem in item.actions" :key="subItem.label">
27
28
  <BaseActionItem
28
29
  :to="subItem.to"
29
30
  :href="subItem.href"
30
31
  :action="subItem.action"
31
- :class="[
32
- 'flex w-full',
33
- dark
34
- ? 'text-slate-300 hover:text-white'
35
- : 'text-slate-900 hover:text-slate-600',
36
- ]"
32
+ :class="subItemClasses"
37
33
  >
38
34
  {{ subItem.label }}
39
35
  </BaseActionItem>
@@ -61,6 +57,10 @@ const props = defineProps({
61
57
  default: 'toggle',
62
58
  type: String as PropType<'toggle' | 'always'>,
63
59
  },
60
+ size: {
61
+ default: 'md',
62
+ type: String as PropType<'xs' | 'sm' | 'md'>,
63
+ },
64
64
  });
65
65
 
66
66
  const emit = defineEmits(['click']);
@@ -88,4 +88,24 @@ const showSubActions = computed((): boolean => {
88
88
  }
89
89
  return routeActive.value;
90
90
  });
91
+
92
+ const subItemClasses = computed((): string[] => {
93
+ const classList = ['flex w-full font-normal'];
94
+
95
+ if (props.dark) {
96
+ classList.push('text-slate-300 hover:text-white');
97
+ } else {
98
+ classList.push('text-slate-900 hover:text-slate-600');
99
+ }
100
+
101
+ if (props.size == 'xs') {
102
+ classList.push('pl-[33.5px] text-[13px] mb-1');
103
+ } else if (props.size == 'sm') {
104
+ classList.push('pl-[36px] text-sm mb-1.5');
105
+ } else {
106
+ classList.push('pl-[40px] text-base mb-1');
107
+ }
108
+
109
+ return classList;
110
+ });
91
111
  </script>
@@ -2,16 +2,22 @@
2
2
  <div :class="classes">
3
3
  <div class="group flex grow items-center">
4
4
  <BaseIcon v-if="icon" :icon="icon" :class="iconClasses" />
5
- {{ label }}
5
+ <span>{{ label }}</span>
6
6
  </div>
7
7
  <div v-if="count" class="relative -top-px ml-[5px]">
8
- <BaseCounter :count="count" :max-digit="2" :color="'primary'" />
8
+ <BaseCounter
9
+ :size="size"
10
+ :count="count"
11
+ :max-digit="2"
12
+ :color="'primary'"
13
+ />
9
14
  </div>
10
15
  </div>
11
16
  </template>
12
17
 
13
18
  <script lang="ts" setup>
14
19
  import { Icon as BaseIcon } from '@iconify/vue';
20
+ import { PropType } from 'vue';
15
21
  import BaseCounter from './BaseCounter.vue';
16
22
 
17
23
  const props = defineProps({
@@ -35,24 +41,20 @@ const props = defineProps({
35
41
  default: false,
36
42
  type: Boolean,
37
43
  },
44
+ size: {
45
+ default: 'md',
46
+ type: String as PropType<'xs' | 'sm' | 'md'>,
47
+ },
38
48
  });
39
49
 
40
50
  const classes = computed(() => {
41
- const classList = [
42
- 'text-left px-3 py-2 rounded-md flex text-base font-medium w-full',
43
- ];
44
-
45
- if (props.dark) {
46
- classList.push('');
47
- } else {
48
- classList.push('');
49
- }
51
+ const classList = ['text-left rounded-md flex w-full'];
50
52
 
51
53
  if (props.active) {
52
54
  if (props.dark) {
53
55
  classList.push('bg-slate-700 text-white');
54
56
  } else {
55
- classList.push('bg-slate-100 text-slate-900');
57
+ classList.push('bg-slate-100 text-primary-700');
56
58
  }
57
59
  } else {
58
60
  if (props.dark) {
@@ -62,16 +64,41 @@ const classes = computed(() => {
62
64
  }
63
65
  }
64
66
 
67
+ if (props.size == 'xs') {
68
+ classList.push('text-[13px] px-2.5 py-1 font-medium');
69
+ }
70
+
71
+ if (props.size == 'sm') {
72
+ classList.push('text-sm px-3 py-1.5 font-medium');
73
+ }
74
+
75
+ if (props.size == 'md') {
76
+ classList.push('text-base px-3 py-2 font-medium');
77
+ }
78
+
65
79
  return classList;
66
80
  });
67
81
 
68
82
  const iconClasses = computed((): string[] => {
69
- const classList = ['w-5 h-5 shrink-0 mr-2 leading-none inline-block'];
83
+ const classList = ['shrink-0 leading-none inline-block'];
70
84
  if (props.active) {
71
85
  classList.push('opacity-100');
72
86
  } else {
73
87
  classList.push('opacity-70 group-hover:opacity-100');
74
88
  }
89
+
90
+ if (props.size == 'xs') {
91
+ classList.push('w-3.5 h-3.5 mr-2');
92
+ }
93
+
94
+ if (props.size == 'sm') {
95
+ classList.push('w-4 h-4 mr-2');
96
+ }
97
+
98
+ if (props.size == 'md') {
99
+ classList.push('w-5 h-5 mr-2');
100
+ }
101
+
75
102
  return classList;
76
103
  });
77
104
  </script>
@@ -7,7 +7,7 @@
7
7
  >
8
8
  <a
9
9
  :href="href"
10
- class="group relative inline-block rounded-t-lg font-medium"
10
+ class="group relative inline-block rounded-t-lg"
11
11
  :class="[
12
12
  tabIsActive(isActive, isExactActive)
13
13
  ? 'active text-primary-600'
@@ -72,13 +72,13 @@ function tabIsActive(isActive: boolean, isExactActive: boolean) {
72
72
  const sizeClass = computed(() => {
73
73
  switch (size.value) {
74
74
  case 'xs':
75
- return 'text-xs px-1.5 py-2';
75
+ return 'text-xs px-1 py-2 font-normal';
76
76
  case 'sm':
77
- return 'text-sm px-1.5 py-2';
77
+ return 'text-sm px-1 py-2.5 font-normal';
78
78
  case 'md':
79
- return 'text-base px-2 py-3';
79
+ return 'text-sm px-1 py-4 font-normal';
80
80
  case 'lg':
81
- return 'text-lg px-3 py-4';
81
+ return 'text-base px-1 py-4 font-normal';
82
82
  }
83
83
  });
84
84
  </script>