slidev-theme-neversink 0.0.0

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 (147) hide show
  1. package/.github/workflows/deploy.yml +67 -0
  2. package/.prettierrc +15 -0
  3. package/.vscode/settings.json +4 -0
  4. package/LICENSE +21 -0
  5. package/README.md +112 -0
  6. package/assets/nyu_long_black_on_white.svg +41 -0
  7. package/components/Admonition.vue +80 -0
  8. package/components/AdmonitionType.vue +56 -0
  9. package/components/CreditScroll.vue +94 -0
  10. package/components/SpeechBubble.vue +294 -0
  11. package/components/StickyNote.vue +71 -0
  12. package/components/vue3-kawaii/README.md +5 -0
  13. package/components/vue3-kawaii/components/backpack/BackPack.vue +123 -0
  14. package/components/vue3-kawaii/components/backpack/backpackpaths.js +17 -0
  15. package/components/vue3-kawaii/components/browser/Browser.vue +56 -0
  16. package/components/vue3-kawaii/components/browser/browserpaths.js +9 -0
  17. package/components/vue3-kawaii/components/cat/Cat.vue +89 -0
  18. package/components/vue3-kawaii/components/cat/catpaths.js +8 -0
  19. package/components/vue3-kawaii/components/common/face/Face.vue +95 -0
  20. package/components/vue3-kawaii/components/common/face/facepaths.js +24 -0
  21. package/components/vue3-kawaii/components/common/wrapper/Wrapper.vue +24 -0
  22. package/components/vue3-kawaii/components/creditCard/CreditCard.vue +47 -0
  23. package/components/vue3-kawaii/components/creditCard/creditcardpaths.js +8 -0
  24. package/components/vue3-kawaii/components/ghost/Ghost.vue +48 -0
  25. package/components/vue3-kawaii/components/ghost/ghostpaths.js +8 -0
  26. package/components/vue3-kawaii/components/iceCream/IceCream.vue +49 -0
  27. package/components/vue3-kawaii/components/iceCream/icecreampaths.js +9 -0
  28. package/components/vue3-kawaii/components/mug/Mug.vue +48 -0
  29. package/components/vue3-kawaii/components/mug/mugpaths.js +7 -0
  30. package/components/vue3-kawaii/components/planet/Planet.vue +58 -0
  31. package/components/vue3-kawaii/components/planet/planetpaths.js +7 -0
  32. package/components/vue3-kawaii/components/speechBubble/SpeechBubbleGuy.vue +63 -0
  33. package/components/vue3-kawaii/components/speechBubble/speechbubblepaths.js +8 -0
  34. package/components/vue3-kawaii/utils/getUniqueId.js +10 -0
  35. package/docs/.vitepress/config.js +75 -0
  36. package/docs/.vitepress/theme/index.js +50 -0
  37. package/docs/.vitepress/theme/style.css +145 -0
  38. package/docs/api-examples.md +49 -0
  39. package/docs/branding.md +43 -0
  40. package/docs/colors.md +108 -0
  41. package/docs/components/admonitions.md +106 -0
  42. package/docs/components/creditscroll.md +1 -0
  43. package/docs/components/kawaii.md +26 -0
  44. package/docs/components/qrcode.md +24 -0
  45. package/docs/components/speechbubble.md +69 -0
  46. package/docs/components/stickynote.md +54 -0
  47. package/docs/components.md +19 -0
  48. package/docs/contributing.md +5 -0
  49. package/docs/customizing.md +38 -0
  50. package/docs/getting-started.md +32 -0
  51. package/docs/index.md +19 -0
  52. package/docs/layouts/cover.md +69 -0
  53. package/docs/layouts/credits.md +111 -0
  54. package/docs/layouts/default.md +88 -0
  55. package/docs/layouts/full.md +131 -0
  56. package/docs/layouts/intro.md +63 -0
  57. package/docs/layouts/quote.md +51 -0
  58. package/docs/layouts/section.md +67 -0
  59. package/docs/layouts/side-title.md +180 -0
  60. package/docs/layouts/top-title-two-cols.md +171 -0
  61. package/docs/layouts/top-title.md +103 -0
  62. package/docs/layouts/two-cols-title.md +273 -0
  63. package/docs/layouts.md +92 -0
  64. package/docs/markdown-examples.md +85 -0
  65. package/docs/markdown.md +87 -0
  66. package/docs/parts/columnsystem.md +18 -0
  67. package/docs/parts/layoutpicker.md +73 -0
  68. package/docs/public/deck.png +0 -0
  69. package/docs/public/layouts/side-title-12row.svg +27 -0
  70. package/docs/public/layouts/side-title-is-3.svg +7 -0
  71. package/docs/public/layouts/side-title-is-6.svg +7 -0
  72. package/docs/public/layouts/side-title-side.svg +13 -0
  73. package/docs/public/layouts/two-col-title-12row.svg +31 -0
  74. package/docs/public/layouts/two-col-title-align.svg +13 -0
  75. package/docs/public/layouts/two-col-title-is-4.svg +23 -0
  76. package/docs/public/layouts/two-col-title-is-6.svg +23 -0
  77. package/docs/public/layouts/two-col-title-titlepos.svg +31 -0
  78. package/docs/public/screenshots/1.png +0 -0
  79. package/docs/public/screenshots/10.png +0 -0
  80. package/docs/public/screenshots/11.png +0 -0
  81. package/docs/public/screenshots/12.png +0 -0
  82. package/docs/public/screenshots/13.png +0 -0
  83. package/docs/public/screenshots/14.png +0 -0
  84. package/docs/public/screenshots/15.png +0 -0
  85. package/docs/public/screenshots/16.png +0 -0
  86. package/docs/public/screenshots/17.png +0 -0
  87. package/docs/public/screenshots/18.png +0 -0
  88. package/docs/public/screenshots/19.png +0 -0
  89. package/docs/public/screenshots/2.png +0 -0
  90. package/docs/public/screenshots/20.png +0 -0
  91. package/docs/public/screenshots/21.png +0 -0
  92. package/docs/public/screenshots/22.png +0 -0
  93. package/docs/public/screenshots/23.png +0 -0
  94. package/docs/public/screenshots/24.png +0 -0
  95. package/docs/public/screenshots/25.png +0 -0
  96. package/docs/public/screenshots/26.png +0 -0
  97. package/docs/public/screenshots/27.png +0 -0
  98. package/docs/public/screenshots/28.png +0 -0
  99. package/docs/public/screenshots/29.png +0 -0
  100. package/docs/public/screenshots/3.png +0 -0
  101. package/docs/public/screenshots/30.png +0 -0
  102. package/docs/public/screenshots/31.png +0 -0
  103. package/docs/public/screenshots/32.png +0 -0
  104. package/docs/public/screenshots/33.png +0 -0
  105. package/docs/public/screenshots/34.png +0 -0
  106. package/docs/public/screenshots/35.png +0 -0
  107. package/docs/public/screenshots/36.png +0 -0
  108. package/docs/public/screenshots/37.png +0 -0
  109. package/docs/public/screenshots/38.png +0 -0
  110. package/docs/public/screenshots/4.png +0 -0
  111. package/docs/public/screenshots/5.png +0 -0
  112. package/docs/public/screenshots/6.png +0 -0
  113. package/docs/public/screenshots/7.png +0 -0
  114. package/docs/public/screenshots/8.png +0 -0
  115. package/docs/public/screenshots/9.png +0 -0
  116. package/example.md +1503 -0
  117. package/layoutHelper.ts +118 -0
  118. package/layouts/cover.vue +93 -0
  119. package/layouts/credits.vue +35 -0
  120. package/layouts/default.vue +18 -0
  121. package/layouts/four-cell.vue +210 -0
  122. package/layouts/full.vue +22 -0
  123. package/layouts/intro.vue +75 -0
  124. package/layouts/quote.vue +62 -0
  125. package/layouts/section.vue +84 -0
  126. package/layouts/side-title.vue +142 -0
  127. package/layouts/top-title-two-cols.vue +131 -0
  128. package/layouts/top-title.vue +63 -0
  129. package/layouts/two-cols-title.vue +176 -0
  130. package/layouts/two-cols.vue +141 -0
  131. package/package.json +54 -0
  132. package/public/images/photo.png +0 -0
  133. package/public/images/photo2.png +0 -0
  134. package/public/images/scatter1.png +0 -0
  135. package/public/images/scatter1.svg +20 -0
  136. package/screenshot.md +874 -0
  137. package/setup/main.ts +45 -0
  138. package/setup/shiki.ts +14 -0
  139. package/slide-bottom.vue +107 -0
  140. package/styles/base.css +240 -0
  141. package/styles/bubbles.css +4 -0
  142. package/styles/colors.css +12 -0
  143. package/styles/index.ts +11 -0
  144. package/styles/layouts.css +76 -0
  145. package/styles/stickynote.css +4 -0
  146. package/uno.config.ts +222 -0
  147. package/vite.config.ts +16 -0
