@visualizevalue/mint-app-base 0.0.7 → 0.1.1

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.
Files changed (72) hide show
  1. package/.env.example +1 -1
  2. package/app/assets/styles/animation.css +1 -9
  3. package/app/assets/styles/base.css +13 -18
  4. package/app/assets/styles/forms.css +19 -55
  5. package/app/assets/styles/index.css +24 -6
  6. package/app/assets/styles/normalize.css +8 -3
  7. package/app/assets/styles/prose.css +3 -129
  8. package/app/assets/styles/variables/animations.css +8 -0
  9. package/app/assets/styles/variables/borders.css +14 -0
  10. package/app/assets/styles/variables/colors.css +20 -0
  11. package/app/assets/styles/{theme.css → variables/components.css} +8 -2
  12. package/app/assets/styles/variables/effects.css +6 -0
  13. package/app/assets/styles/variables/fonts.css +26 -0
  14. package/app/assets/styles/variables/layout.css +9 -0
  15. package/app/assets/styles/variables/sizes.css +23 -0
  16. package/app/assets/styles/variables/ui.css +17 -0
  17. package/app/assets/styles/variables.css +16 -192
  18. package/app/assets/styles/web3-modals.css +3 -8
  19. package/app/components/Account.client.vue +1 -1
  20. package/app/components/Actions.vue +2 -3
  21. package/app/components/AppHeader.vue +2 -25
  22. package/app/components/Breadcrumbs.vue +1 -1
  23. package/app/components/Button/AddCollection.vue +10 -0
  24. package/app/components/Button/EditProfile.vue +10 -0
  25. package/app/components/Button/Profile/Discord.vue +10 -0
  26. package/app/components/Button/Profile/Email.vue +10 -0
  27. package/app/components/Button/Profile/Github.vue +11 -0
  28. package/app/components/Button/Profile/Twitter.vue +10 -0
  29. package/app/components/Button/Profile/Website.vue +10 -0
  30. package/app/components/Button.vue +17 -36
  31. package/app/components/CheckSpinner.vue +0 -18
  32. package/app/components/Collection/Intro.vue +9 -6
  33. package/app/components/Collection/OverviewCard.vue +13 -7
  34. package/app/components/Collection/Withdraw.client.vue +2 -1
  35. package/app/components/DialogFrame.vue +4 -7
  36. package/app/components/Form/Group.vue +19 -4
  37. package/app/components/Form/SelectFile.vue +1 -1
  38. package/app/components/Icon.vue +21 -17
  39. package/app/components/Image.client.vue +3 -7
  40. package/app/components/ImagePreview.vue +8 -0
  41. package/app/components/Loading.vue +2 -38
  42. package/app/components/MintGasPricePopover.client.vue +2 -2
  43. package/app/components/MintToken.vue +1 -1
  44. package/app/components/MintTokenBar.vue +1 -0
  45. package/app/components/Modal.vue +3 -2
  46. package/app/components/Popover.client.vue +3 -23
  47. package/app/components/Profile/Header.client.vue +6 -35
  48. package/app/components/Token/Detail.client.vue +19 -10
  49. package/app/components/Token/MintTimeline.client.vue +14 -43
  50. package/app/components/Token/MintTimelineItem.vue +50 -13
  51. package/app/components/Token/OverviewCard.vue +10 -17
  52. package/app/components/TransactionFlow.vue +6 -11
  53. package/app/layouts/default.vue +2 -14
  54. package/app/pages/[id]/[collection]/[tokenId]/index.vue +1 -1
  55. package/app/pages/[id]/[collection]/index.vue +1 -1
  56. package/app/pages/[id]/[collection]/mint.vue +4 -4
  57. package/app/pages/[id]/create.vue +49 -49
  58. package/app/pages/[id]/index.vue +1 -6
  59. package/app/pages/profile/[address]/index.vue +1 -4
  60. package/app/plugins/2.wagmi.ts +2 -2
  61. package/package.json +2 -1
  62. package/app/assets/styles/scroll.css +0 -13
  63. package/app/assets/styles/text.css +0 -14
  64. package/app/assets/styles/utils.css +0 -24
  65. package/app/components/Avatar.vue +0 -61
  66. package/app/components/CountDown.vue +0 -153
  67. package/app/components/IconLink.vue +0 -29
  68. package/app/components/Navbar.client.vue +0 -86
  69. package/app/components/Page/FrameSM.vue +0 -33
  70. package/app/components/QueryDialog.vue +0 -38
  71. package/app/components/ToggleDarkMode.client.vue +0 -58
  72. package/app/components/Visual/ImagePreview.vue +0 -8