@@ -0,0 +1,294 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ // import { colors } from '@unocss/preset-mini'
4
+
5
+ // console.log(colors)
6
+
7
+ const props = defineProps({
8
+ position: {
9
+ type: String,
10
+ default: 'b',
11
+ validator: (value) => ['t', 'l', 'r', 'b', 'bl', 'br', 'lt', 'tr'].includes(value),
12
+ },
13
+ shape: {
14
+ type: String,
15
+ default: '',
16
+ validator: (value) => ['', 'round', 'circle'].includes(value),
17
+ },
18
+ animation: {
19
+ type: String,
20
+ default: '',
21
+ validator: (value) => ['', 'pop', 'float'].includes(value),
22
+ },
23
+ color: {
24
+ type: String,
25
+ default: 'red-light',
26
+ },
27
+ textAlign: {
28
+ type: String,
29
+ default: 'left',
30
+ },
31
+ maxWidth: {
32
+ type: String,
33
+ default: '100%',
34
+ },
35
+ borderWidth: {
36
+ type: String,
37
+ default: '1px',
38
+ },
39
+ })
40
+
41
+ const colorscheme = computed(() => {
42
+ return `neversink-${props.color}-scheme`
43
+ })
44
+
45
+ const bubbleClasses = computed(() => {
46
+ return [colorscheme.value, 'speech-bubble', props.position, props.shape, props.animation]
47
+ })
48
+
49
+ const bubbleStyles = computed(() => ({
50
+ '--bubble-color': 'var(--neversink-bg-color)',
51
+ '--border-color': 'var(--neversink-fg-color)',
52
+ '--text-color': 'var(--neversink-text-color)',
53
+ '--text-align': props.textAlign,
54
+ }))
55
+ </script>
56
+
57
+ <template>
58
+ <div :class="bubbleClasses" :style="bubbleStyles">
59
+ <slot></slot>
60
+ </div>
61
+ </template>
62
+
63
+ <style>
64
+ .speech-bubble p:first-child {
65
+ margin-top: 0;
66
+ }
67
+
68
+ .speech-bubble {
69
+ --arrow-w: 0.5em;
70
+ --arrow-h: 1em;
71
+ --bubble-corners: 2px;
72
+ --w: v-bind(props.maxWidth);
73
+ --border-size: v-bind(props.borderWidth);
74
+ text-align: var(--text-align);
75
+ height: fit-content;
76
+ font-weight: 400;
77
+ font-size: 1.1rem;
78
+ /*color: var(--text-color);*/
79
+ background-color: var(--bubble-color);
80
+ border-color: var(--border-color);
81
+ color: var(--text-color);
82
+ padding: 1em;
83
+ position: relative;
84
+ border-radius: var(--bubble-corners);
85
+ border-width: var(--border-size);
86
+ max-width: var(--w);
87
+ /*box-shadow: 3 3 4 var(--border-size) var(--border-color);*/
88
+ }
89
+
90
+ .speech-bubble p {
91
+ margin-top: 0;
92
+ }
93
+
94
+ .speech-bubble.round {
95
+ --bubble-corners: 1em;
96
+ }
97
+
98
+ .speech-bubble.circle {
99
+ --bubble-corners: 100%;
100
+ padding: 2em;
101
+ }
102
+
103
+ .speech-bubble:before,
104
+ .speech-bubble:after {
105
+ content: '';
106
+ position: absolute;
107
+ bottom: calc(-1 * var(--arrow-h) * 2 + 0.5px);
108
+ left: 50%;
109
+ border-style: solid;
110
+ border-width: var(--arrow-h) var(--arrow-w);
111
+ border-color: var(--bubble-color) transparent transparent;
112
+ }
113
+
114
+ .speech-bubble:before {
115
+ border-width: calc(var(--arrow-h) + var(--border-size)) calc(var(--arrow-w) + var(--border-size));
116
+ border-color: var(--border-color) transparent transparent;
117
+ bottom: calc(-1 * var(--arrow-h) * 2 - 2.5 * var(--border-size));
118
+ left: calc(50% - var(--border-size));
119
+ }
120
+
121
+ .speech-bubble.bl:after {
122
+ left: 10%;
123
+ border-style: solid;
124
+ border-width: var(--arrow-h) var(--arrow-w);
125
+ border-color: var(--bubble-color) transparent transparent;
126
+ }
127
+
128
+ .speech-bubble.bl:before {
129
+ left: calc(10% - var(--border-size));
130
+ }
131
+
132
+ .speech-bubble.br:after {
133
+ left: 88%;
134
+ border-style: solid;
135
+ border-width: var(--arrow-h) var(--arrow-w);
136
+ border-color: var(--bubble-color) transparent transparent;
137
+ }
138
+
139
+ .speech-bubble.br:before {
140
+ left: calc(88% - var(--border-size));
141
+ }
142
+ .speech-bubble.t:after {
143
+ border-color: transparent transparent var(--bubble-color);
144
+ bottom: auto;
145
+ top: calc(-1 * var(--arrow-h) * 2 + 0.5px);
146
+ }
147
+
148
+ .speech-bubble.t:before {
149
+ border-width: calc(var(--arrow-h) + var(--border-size)) calc(var(--arrow-w) + var(--border-size));
150
+ border-color: transparent transparent var(--border-color);
151
+ bottom: auto;
152
+ top: calc(-1 * var(--arrow-h) * 2 - 2.5 * var(--border-size));
153
+ }
154
+
155
+ .speech-bubble.tl:after {
156
+ border-color: transparent transparent var(--bubble-color);
157
+ bottom: auto;
158
+ left: 10%;
159
+ top: calc(-1 * var(--arrow-h) * 2 + 0.5px);
160
+ }
161
+
162
+ .speech-bubble.tl:before {
163
+ border-width: calc(var(--arrow-h) + var(--border-size)) calc(var(--arrow-w) + var(--border-size));
164
+ border-color: transparent transparent var(--border-color);
165
+ bottom: auto;
166
+ left: calc(10% - var(--border-size));
167
+ top: calc(-1 * var(--arrow-h) * 2 - 2.5 * var(--border-size));
168
+ }
169
+
170
+ .speech-bubble.tr:after {
171
+ border-color: transparent transparent var(--bubble-color);
172
+ bottom: auto;
173
+ left: 90%;
174
+ top: calc(-1 * var(--arrow-h) * 2 + 0.5px);
175
+ }
176
+
177
+ .speech-bubble.tr:before {
178
+ border-width: calc(var(--arrow-h) + var(--border-size)) calc(var(--arrow-w) + var(--border-size));
179
+ border-color: transparent transparent var(--border-color);
180
+ bottom: auto;
181
+ left: calc(90% - var(--border-size));
182
+ top: calc(-1 * var(--arrow-h) * 2 - 2.5 * var(--border-size));
183
+ }
184
+
185
+ .speech-bubble.l:after {
186
+ border-color: transparent var(--bubble-color) transparent transparent;
187
+ bottom: auto;
188
+ border-width: var(--arrow-w) var(--arrow-h);
189
+ top: calc(50% - var(--arrow-w));
190
+ left: calc(-1 * var(--arrow-h) * 2 + 0.5px);
191
+ }
192
+
193
+ .speech-bubble.l:before {
194
+ border-width: calc(var(--arrow-w) + var(--border-size)) calc(var(--arrow-h) + var(--border-size));
195
+ border-color: transparent var(--border-color) transparent transparent;
196
+ bottom: auto;
197
+ top: calc(50% - var(--arrow-w) - var(--border-size));
198
+ left: calc(-1 * var(--arrow-h) * 2 - 2.5 * var(--border-size));
199
+ }
200
+
201
+ .speech-bubble.r:after {
202
+ border-color: transparent transparent transparent var(--bubble-color);
203
+ bottom: auto;
204
+ left: auto;
205
+ border-width: var(--arrow-w) var(--arrow-h);
206
+ top: calc(50% - var(--arrow-w));
207
+ right: calc(-1 * var(--arrow-h) * 2 + 0.5px);
208
+ }
209
+
210
+ .speech-bubble.r:before {
211
+ border-width: calc(var(--arrow-w) + var(--border-size)) calc(var(--arrow-h) + var(--border-size));
212
+ border-color: transparent transparent transparent var(--border-color);
213
+ bottom: auto;
214
+ left: auto;
215
+ top: calc(50% - var(--arrow-w) - var(--border-size));
216
+ right: calc(-1 * var(--arrow-h) * 2 - 2.5 * var(--border-size));
217
+ }
218
+
219
+ .speech-bubble.pop {
220
+ animation-name: pop;
221
+ animation-duration: 0.5s;
222
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
223
+ }
224
+
225
+ .speech-bubble.float {
226
+ animation-name: float-up;
227
+ animation-duration: 2s;
228
+ animation-iteration-count: infinite;
229
+ animation-timing-function: ease;
230
+ }
231
+
232
+ .speech-bubble.r.float {
233
+ animation-name: float-left;
234
+ }
235
+
236
+ .speech-bubble.l.float {
237
+ animation-name: float-right;
238
+ }
239
+
240
+ .speech-bubble.t.float {
241
+ animation-name: float-down;
242
+ }
243
+
244
+ @keyframes pop {
245
+ 0% {
246
+ transform: scale(0.8);
247
+ }
248
+ 80% {
249
+ transform: scale(1.1);
250
+ }
251
+ 90% {
252
+ transform: scale(0.9);
253
+ }
254
+ 100% {
255
+ transform: scale(1);
256
+ }
257
+ }
258
+
259
+ @keyframes float-up {
260
+ 0% {
261
+ transform: translateY(0);
262
+ }
263
+ 50% {
264
+ transform: translateY(calc(-1 * var(--arrow-h)));
265
+ }
266
+ }
267
+
268
+ @keyframes float-left {
269
+ 0% {
270
+ transform: translateX(0);
271
+ }
272
+ 50% {
273
+ transform: translateX(calc(-1 * var(--arrow-h)));
274
+ }
275
+ }
276
+
277
+ @keyframes float-right {
278
+ 0% {
279
+ transform: translateX(0);
280
+ }
281
+ 50% {
282
+ transform: translateX(var(--arrow-h));
283
+ }
284
+ }
285
+
286
+ @keyframes float-down {
287
+ 0% {
288
+ transform: translateY(0);
289
+ }
290
+ 50% {
291
+ transform: translateY(var(--arrow-h));
292
+ }
293
+ }
294
+ </style>
@@ -0,0 +1,71 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+
4
+ const props = defineProps({
5
+ color: {
6
+ type: String,
7
+ default: 'amber-light',
8
+ },
9
+ textAlign: {
10
+ type: String,
11
+ default: 'left',
12
+ },
13
+ width: {
14
+ type: String,
15
+ default: '180px',
16
+ },
17
+ title: {
18
+ type: String,
19
+ default: '',
20
+ },
21
+ })
22
+
23
+ const colorscheme = computed(() => {
24
+ return `neversink-${props.color}-scheme`
25
+ })
26
+
27
+ const stickyClasses = computed(() => {
28
+ return [colorscheme.value, 'sticky-note']
29
+ })
30
+
31
+ const stickyStyles = computed(() => ({
32
+ '--sticky-color': 'var(--neversink-bg-color)',
33
+ '--border-color': 'var(--neversink-fg-color)',
34
+ '--text-color': 'var(--neversink-text-color)',
35
+ '--text-align': props.textAlign,
36
+ '--width': props.width,
37
+ }))
38
+ </script>
39
+
40
+ <template>
41
+ <div :class="stickyClasses" :style="stickyStyles">
42
+ <template v-if="props.title !== ''"
43
+ ><strong>{{ props.title }}</strong></template
44
+ >
45
+ <slot></slot>
46
+ </div>
47
+ </template>
48
+
49
+ <style scoped>
50
+ .sticky-note {
51
+ width: var(--width);
52
+ height: var(--width);
53
+ background-color: var(--sticky-color, yellow);
54
+ text-align: var(--text-align, left);
55
+ max-width: 100%;
56
+ padding: 1em;
57
+ position: relative;
58
+ box-shadow: 5px 4px 6px rgba(0, 0, 0, 0.1);
59
+ font-weight: 400;
60
+ font-size: 0.8rem;
61
+ color: var(--text-color);
62
+ border: 0.4px solid var(--border-color);
63
+ }
64
+ .sticky-note strong {
65
+ display: block;
66
+ font-size: 0.8rem;
67
+ font-family: monospace;
68
+ letter-spacing: 0em;
69
+ word-spacing: -0.3em;
70
+ }
71
+ </style>
@@ -0,0 +1,5 @@
1
+ # vue3-kawaii
2
+
3
+ Vue-kawaii is a collection of vue components that render cute characters. It is a vue port for react-kawaii.
4
+ The original repo is for vue2 and hasn't been updated. Here I used Claude 3.5 and updated the code to work with
5
+ Vue 3. I might someday host the full package on npm, but for now, I'm just using the components in this project.
@@ -0,0 +1,123 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ import paths from './backpackpaths.js'
4
+ import getUniqueId from '../../utils/getUniqueId.js'
5
+ import Face from '../common/face/Face.vue'
6
+ import Wrapper from '../common/wrapper/Wrapper.vue'
7
+
8
+ const props = defineProps({
9
+ size: {
10
+ type: Number,
11
+ default: 240,
12
+ },
13
+ mood: {
14
+ type: String,
15
+ validator(val) {
16
+ return ['sad', 'shocked', 'happy', 'blissful', 'lovestruck', 'excited', 'ko'].includes(val)
17
+ },
18
+ default: 'blissful',
19
+ },
20
+ color: {
21
+ type: String,
22
+ default: '#FFD882',
23
+ },
24
+ })
25
+
26
+ const width = computed(() => props.size * 0.63)
27
+ const uniqueId = computed(() => getUniqueId())
28
+ </script>
29
+
30
+ <template>
31
+ <Wrapper>
32
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" :width="width" :height="size" viewBox="0 0 138 218">
33
+ <defs>
34
+ <path id="pocket__shape-path" :d="paths.pocketShapePath" />
35
+ <path id="pocket__shape__shadow-path" :d="paths.pocketShapeShadowPath" />
36
+ </defs>
37
+ <g id="kawaii-backpack" transform="translate(0 -1)">
38
+ <g id="right-shoulder-strap" transform="matrix(-1 0 0 1 125.901 13.054)">
39
+ <path id="right-shoulder-strap__back" :fill="color" d="M0 5.948v43.619l13.879-14.792z" />
40
+ <path
41
+ id="right-shoulder-strap__back__shadow"
42
+ fill="#FFF"
43
+ fill-rule="nonzero"
44
+ opacity="0.4"
45
+ d="M0 5.948v43.619l13.879-14.792z"
46
+ />
47
+ <path id="right-shoulder-strap__front" :fill="color" d="M9.193 34.697L0 5.127 21.014 0l7.735 24.677z" />
48
+ </g>
49
+ <g id="left-shoulder-strap" transform="translate(11.896 13.054)">
50
+ <path id="left-shoulder-strap__back" :fill="color" d="M0 5.948v43.619l13.879-14.792z" />
51
+ <path
52
+ id="left-shoulder-strap__back_shadow"
53
+ fill="#FFF"
54
+ fill-rule="nonzero"
55
+ opacity="0.4"
56
+ d="M0 5.948v43.619l13.879-14.792z"
57
+ />
58
+ <path id="left-shoulder-strap__front" :fill="color" d="M9.193 34.697L0 5.127 21.014 0l7.735 24.677z" />
59
+ </g>
60
+ <g id="hanging-loop" transform="translate(47.585)">
61
+ <path id="hanging-loop__back" :fill="color" d="M16.853 7.931h9.913L21.81.991z" />
62
+ <path
63
+ id="hanging-loop__back_shadow"
64
+ fill="#121212"
65
+ fill-rule="nonzero"
66
+ opacity="0.14"
67
+ d="M16.853 7.931h9.913L21.81.991z"
68
+ />
69
+ <path id="hanging-loop__shape" :fill="color" :d="paths.hangingLoopShape" />
70
+ </g>
71
+ <g id="main-compartment" transform="translate(0 26.617)">
72
+ <path id="main-compartment__shape" :fill="color" :d="paths.mainCompartmentShape" />
73
+ <path
74
+ id="main-compartment__bottom-stripe"
75
+ fill="#121212"
76
+ fill-rule="nonzero"
77
+ :d="paths.mainCompartmentBottomStripe"
78
+ opacity="0.07"
79
+ />
80
+ <Face :mood="mood" transform="translate(36 70)" :uniqueId="uniqueId" />
81
+ <path
82
+ id="main-compartment__top"
83
+ fill="#121212"
84
+ fill-rule="nonzero"
85
+ :d="paths.mainCompartmentTop"
86
+ opacity="0.07"
87
+ />
88
+ </g>
89
+ <g id="pocket" transform="translate(12.888 135.981)">
90
+ <mask id="mask-4" fill="#fff">
91
+ <use xlink:href="#pocket__shape-path" />
92
+ </mask>
93
+ <use id="pocket__shape" :fill="color" xlink:href="#pocket__shape-path" />
94
+ <mask id="mask-6" fill="#fff">
95
+ <use xlink:href="#pocket__shape__shadow-path" />
96
+ </mask>
97
+ <use
98
+ id="pocket__shape__shadow"
99
+ fill="#121212"
100
+ fill-rule="nonzero"
101
+ opacity="0.14"
102
+ xlink:href="#pocket__shape__shadow-path"
103
+ />
104
+ <g id="Group-6" mask="url(#mask-6)">
105
+ <g transform="translate(0 15.862)">
106
+ <path id="Rectangle-7" fill="#33363B" opacity="0.408" d="M0 2.974h113.014v2.974H0z" />
107
+ <path id="Rectangle-7-Copy" fill="#555D67" opacity="0.408" d="M0 0h113.014v2.974H0z" />
108
+ <path id="Rectangle-8" fill="#6D727A" opacity="0.587" d="M107.066 0h5.948v5.948h-5.948z" />
109
+ <path id="zip" fill="#49505A" :d="paths.zip" opacity="0.746" />
110
+ </g>
111
+ </g>
112
+ <g id="brand" mask="url(#mask-6)">
113
+ <g transform="translate(78.737 39.368)">
114
+ <path id="Rectangle-6" fill="#FFFDFD" d="M0 0h27.789v18.526H0z" />
115
+ <path id="Rectangle-6-Copy" fill="#121212" opacity="0.298" d="M1.158 1.158h25.474v16.211H1.158z" />
116
+ <path id="brand" fill="#FFF" d="M2.316 2.316h23.158v13.895H2.316z" />
117
+ </g>
118
+ </g>
119
+ </g>
120
+ </g>
121
+ </svg>
122
+ </Wrapper>
123
+ </template>
@@ -0,0 +1,17 @@
1
+ const paths = {
2
+ pocketShapePath:
3
+ 'M11.329 0h90.555c7.42 0 11.13 2.538 11.13 7.614v49.828c0 5.325-3.36 7.987-10.082 7.987H11.414c-8.474 0-12.23-2.6-11.267-7.802V7.263C.147 2.42 3.875 0 11.33 0z',
4
+ pocketShapeShadowPath:
5
+ 'M11.329 0h90.555c7.42 0 11.13 2.538 11.13 7.614v49.828c0 5.325-3.36 7.987-10.082 7.987H11.414c-8.474 0-12.23-2.6-11.267-7.802V7.263C.147 2.42 3.875 0 11.33 0z',
6
+ hangingLoopShape:
7
+ 'M0 33.872c3.088-9.656 5.841-16.215 8.258-19.678 1.945-2.786 4.895-4.488 6.72-6.462 3.444-3.722 5.393-6.574 6.665-6.574 1.12 0-3.688 3.488-5.891 10.96-1.04 3.529-2.014 10.78-2.919 21.754H0zm43.62.992H30.8c-.904-11.217-1.876-18.63-2.915-22.237-2.2-7.636-7.029-11.47-5.91-11.47 1.271 0 3.243 3.183 6.682 6.987 1.824 2.018 4.77 3.758 6.713 6.606 2.415 3.539 5.164 10.244 8.25 20.114z',
8
+ mainCompartmentShape:
9
+ 'M68.899 0c38.235 0 68.898 34.267 68.898 76.539v93.207c0 14.095-10.283 21.584-22.966 21.584H22.966C10.283 191.33 0 183.84 0 169.746V76.54C0 34.267 30.664 0 68.899 0z',
10
+ mainCompartmentBottomStripe:
11
+ 'M137.797 156.949v13.373c0 13.924-10.283 21.324-22.966 21.324H22.966c-12.683 0-22.966-7.4-22.966-21.324v-13.373h137.797z',
12
+ mainCompartmentTop:
13
+ 'M137.797 82.423v-5.948C137.797 34.423 107.134.333 68.9.333S-.001 34.423 0 76.475v5.948C0 40.371 30.664 6.281 68.899 6.281s68.898 34.09 68.898 76.142z',
14
+ zip: 'M109.285 1.983h2.028l.547 8.922h-2.974l.4-8.922zm.592 6.94v.99h.991v-.99h-.99z',
15
+ }
16
+
17
+ export default paths
@@ -0,0 +1,56 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ import paths from './browserpaths.js'
4
+ import getUniqueId from '../../utils/getUniqueId.js'
5
+ import Face from '../common/face/Face.vue'
6
+ import Wrapper from '../common/wrapper/Wrapper.vue'
7
+
8
+ const props = defineProps({
9
+ size: {
10
+ type: Number,
11
+ default: 180,
12
+ },
13
+ mood: {
14
+ type: String,
15
+ validator(val) {
16
+ return ['sad', 'shocked', 'happy', 'blissful', 'lovestruck', 'excited', 'ko'].includes(val)
17
+ },
18
+ default: 'ko',
19
+ },
20
+ color: {
21
+ type: String,
22
+ default: '#FDA7DC',
23
+ },
24
+ })
25
+
26
+ const width = computed(() => props.size * 1.44)
27
+ const uniqueId = computed(() => getUniqueId())
28
+ </script>
29
+
30
+ <template>
31
+ <Wrapper>
32
+ <svg
33
+ :width="width"
34
+ :height="size"
35
+ viewBox="0 0 200 139"
36
+ xmlns="http://www.w3.org/2000/svg"
37
+ xmlns:xlink="http://www.w3.org/1999/xlink"
38
+ >
39
+ <g id="kawaii-browser">
40
+ <g id="kawaii-browser__body" fill-rule="nonzero">
41
+ <path :d="paths.shape" id="kawaii-browser__shape" :fill="color" />
42
+ <path :d="paths.shadow" id="kawaii-browser__shadow" fill="#121212" opacity=".1" />
43
+ <g id="address-bar" transform="translate(.097)">
44
+ <path :d="paths.addressBar" fill="#111" />
45
+ <ellipse fill="#FFF" cx="168.855" cy="10.901" rx="3.4" ry="3.395" />
46
+ <ellipse fill="#FFF" cx="180.074" cy="10.901" rx="3.4" ry="3.395" />
47
+ <g id="address" transform="translate(12.654 5.47)" fill="#FFF">
48
+ <rect x=".277" y=".163" width="145.775" height="10.563" rx="5.282" />
49
+ </g>
50
+ </g>
51
+ </g>
52
+ <Face :mood="mood" transform="translate(67 63)" :uniqueId="uniqueId" />
53
+ </g>
54
+ </svg>
55
+ </Wrapper>
56
+ </template>
@@ -0,0 +1,9 @@
1
+ const paths = {
2
+ shape:
3
+ 'M199.648 71.479V22.712C199.645 10.22 189.412-.003 176.902 0L22.74.006C10.233.006 0 10.228 0 22.72v92.044l.055-.01c.403 3.632 3.537 22.819 24.729 22.819 23.407 0 144.572 1.377 152.834 0 8.261-1.377 22.03-4.13 22.03-23.408V71.479z',
4
+ shadow:
5
+ 'M134.155 138.181c22.682.029 40.563-.108 43.562-.608 8.262-1.377 22.03-4.13 22.03-23.408V22.712C199.746 10.22 189.513-.003 177.002 0h-10.427c12.449.071 22.607 10.265 22.61 22.712v91.453c0 19.277-13.769 22.031-22.03 23.408-2.515.42-15.497.583-33 .608z',
6
+ addressBar: 'M0 22.712C0 10.228 10.23.006 22.733.006L176.842 0c12.506-.003 22.736 10.22 22.738 22.712',
7
+ }
8
+
9
+ export default paths
@@ -0,0 +1,89 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ import paths from './catpaths.js'
4
+ import getUniqueId from '../../utils/getUniqueId.js'
5
+ import Face from '../common/face/Face.vue'
6
+ import Wrapper from '../common/wrapper/Wrapper.vue'
7
+
8
+ const props = defineProps({
9
+ size: {
10
+ type: Number,
11
+ default: 320,
12
+ },
13
+ mood: {
14
+ type: String,
15
+ validator(val) {
16
+ return ['sad', 'shocked', 'happy', 'blissful', 'lovestruck', 'excited', 'ko'].includes(val)
17
+ },
18
+ default: 'excited',
19
+ },
20
+ color: {
21
+ type: String,
22
+ default: '#596881',
23
+ },
24
+ })
25
+
26
+ const width = computed(() => props.size * 0.84)
27
+ const uniqueId = computed(() => getUniqueId())
28
+ </script>
29
+
30
+ <template>
31
+ <Wrapper>
32
+ <svg xmlns="http://www.w3.org/2000/svg" :width="width" :height="size" viewBox="0 0 185 220">
33
+ <g id="Kawaii-Builder" fill="none" fill-rule="evenodd">
34
+ <g id="kawaii-cat">
35
+ <g id="kawaii-cat_tail" transform="translate(29.23 153.846)" fill-rule="nonzero">
36
+ <path
37
+ d="M45.487 29.59l3.18 5.077s-7.744 6.666-17.282 8.615C24.513 44.718.05 46.564.05 21.846s17.231-28.82 9.436-7.949c0 0-2.82 8.77.82 14.667 3.642 5.898 14.052 11.128 23.488 6.257l11.692-5.231z"
38
+ id="tail_inner_shadow"
39
+ :fill="color"
40
+ />
41
+ <path
42
+ d="M45.487 29.59l3.18 5.077s-7.744 6.666-17.282 8.615C24.513 44.718.05 46.564.05 21.846s17.231-28.82 9.436-7.949c0 0-2.82 8.77.82 14.667 3.642 5.898 14.052 11.128 23.488 6.257l11.692-5.231z"
43
+ id="tail_inner"
44
+ fill="#121212"
45
+ opacity="0.25"
46
+ />
47
+ </g>
48
+ <g id="kawaii-cat_legs" transform="translate(81 190)" :fill="color" fill-rule="nonzero">
49
+ <path :d="paths.legs" id="kawaii-cat_legs_inner" />
50
+ </g>
51
+ <g id="kawaii-cat_arms" transform="translate(58 132)" :fill="color" fill-rule="nonzero">
52
+ <path d="M55.949.205s27.948 51.641 2 53.898" id="arm-r" />
53
+ <path d="M13.641.205s-27.949 51.641-2 53.898" id="arm-l" />
54
+ </g>
55
+ <g
56
+ id="kawaii-cat_arms-shadow"
57
+ transform="translate(58 132)"
58
+ fill="#121212"
59
+ fill-rule="nonzero"
60
+ opacity="0.25"
61
+ >
62
+ <path d="M55.949.205s27.948 51.641 2 53.898" id="arm-r" />
63
+ <path d="M13.641.205s-27.949 51.641-2 53.898" id="arm-l" />
64
+ </g>
65
+ <path :d="paths.body" id="kawaii-cat_body" :fill="color" fill-rule="nonzero" />
66
+ <g id="kawaii-cat_ears" transform="translate(34 23)" fill="#121212" fill-rule="nonzero" opacity="0.25">
67
+ <path d="M103.795 2.897s18.718-8.974 13.077 8.975" id="kawaii-cat_ear-r" />
68
+ <path d="M14.923 2.538S-3.795-6.436 1.846 11.513" id="kawaii-cat_ear-l" />
69
+ </g>
70
+ <path
71
+ d="M92.243 190.282h.004v-48.667h-.004c7.075-.36 11.946-2.615 11.946-2.615 16.709 54.254-11.62 51.324-11.946 51.282-.376.042-28.705 2.972-11.945-51.282 0 0 4.869 2.255 11.942 2.615z"
72
+ id="kawaii-cat_belly"
73
+ fill="#121212"
74
+ fill-rule="nonzero"
75
+ opacity="0.25"
76
+ />
77
+ <Face :mood="mood" transform="translate(59 67)" :uniqueId="uniqueId" />
78
+ <path
79
+ d="M96.935 77.625c-.975-2.106-8.13-2.227-8.889 0-.47 1.458 2.746 4.454 4.372 4.373 1.663-.121 5.095-3.118 4.517-4.373z"
80
+ id="kawaii-cat_nose"
81
+ fill="#121212"
82
+ fill-rule="nonzero"
83
+ />
84
+ <path :d="paths.shadow" id="kawaii-cat_shadow" fill="#121212" fill-rule="nonzero" opacity="0.1" />
85
+ </g>
86
+ </g>
87
+ </svg>
88
+ </Wrapper>
89
+ </template>
@@ -0,0 +1,8 @@
1
+ const paths = {
2
+ body: 'M113.876 132.295c.91 2.705 21.818 65.749-6.184 65.397H77.846c-27.898.35-7.248-62.228-6.195-65.365-19.954-2.157-47.848-9.752-55.173-35.81-3.673-1.957-6.497-3.081-6.497-3.081l4.667-5.333S-3.096 89.64 1.109 85.436s13.333-15.744 13.333-15.744-11.23 2.103-9.128 0c1.044-1.044 6.153-3.788 12.67-8.442 3.162-9.69 8.325-17.38 14.502-23.48-4.482-10.424-.853-20.191 1.822-21.206 2.226-.83 14.75 3.197 21.214 5.384 4.043-6.006 6.53-12.307 6.53-12.307l5.333 4.667S65.846-3.436 70.05.769s15.744 13.334 15.744 13.334-2.103-11.231 0-9.129c2.051 2.052 10.667 19.795 27.436 33.077-9.487-7.436-22-14.41-37.949-21.23-10.77 4.615-19.897 9.076-27.641 13.64 8.462-5.743 14.41-20.82 14.41-20.82l5.334 4.667S65.846-3.436 70.05.769c4.2 4.2 15.712 13.308 15.744 13.334-.008-.041-2.099-11.227 0-9.129.862.863 2.885 4.5 6.187 9.412l.48-.018v-.009s.052 0 .153.004l.154-.004c.306.019.832.04 1.554.084 3.182-4.76 5.14-8.265 5.985-9.11 2.102-2.102 0 9.129 0 9.129s11.538-9.129 15.743-13.334 2.667 13.539 2.667 13.539L124.05 10s2.475 6.22 6.474 12.204c6.58-2.216 18.582-6.04 20.757-5.23 2.672 1.014 6.296 10.76 1.838 21.17 6.084 6.113 11.15 13.797 14.24 23.454 6.28 4.443 11.16 7.077 12.178 8.094 2.103 2.103-9.128 0-9.128 0s9.128 11.539 13.334 15.744c4.018 4.018-12.005 2.792-13.437 2.675l-.01.097 4.575 5.228s-2.6 1.034-6.054 2.846c-7.188 26.118-34.949 33.806-54.942 36.013z',
3
+ shadow:
4
+ 'M167.36 61.598c6.28 4.443 11.16 7.077 12.178 8.094 2.103 2.103-9.128 0-9.128 0s9.128 11.539 13.334 15.744c4.018 4.018-12.005 2.792-13.437 2.675l-.01.097 4.575 5.228s-2.6 1.034-6.054 2.846c-7.17 26.053-34.81 33.768-54.791 35.996-.72.08-1.433-.184-2.142-.791.847-.136 1.701-.282 2.562-.44 23.176-4.238 50.835-16.837 47.912-53.816-3.869-48.949-50.714-59.804-69.841-62.199-.02-.224-.038-.448-.056-.673 0 0 .667.011 1.878.085a1.95 1.95 0 0 1 .132-.224c3.094-4.646 5.004-8.055 5.836-8.887 2.102-2.102 0 9.129 0 9.129s11.538-9.129 15.743-13.334 2.667 13.539 2.667 13.539L124.05 10s2.508 6.302 6.554 12.323c1.037-.522 2.307-.958 2.492-1.02 10.446-3.511 16.508-4.954 18.185-4.329 2.672 1.014 6.296 10.76 1.838 21.17 6.084 6.113 11.15 13.797 14.24 23.454z',
5
+ legs: 'M8.846 3.692C7.36 11.59 4.59 20.615 8.692 28.205c.667 1.23-1.897 1.487-2.513 1.59C4.744 29.949 3 29.333 2.231 28c-4.36-8.051.102-18.205 1.743-26.667C4.18.205 9.154 2 8.846 3.693zM14.128 14.359c-.256 4.872 1.026 9.692 2.667 14.205.872 2.36 6.564.872 5.743-1.436-1.487-4.154-2.717-8.513-2.615-12.923.103-3.23 1.026-6.308 2.256-9.282 1.129-2.82-4.153-2.718-5.025-.564h-.513c-1.282 3.23-2.359 6.513-2.513 10z',
6
+ }
7
+
8
+ export default paths