@@ -1,193 +1,17 @@
1
- :root {
2
- /* GRAYS */
3
- --white: rgb(255,255,255);
4
- --gray-50: rgb(250,250,250);
5
- --gray-100: rgb(245,245,245);
6
- --gray-200: rgb(229,229,229);
7
- --gray-300: rgb(212,212,212);
8
- --gray-400: rgb(163,163,163);
9
- --gray-500: rgb(115,115,115);
10
- --gray-600: rgb(82,82,82);
11
- --gray-700: rgb(64,64,64);
12
- --gray-800: rgb(38,38,38);
13
- --gray-900: rgb(19,19,19);
14
- --gray-950: rgb(10,10,10);
15
- --black: rgb(0, 0, 0);
16
-
17
- /* SEMI */
18
- --white-semi: rgba(255,255,255, 0.7);
19
- --gray-50-semi: rgba(250,250,250, 0.7);
20
- --gray-100-semi: rgba(245,245,245, 0.7);
21
- --gray-200-semi: rgba(229,229,229, 0.7);
22
- --gray-300-semi: rgba(212,212,212, 0.7);
23
- --gray-400-semi: rgba(163,163,163, 0.7);
24
- --gray-500-semi: rgba(115,115,115, 0.7);
25
- --gray-600-semi: rgba(82,82,82, 0.7);
26
- --gray-700-semi: rgba(64,64,64, 0.7);
27
- --gray-800-semi: rgba(38,38,38, 0.7);
28
- --gray-900-semi: rgba(23,23,23, 0.7);
29
- --gray-950-semi: rgba(10,10,10, 0.7);
30
- --black-semi: rgba(0, 0, 0, 0.7);
31
-
32
- /* COLORS */
33
- --red: #EF4444;
34
- --green: #94E337;
35
-
36
- /* PRESET COLORS */
37
- --error: var(--red);
38
- --success: var(--green);
39
-
40
- /* SIZES */
41
- --100vh: 100dvh;
42
- --size-0: 0.125rem;
43
- --size-1: 0.25rem;
44
- --size-2: 0.5rem;
45
- --size-3: 0.75rem;
46
- --size-4: 1rem;
47
- --size-5: 1.25rem;
48
- --size-6: 1.5rem;
49
- --size-7: 2rem;
50
- --size-8: 3rem;
51
- --size-9: 4.5rem;
52
- --size-10: 6rem;
53
-
54
- --spacer-xs: var(--size-0);
55
- --spacer-sm: var(--size-2);
56
- --spacer: var(--size-4);
57
- --spacer-lg: var(--size-7);
58
- --spacer-xl: var(--size-9);
59
-
60
- --border-radius: 0;
61
-
62
- /* FONTS */
63
- --font-family-main: serif;
64
- --font-family-prose: var(--font-family-main);
65
- --font-family-ui: var(--font-family-main);
66
-
67
- --font-base: 13px;
68
- --font-base: 15px;
69
- --font-xs: calc(var(--font-base) * 0.8);
70
- --font-sm: calc(var(--font-base) * 0.8);
71
- --font-lg: min(calc(var(--font-base) + 1vw * 2), calc(var(--font-base) * 1.25));
72
- --font-xl: min(calc(var(--font-lg) + 1vw * 2), calc(var(--font-lg) * 1.25));
73
- --font-title: min(calc(var(--size-4) + 1vw * 2), var(--size-7));
74
- --font-display: min(calc(var(--size-6) + 1vw * 2), var(--size-8));
75
- --font-weight-light: 300;
76
- --font-weight: normal;
77
- --font-weight-bold: bold;
78
- --rem: 16px;
79
-
80
- --letter-spacing-sm: -0.025em;
81
- --letter-spacing: 0.025em;
82
- --letter-spacing-md: 0.05em;
83
- --letter-spacing-lg: 0.1em;
84
-
85
- --line-height-sm: 105%;
86
- --line-height: 100%;
87
- --line-height-md: 120%;
88
- --line-height-lg: 160%;
89
-
90
- --text-transform: none;
91
-
92
- /* ANIMATION */
93
- --speed-fast: 0.15s;
94
- --speed: 0.3s;
95
- --speed-slow: 0.75s;
96
-
97
- /* COMPONENTS */
98
- --dialog-width: 27rem;
99
- --content-width: 40rem;
100
- --content-width-lg: 72rem;
101
- --navbar-height: calc(var(--size-8) + var(--size-4));
102
- --navbar-width: calc(var(--size-8) + var(--size-4));
103
-
104
- /* BORDERS */
105
- --border-color: var(--gray-z-2);
106
- --border-color-light: var(--gray-z-4);
107
- --border-color-dark: var(--gray-z-1);
108
- --border: 1px solid var(--border-color);
109
- --border-dark: 1px solid var(--border-color-dark);
110
- --border-shadow: 0 0 0 1px var(--border-color);
111
-
112
- /* SHADOWS */
113
- --shadow:
114
- 0 var(--size-0) var(--size-2) var(--gray-z-1-semi),
115
- 0 var(--size-2) var(--size-7) calc(-1 * var(--size-5)) var(--gray-z-3-semi);
116
-
117
- /* BACKGROUNDS */
118
- --blur: blur(var(--size-1));
119
- }
120
-
121
- /* DARK */
122
- :root {
123
- --background: var(--black);
124
- --gray-z-0: var(--gray-950);
125
- --gray-z-1: var(--gray-900);
126
- --gray-z-2: var(--gray-800);
127
- --gray-z-3: var(--gray-700);
128
- --gray-z-4: var(--gray-600);
129
- --gray-z-5: var(--gray-500);
130
- --gray-z-6: var(--gray-400);
131
- --gray-z-7: var(--gray-300);
132
- --gray-z-8: var(--gray-200);
133
- --gray-z-9: var(--gray-100);
134
- --gray-z-10: var(--gray-50);
135
- --color: var(--white);
136
- --muted: var(--gray-z-6);
137
- --muted-light: var(--gray-z-4);
138
-
139
- --background-0: rgba(0, 0, 0, 0);
140
- --background-semi: var(--black-semi);
141
- --gray-z-0-semi: var(--gray-950-semi);
142
- --gray-z-1-semi: var(--gray-900-semi);
143
- --gray-z-2-semi: var(--gray-800-semi);
144
- --gray-z-3-semi: var(--gray-700-semi);
145
- --gray-z-4-semi: var(--gray-600-semi);
146
- --gray-z-5-semi: var(--gray-500-semi);
147
- --gray-z-6-semi: var(--gray-400-semi);
148
- --gray-z-7-semi: var(--gray-300-semi);
149
- --gray-z-8-semi: var(--gray-200-semi);
150
- --gray-z-9-semi: var(--gray-100-semi);
151
- --gray-z-10-semi: var(--gray-50-semi);
152
- --color-semi: var(--white-semi);
153
- }
154
-
155
- /* LIGHT */
156
- .lightmode {
157
- --background: var(--white);
158
- --gray-z-0: var(--gray-50);
159
- --gray-z-1: var(--gray-100);
160
- --gray-z-2: var(--gray-200);
161
- --gray-z-3: var(--gray-300);
162
- --gray-z-4: var(--gray-400);
163
- --gray-z-5: var(--gray-500);
164
- --gray-z-6: var(--gray-600);
165
- --gray-z-7: var(--gray-700);
166
- --gray-z-8: var(--gray-800);
167
- --gray-z-9: var(--gray-900);
168
- --gray-z-10: var(--gray-950);
169
- --color: var(--black);
170
-
171
- --background-0: rgba(255, 255, 255, 0);
172
- --background-semi: var(--white-semi);
173
- --gray-z-0-semi: var(--gray-50-semi);
174
- --gray-z-1-semi: var(--gray-100-semi);
175
- --gray-z-2-semi: var(--gray-200-semi);
176
- --gray-z-3-semi: var(--gray-300-semi);
177
- --gray-z-4-semi: var(--gray-400-semi);
178
- --gray-z-5-semi: var(--gray-500-semi);
179
- --gray-z-6-semi: var(--gray-600-semi);
180
- --gray-z-7-semi: var(--gray-700-semi);
181
- --gray-z-8-semi: var(--gray-800-semi);
182
- --gray-z-9-semi: var(--gray-900-semi);
183
- --gray-z-10-semi: var(--gray-950-semi);
184
- --color-semi: var(--black-semi);
185
- }
186
-
187
- /* SCALING */
188
- @media (--md) {
189
- :root {
190
- --font-sm: calc(var(--size-3) + var(--size-0));
191
- }
192
- }
1
+ /*
2
+ * Here we import the individual variable files.
3
+ * They are thematically grouped. Note that the order matters,
4
+ * since some files depend on others.
5
+ */
6
+
7
+ @import "./variables/colors.css";
8
+ @import "./variables/sizes.css";
9
+ @import "./variables/fonts.css";
10
+ @import "./variables/borders.css";
11
+ @import "./variables/effects.css";
12
+ @import "./variables/animations.css";
13
+
14
+ @import "./variables/ui.css";
15
+ @import "./variables/components.css";
16
+ @import "./variables/layout.css";
193
17
 
@@ -1,6 +1,6 @@
1
1
  wcm-modal {
2
2
  --wcm-z-index: 9999;
3
- --wcm-overlay-background-color: var(--gray-z-1-semi);
3
+ --wcm-overlay-background-color: var(--backdrop-background-color);
4
4
  --wcm-overlay-backdrop-filter: var(--blur);
5
5
  }
6
6
 
@@ -12,15 +12,10 @@ wcm-modal {
12
12
  }
13
13
 
14
14
  /* Metamask */
15
- .select-modal {
15
+ .install-model {
16
16
  > div:first-child {
17
17
  opacity: 1 !important;
18
- background: linear-gradient(
19
- 45deg,
20
- var(--gray-z-0-semi),
21
- var(--gray-z-1-semi),
22
- var(--gray-z-2-semi)
23
- ) !important;
18
+ background: var(--backdrop-background-color) !important;
24
19
  backdrop-filter: var(--blur) !important;
25
20
  }
26
21
  }
@@ -11,7 +11,7 @@ const props = defineProps(['address'])
11
11
 
12
12
  const address = computed(() => props.address?.value || props.address)
13
13
 
14
- const { data: ens } = await useEnsName({
14
+ const { data: ens } = useEnsName({
15
15
  address,
16
16
  chainId: 1,
17
17
  })
@@ -6,13 +6,12 @@
6
6
 
7
7
  <style scoped>
8
8
  menu {
9
- width: 100%;
10
9
  margin: 0;
11
10
  padding: 0;
12
11
  border: 0;
13
12
  display: flex;
14
- gap: var(--spacer);
15
- justify-content: flex-end;
13
+ flex-wrap: wrap;
14
+ gap: var(--spacer-sm);
16
15
 
17
16
  &:empty {
18
17
  display: none;
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <header :style="{ borderColor: y > 10 ? 'var(--border-color)' : 'transparent' }">
2
+ <header>
3
3
  <ClientOnly>
4
4
  <Breadcrumbs :items="breadcrumbs" />
5
5
 
@@ -15,7 +15,6 @@
15
15
 
16
16
  <script setup>
17
17
  import { useAccount } from '@wagmi/vue'
18
- import { useWindowScroll } from '@vueuse/core'
19
18
 
20
19
  const { isConnected, address } = useAccount()
21
20
  const appBreadcumbs = useAppBreadcrumb()
@@ -34,18 +33,11 @@ const breadcrumbs = computed(() => {
34
33
 
35
34
  return all
36
35
  })
37
-
38
- const { y } = useWindowScroll()
39
36
  </script>
40
37
 
41
38
  <style scoped>
42
39
  header {
43
40
  height: var(--navbar-height);
44
- position: fixed;
45
- z-index: 999;
46
- top: 0;
47
- left: 0;
48
- right: 0;
49
41
  display: flex;
50
42
  align-items: center;
51
43
  justify-content: space-between;
@@ -79,21 +71,6 @@ header {
79
71
  display: block;
80
72
  }
81
73
  }
82
-
83
- :deep(> .button:last-child) {
84
- margin-right: calc(-1 * var(--size-3));
85
- }
86
-
87
- &:has(+ main > .frame.full) {
88
- border-color: var(--border-color) !important;
89
- }
90
- }
91
-
92
- /* COLORS */
93
- header {
94
- background: var(--background-semi);
95
- backdrop-filter: blur(var(--size-1));
96
- border-bottom: var(--border);
97
- border-color: transparent;
98
74
  }
99
75
  </style>
76
+
@@ -44,7 +44,7 @@ defineProps({
44
44
 
45
45
  > span:not(:last-child):after {
46
46
  content: '/';
47
- color: var(--muted-light);
47
+ color: var(--);
48
48
  margin-left: var(--spacer-sm);
49
49
  }
50
50
  }
@@ -0,0 +1,10 @@
1
+ <template>
2
+ <Button :to="{ name: `id-create`, params: { id } }" class="small">
3
+ <Icon type="add"/>
4
+ <span>Collection</span>
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['id'])
10
+ </script>
@@ -0,0 +1,10 @@
1
+ <template>
2
+ <Button :to="`https://app.ens.domains/${address}`" class="small">
3
+ <Icon type="edit" />
4
+ <span>Edit Profile</span>
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['address'])
10
+ </script>
@@ -0,0 +1,10 @@
1
+ <template>
2
+ <Button v-if="validateURI(profile.url)" :to="validateURI(profile.url)" class="small">
3
+ <Icon type="website" />
4
+ {{ getMainDomain(profile.url) }}
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['profile'])
10
+ </script>
@@ -0,0 +1,10 @@
1
+ <template>
2
+ <Button v-if="profile.email" :to="`mailto:${profile.email}`" class="small">
3
+ <Icon type="email" />
4
+ <span>{{ profile.email }}</span>
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['profile'])
10
+ </script>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <Button v-if="profile.github" :to="`https://github.com/${profile.github}`" class="small">
3
+ <Icon type="github" />
4
+ <span>{{ profile.github }}</span>
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['profile'])
10
+ </script>
11
+
@@ -0,0 +1,10 @@
1
+ <template>
2
+ <Button v-if="profile.twitter" :to="`https://x.com/${profile.twitter}`" class="small">
3
+ <Icon type="twitter" />
4
+ <span>{{ profile.twitter }}</span>
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['profile'])
10
+ </script>
@@ -0,0 +1,10 @@
1
+ <template>
2
+ <Button v-if="validateURI(profile.url)" :to="validateURI(profile.url)" class="small">
3
+ <Icon type="website" />
4
+ <span>{{ getMainDomain(profile.url) }}</span>
5
+ </Button>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps(['profile'])
10
+ </script>
@@ -16,18 +16,21 @@ defineProps({
16
16
 
17
17
  <style>
18
18
  .button {
19
+ position: relative;
19
20
  min-width: fit-content;
20
21
  width: fit-content;
21
- padding: var(--size-2) var(--size-4);
22
- background: var(--button-background);
23
- border: var(--button-border);
24
- border-radius: var(--button-border-radius);
25
- position: relative;
22
+
26
23
  display: inline-flex;
27
- gap: var(--size-2);
28
24
  justify-content: center;
29
25
  align-items: center;
30
- letter-spacing: var(--letter-spacing);
26
+ gap: var(--ui-padding-x);
27
+ letter-spacing: var(--ui-letter-spacing);
28
+ line-height: var(--ui-line-height);
29
+
30
+ background: var(--button-background);
31
+ padding: var(--ui-padding-y) var(--ui-padding-x);
32
+ border: var(--button-border);
33
+ border-radius: var(--button-border-radius);
31
34
 
32
35
  &.non-interactive,
33
36
  &[disabled]:not([disabled="false"]) {
@@ -43,53 +46,31 @@ defineProps({
43
46
 
44
47
  > span {
45
48
  display: flex;
46
- gap: var(--size-2);
49
+ gap: var(--ui-padding-x);
50
+ line-height: var(--ui-line-height);
47
51
  justify-content: center;
48
52
  text-align: center;
49
53
  align-items: center;
50
54
  width: 100%;
51
55
  height: 100%;
52
-
53
- .icon {
54
- width: var(--size-4);
55
- height: var(--size-4);
56
- }
57
- }
58
-
59
- &.left {
60
- justify-content: flex-start;
61
- text-align: left;
62
- }
63
-
64
- &.block {
65
- width: 100%;
66
56
  }
67
57
 
68
- &.small {
69
- padding: calc(var(--size-1) + var(--size-0)) var(--size-3);
58
+ &.small,
59
+ &.small > * {
70
60
  font-size: var(--font-sm);
71
61
  min-height: 0;
72
-
73
- > span {
74
- .icon {
75
- width: var(--size-3);
76
- height: var(--size-3);
77
- }
78
- }
62
+ gap: calc(var(--ui-padding-x) / 2);
79
63
  }
80
64
 
81
65
  &.link {
82
66
  display: inline-flex;
83
67
  align-self: baseline;
84
68
  align-items: baseline;
85
- gap: var(--size-0);
86
69
  height: inherit;
87
- min-height: 0;
88
- /* margin: 0 var(--spacer-sm) !important; */
89
70
  margin: 0 !important;
90
- padding: 0 var(--size-0) !important;
71
+ padding-top: 0;
72
+ padding-bottom: 0;
91
73
  line-height: inherit;
92
- border: 0;
93
74
 
94
75
  .icon {
95
76
  align-self: center;
@@ -5,15 +5,6 @@
5
5
  </svg>
6
6
  </template>
7
7
 
8
- <script setup>
9
- const { fill } = defineProps({
10
- fill: {
11
- type: String,
12
- default: 'currentColor',
13
- },
14
- })
15
- </script>
16
-
17
8
  <style scoped>
18
9
  svg {
19
10
  height: var(--size-5);
@@ -27,13 +18,4 @@ svg {
27
18
  transform-origin: center;
28
19
  }
29
20
  }
30
-
31
- @keyframes spin {
32
- from {
33
- transform: rotate(0deg);
34
- }
35
- to {
36
- transform: rotate(360deg);
37
- }
38
- }
39
21
  </style>
@@ -5,14 +5,14 @@
5
5
  </figure>
6
6
  <div class="text">
7
7
  <div>
8
- <h1>{{ collection.name }} <small>({{ collection.symbol }})</small></h1>
9
- <p v-if="collection.description" class="muted-light">
8
+ <h1>{{ collection.name || 'Unnamed Collection' }} <small v-if="collection.symbol">({{ collection.symbol }})</small></h1>
9
+ <p v-if="collection.description">
10
10
  <ExpandableText :text="collection.description" />
11
11
  </p>
12
12
  </div>
13
13
 
14
- <div>
15
- <p v-if="id" class="muted-light">
14
+ <div v-if="id">
15
+ <p>
16
16
  <span>
17
17
  By <NuxtLink :to="{ name: 'id', params: { id } }">{{ store.displayName(id) }}</NuxtLink>
18
18
  </span>
@@ -31,7 +31,10 @@
31
31
  :to="{ name: 'id-collection-mint', params: { id, collection: collection.address } }"
32
32
  id="mint-new"
33
33
  class="small"
34
- >Mint New</Button>
34
+ >
35
+ <Icon type="add" />
36
+ <span>Mint New</span>
37
+ </Button>
35
38
  </menu>
36
39
  </div>
37
40
  </header>
@@ -87,7 +90,7 @@ header.collection-intro {
87
90
 
88
91
  h1 {
89
92
  small {
90
- color: var(--muted-light);
93
+ color: var(--);
91
94
  font-size: var(--font-base);
92
95
  }
93
96
  }
@@ -1,16 +1,21 @@
1
1
  <template>
2
2
  <article class="collection-overview-card">
3
3
  <Image v-if="collection.image" :src="collection.image" :alt="collection.name" />
4
+
4
5
  <div class="text">
5
- <div>
6
- <h1>{{ collection.name }} <small>({{ collection.symbol }})</small></h1>
7
- <p v-if="collection.description" class="muted-light">{{ shortDescription }}</p>
6
+ <div v-if="collection.name || collection.symbol || collection.description">
7
+ <h1 v-if="collection.name || collection.symbol">
8
+ <span>{{ collection.name }}</span>
9
+ <small v-if="collection.symbol">({{ collection.symbol }})</small>
10
+ </h1>
11
+ <p v-if="collection.description">{{ shortDescription }}</p>
8
12
  </div>
9
13
 
10
- <div>
14
+ <div class="details">
11
15
  <p>{{ collection.latestTokenId }} {{ pluralize('token', Number(collection.latestTokenId)) }} · Created at Block {{ collection.initBlock }}</p>
12
16
  </div>
13
17
  </div>
18
+
14
19
  <CardLink
15
20
  :to="{ name: 'id-collection', params: { id: collection.owner, collection: collection.address } }"
16
21
  :title="`View ${collection.name}`"
@@ -38,6 +43,7 @@ article.collection-overview-card {
38
43
 
39
44
  &:has(> a:--highlight) {
40
45
  background: var(--card-background-highlight);
46
+ border-color: var(--card-border-color-highlight);
41
47
  }
42
48
 
43
49
  @media (--sm) {
@@ -61,13 +67,13 @@ article.collection-overview-card {
61
67
  gap: var(--spacer-sm);
62
68
  }
63
69
 
64
- > div:last-child {
65
- color: var(--muted-light);
70
+ > .details {
71
+ color: var(--muted);
66
72
  }
67
73
 
68
74
  h1 {
69
75
  small {
70
- color: var(--muted-light);
76
+ color: var(--);
71
77
  font-size: var(--font-base);
72
78
  }
73
79
  }
@@ -20,7 +20,8 @@
20
20
  }" skip-confirmation auto-close-success @complete="onComplete">
21
21
  <template #start="{ start }">
22
22
  <Button @click="start" class="small">
23
- Withdraw ({{ balance.value }} {{ balance.format }})
23
+ <Icon type="withdraw" />
24
+ <span>Withdraw ({{ balance.value }} {{ balance.format }})</span>
24
25
  </Button>
25
26
  </template>
26
27
  </TransactionFlow>
@@ -1,12 +1,14 @@
1
1
  <template>
2
2
  <Teleport to="body">
3
- <dialog ref="dialog">
3
+ <dialog ref="dialog" :class="class">
4
4
  <slot />
5
5
  </dialog>
6
6
  </Teleport>
7
7
  </template>
8
8
 
9
9
  <script setup>
10
+ defineProps({ class: 'String' })
11
+
10
12
  const dialog = ref()
11
13
 
12
14
  const close = () => {
@@ -58,12 +60,7 @@ dialog {
58
60
  }
59
61
 
60
62
  &::backdrop {
61
- background-image: linear-gradient(
62
- 45deg,
63
- var(--gray-z-0-semi),
64
- var(--gray-z-1-semi),
65
- var(--gray-z-2-semi)
66
- );
63
+ background: var(--dialog-background-color);
67
64
  backdrop-filter: var(--blur);
68
65
  pointer-events: none;
69
66
  }