@nexxtmove/ui 1.25.0 → 1.26.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.
package/dist/nuxt.js CHANGED
@@ -28,7 +28,10 @@ var s = {
28
28
  NexxtInputField: "components/molecules/InputField/InputField.vue",
29
29
  NexxtInputSelect: "components/molecules/InputSelect/InputSelect.vue",
30
30
  NexxtModalFooter: "components/molecules/ModalFooter/ModalFooter.vue",
31
+ NexxtPageCard: "components/molecules/PageCard/PageCard.vue",
31
32
  NexxtPageContainer: "components/molecules/PageContainer/PageContainer.vue",
33
+ NexxtPageMockup: "components/molecules/PageMockup/PageMockup.vue",
34
+ NexxtPageTypeTile: "components/molecules/PageTypeTile/PageTypeTile.vue",
32
35
  NexxtPagination: "components/molecules/Pagination/Pagination.vue",
33
36
  NexxtPropertyCard: "components/molecules/PropertyCard/PropertyCard.vue",
34
37
  NexxtSelect: "components/molecules/Select/Select.vue",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nexxtmove/ui",
3
3
  "type": "module",
4
- "version": "1.25.0",
4
+ "version": "1.26.0",
5
5
  "exports": {
6
6
  ".": {
7
7
  "types": "./dist/index.d.ts",
@@ -0,0 +1,27 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <rect x="0" y="32" width="150" height="8" rx="4" fill="#E2E8F0"></rect>
8
+ <rect x="0" y="46" width="100" height="6" rx="3" fill="#CBD5E1"></rect>
9
+ <g>
10
+ <rect x="0" y="62" width="100" height="44" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
11
+ <rect x="6" y="68" width="88" height="22" rx="4" fill="#FBE4E4"></rect>
12
+ <rect x="6" y="96" width="20" height="4" rx="2" fill="#E2E8F0"></rect>
13
+ </g>
14
+ <g>
15
+ <rect x="110" y="62" width="100" height="44" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
16
+ <rect x="116" y="68" width="88" height="22" rx="4" fill="#FDEBDD"></rect>
17
+ <rect x="116" y="96" width="20" height="4" rx="2" fill="#E2E8F0"></rect>
18
+ </g>
19
+ <g>
20
+ <rect x="220" y="62" width="100" height="44" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
21
+ <rect x="226" y="68" width="88" height="22" rx="4" fill="#E3E8FD"></rect>
22
+ <rect x="226" y="96" width="20" height="4" rx="2" fill="#E2E8F0"></rect>
23
+ </g>
24
+ <rect x="0" y="116" width="320" height="14" rx="4" fill="#7C7CF0"></rect>
25
+ <rect x="8" y="121" width="60" height="4" rx="2" fill="#FFFFFF"></rect>
26
+ <rect x="296" y="121" width="16" height="4" rx="2" fill="#FFFFFF"></rect>
27
+ </svg>
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <rect x="0" y="118" width="150" height="8" rx="4" fill="#E2E8F0"></rect>
8
+ <rect x="0" y="132" width="100" height="6" rx="3" fill="#CBD5E1"></rect>
9
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <rect x="0" y="34" width="180" height="10" rx="4" fill="#E2E8F0"></rect>
8
+ <rect x="0" y="58" width="320" height="6" rx="3" fill="#CBD5E1"></rect>
9
+ <rect x="0" y="72" width="320" height="6" rx="3" fill="#CBD5E1"></rect>
10
+ <rect x="0" y="86" width="320" height="6" rx="3" fill="#CBD5E1"></rect>
11
+ <rect x="0" y="100" width="320" height="6" rx="3" fill="#CBD5E1"></rect>
12
+ <rect x="0" y="114" width="160" height="6" rx="3" fill="#CBD5E1"></rect>
13
+ </svg>
@@ -0,0 +1,34 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <g>
8
+ <rect x="0" y="34" width="100" height="100" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
9
+ <rect x="10" y="44" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
10
+ <rect x="10" y="58" width="60" height="10" rx="3" fill="#CBD5E1"></rect>
11
+ <rect x="10" y="88" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
12
+ <rect x="10" y="100" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
13
+ <rect x="10" y="112" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
14
+ <rect x="10" y="120" width="80" height="8" rx="4" fill="#E2E8F0"></rect>
15
+ </g>
16
+ <g>
17
+ <rect x="110" y="34" width="100" height="100" rx="6" fill="#E3E3FB" stroke="#7C7CF0"></rect>
18
+ <rect x="120" y="44" width="40" height="6" rx="3" fill="#7C7CF0"></rect>
19
+ <rect x="120" y="58" width="60" height="10" rx="3" fill="#CBD5E1"></rect>
20
+ <rect x="120" y="88" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
21
+ <rect x="120" y="100" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
22
+ <rect x="120" y="112" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
23
+ <rect x="120" y="120" width="80" height="8" rx="4" fill="#7C7CF0"></rect>
24
+ </g>
25
+ <g>
26
+ <rect x="220" y="34" width="100" height="100" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
27
+ <rect x="230" y="44" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
28
+ <rect x="230" y="58" width="60" height="10" rx="3" fill="#CBD5E1"></rect>
29
+ <rect x="230" y="88" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
30
+ <rect x="230" y="100" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
31
+ <rect x="230" y="112" width="70" height="4" rx="2" fill="#E2E8F0"></rect>
32
+ <rect x="230" y="120" width="80" height="8" rx="4" fill="#E2E8F0"></rect>
33
+ </g>
34
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <g>
8
+ <rect x="0" y="34" width="155" height="64" rx="6" fill="#E3E8FD"></rect>
9
+ <rect x="0" y="106" width="90" height="7" rx="3" fill="#E2E8F0"></rect>
10
+ <rect x="0" y="118" width="60" height="5" rx="2" fill="#CBD5E1"></rect>
11
+ <rect x="115" y="106" width="40" height="12" rx="6" fill="#E3E3FB"></rect>
12
+ </g>
13
+ <g>
14
+ <rect x="165" y="34" width="155" height="64" rx="6" fill="#E3E8FD"></rect>
15
+ <rect x="165" y="106" width="90" height="7" rx="3" fill="#E2E8F0"></rect>
16
+ <rect x="165" y="118" width="60" height="5" rx="2" fill="#CBD5E1"></rect>
17
+ <rect x="280" y="106" width="40" height="12" rx="6" fill="#E3E3FB"></rect>
18
+ </g>
19
+ </svg>
@@ -0,0 +1,46 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <g>
8
+ <rect x="0" y="34" width="100" height="96" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
9
+ <rect x="16" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
10
+ <rect x="28" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
11
+ <rect x="40" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
12
+ <rect x="52" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
13
+ <rect x="64" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
14
+ <rect x="10" y="64" width="80" height="5" rx="2" fill="#E2E8F0"></rect>
15
+ <rect x="10" y="76" width="80" height="5" rx="2" fill="#E2E8F0"></rect>
16
+ <rect x="10" y="88" width="50" height="5" rx="2" fill="#E2E8F0"></rect>
17
+ <circle cx="20" cy="114" r="8" fill="#FBE4E4"></circle>
18
+ <rect x="34" y="111" width="40" height="6" rx="3" fill="#CBD5E1"></rect>
19
+ </g>
20
+ <g>
21
+ <rect x="110" y="34" width="100" height="96" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
22
+ <rect x="126" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
23
+ <rect x="138" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
24
+ <rect x="150" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
25
+ <rect x="162" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
26
+ <rect x="174" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
27
+ <rect x="120" y="64" width="80" height="5" rx="2" fill="#E2E8F0"></rect>
28
+ <rect x="120" y="76" width="80" height="5" rx="2" fill="#E2E8F0"></rect>
29
+ <rect x="120" y="88" width="50" height="5" rx="2" fill="#E2E8F0"></rect>
30
+ <circle cx="130" cy="114" r="8" fill="#FDEBDD"></circle>
31
+ <rect x="144" y="111" width="40" height="6" rx="3" fill="#CBD5E1"></rect>
32
+ </g>
33
+ <g>
34
+ <rect x="220" y="34" width="100" height="96" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
35
+ <rect x="236" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
36
+ <rect x="248" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
37
+ <rect x="260" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
38
+ <rect x="272" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
39
+ <rect x="284" y="44" width="8" height="8" rx="2" fill="#F6D97A"></rect>
40
+ <rect x="230" y="64" width="80" height="5" rx="2" fill="#E2E8F0"></rect>
41
+ <rect x="230" y="76" width="80" height="5" rx="2" fill="#E2E8F0"></rect>
42
+ <rect x="230" y="88" width="50" height="5" rx="2" fill="#E2E8F0"></rect>
43
+ <circle cx="240" cy="114" r="8" fill="#E3E8FD"></circle>
44
+ <rect x="254" y="111" width="40" height="6" rx="3" fill="#CBD5E1"></rect>
45
+ </g>
46
+ </svg>
@@ -0,0 +1,22 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <g>
8
+ <rect x="0" y="34" width="24" height="24" rx="6" fill="#FBE4E4"></rect>
9
+ <rect x="34" y="38" width="140" height="7" rx="3" fill="#E2E8F0"></rect>
10
+ <rect x="34" y="50" width="220" height="5" rx="2" fill="#CBD5E1"></rect>
11
+ </g>
12
+ <g>
13
+ <rect x="0" y="70" width="24" height="24" rx="6" fill="#FDEBDD"></rect>
14
+ <rect x="34" y="74" width="140" height="7" rx="3" fill="#E2E8F0"></rect>
15
+ <rect x="34" y="86" width="220" height="5" rx="2" fill="#CBD5E1"></rect>
16
+ </g>
17
+ <g>
18
+ <rect x="0" y="106" width="24" height="24" rx="6" fill="#E3E8FD"></rect>
19
+ <rect x="34" y="110" width="140" height="7" rx="3" fill="#E2E8F0"></rect>
20
+ <rect x="34" y="122" width="220" height="5" rx="2" fill="#CBD5E1"></rect>
21
+ </g>
22
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 150">
2
+ <rect x="0" y="0" width="20" height="20" rx="5" fill="#E2E8F0"></rect>
3
+ <rect x="26" y="7" width="40" height="6" rx="3" fill="#E2E8F0"></rect>
4
+ <rect x="240" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
5
+ <rect x="268" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
6
+ <rect x="296" y="7" width="22" height="6" rx="3" fill="#E2E8F0"></rect>
7
+ <rect x="0" y="32" width="150" height="8" rx="4" fill="#E2E8F0"></rect>
8
+ <rect x="0" y="46" width="100" height="6" rx="3" fill="#CBD5E1"></rect>
9
+ <g>
10
+ <rect x="0" y="62" width="100" height="44" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
11
+ <rect x="6" y="68" width="88" height="22" rx="4" fill="#FBE4E4"></rect>
12
+ <rect x="6" y="96" width="20" height="4" rx="2" fill="#E2E8F0"></rect>
13
+ </g>
14
+ <g>
15
+ <rect x="110" y="62" width="100" height="44" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
16
+ <rect x="116" y="68" width="88" height="22" rx="4" fill="#FDEBDD"></rect>
17
+ <rect x="116" y="96" width="20" height="4" rx="2" fill="#E2E8F0"></rect>
18
+ </g>
19
+ <g>
20
+ <rect x="220" y="62" width="100" height="44" rx="6" fill="#FFFFFF" stroke="#E2E8F0"></rect>
21
+ <rect x="226" y="68" width="88" height="22" rx="4" fill="#E3E8FD"></rect>
22
+ <rect x="226" y="96" width="20" height="4" rx="2" fill="#E2E8F0"></rect>
23
+ </g>
24
+ </svg>
@@ -0,0 +1,92 @@
1
+ <script lang="ts" setup>
2
+ import NexxtIcon, { type NexxtIconName } from '../../atoms/Icon/Icon.vue'
3
+ import NexxtPageMockup, { type NexxtPageMockupType } from '../PageMockup/PageMockup.vue'
4
+
5
+ export interface NexxtPageCardProps {
6
+ /** Page name, shown in the footer. Truncated on one line. */
7
+ title: string
8
+ /** Icon for the page type, shown before the title. */
9
+ icon?: NexxtIconName
10
+ /** Draws the sketch for this page type in the preview area. The `preview` slot wins when both are given. */
11
+ mockup?: NexxtPageMockupType
12
+ /** Lays a full-card button over the content that emits `select`. Off keeps the card inert. */
13
+ selectable?: boolean
14
+ /** Whether this card is the current one: draws the blue border. Only does something with `selectable`. */
15
+ selected?: boolean
16
+ /** The card is being dragged: dims it and draws the blue border, so the list shows where it came from. */
17
+ dragging?: boolean
18
+ }
19
+
20
+ export type NexxtPageCardSlots = {
21
+ /** The preview area above the footer, for a mockup or thumbnail of the page. Empty shows a plain surface. */
22
+ preview?(): unknown
23
+ /** Right side of the footer, for a menu. Kept above the select button so a press there never selects. */
24
+ actions?(): unknown
25
+ }
26
+
27
+ defineOptions({ name: 'NexxtPageCard' })
28
+
29
+ const props = withDefaults(defineProps<NexxtPageCardProps>(), {
30
+ icon: undefined,
31
+ mockup: undefined,
32
+ selectable: false,
33
+ selected: false,
34
+ dragging: false,
35
+ })
36
+
37
+ const emit = defineEmits<{
38
+ /** The card was chosen. No payload: the consumer knows which page it rendered. */
39
+ select: []
40
+ }>()
41
+
42
+ // The heading may not sit inside a button, so like TemplateCard the select button is a stretched
43
+ // sibling under the content, with the actions layered above it
44
+ defineSlots<NexxtPageCardSlots>()
45
+
46
+ const onSelect = () => {
47
+ if (props.selectable) emit('select')
48
+ }
49
+ </script>
50
+
51
+ <template>
52
+ <div
53
+ class="relative flex w-full flex-col overflow-hidden rounded-xl border bg-white transition-[border-color,opacity] duration-200 ease-out"
54
+ :class="[
55
+ (selectable && selected) || dragging ? 'border-cornflower-blue-500' : 'border-gray-200',
56
+ selectable && !selected && !dragging && 'hover:border-gray-300',
57
+ dragging && 'opacity-60',
58
+ ]"
59
+ >
60
+ <div
61
+ class="relative z-10 h-52 overflow-hidden border-b border-gray-200 bg-white p-3"
62
+ :class="selectable && 'pointer-events-none'"
63
+ >
64
+ <slot name="preview">
65
+ <NexxtPageMockup v-if="mockup" :type="mockup" />
66
+ </slot>
67
+ </div>
68
+
69
+ <div class="relative flex items-center gap-2.5 px-4 py-3">
70
+ <div
71
+ class="relative z-10 flex min-w-0 flex-1 items-center gap-2.5"
72
+ :class="selectable && 'pointer-events-none'"
73
+ >
74
+ <NexxtIcon v-if="icon" :name="icon" class="shrink-0 text-lg text-gray-500" />
75
+ <h3 class="truncate body-semibold text-gray-900">{{ title }}</h3>
76
+ </div>
77
+
78
+ <div v-if="$slots.actions" class="relative z-20 flex shrink-0 items-center">
79
+ <slot name="actions" />
80
+ </div>
81
+ </div>
82
+
83
+ <button
84
+ v-if="selectable"
85
+ type="button"
86
+ :aria-label="title"
87
+ :aria-current="selected ? 'true' : undefined"
88
+ class="absolute inset-0 cursor-pointer rounded-xl focus-visible:outline-3 focus-visible:-outline-offset-3 focus-visible:outline-cornflower-blue-500"
89
+ @click="onSelect"
90
+ />
91
+ </div>
92
+ </template>
@@ -0,0 +1,52 @@
1
+ <script lang="ts">
2
+ export const PAGE_MOCKUP_TYPES = [
3
+ 'introduction',
4
+ 'about',
5
+ 'valuation',
6
+ 'services',
7
+ 'packages',
8
+ 'references',
9
+ 'reviews',
10
+ 'other',
11
+ ] as const
12
+
13
+ export type NexxtPageMockupType = (typeof PAGE_MOCKUP_TYPES)[number]
14
+ </script>
15
+
16
+ <script lang="ts" setup>
17
+ import { computed, type Component } from 'vue'
18
+ import IntroductionSvg from '@ui-assets/svg/page_mockup_introduction.svg'
19
+ import AboutSvg from '@ui-assets/svg/page_mockup_about.svg'
20
+ import ValuationSvg from '@ui-assets/svg/page_mockup_valuation.svg'
21
+ import ServicesSvg from '@ui-assets/svg/page_mockup_services.svg'
22
+ import PackagesSvg from '@ui-assets/svg/page_mockup_packages.svg'
23
+ import ReferencesSvg from '@ui-assets/svg/page_mockup_references.svg'
24
+ import ReviewsSvg from '@ui-assets/svg/page_mockup_reviews.svg'
25
+ import OtherSvg from '@ui-assets/svg/page_mockup_other.svg'
26
+
27
+ export interface NexxtPageMockupProps {
28
+ /** Which kind of proposal page to sketch. */
29
+ type: NexxtPageMockupType
30
+ }
31
+
32
+ defineOptions({ name: 'NexxtPageMockup' })
33
+
34
+ const props = defineProps<NexxtPageMockupProps>()
35
+
36
+ const SKETCHES: Record<NexxtPageMockupType, Component> = {
37
+ introduction: IntroductionSvg,
38
+ about: AboutSvg,
39
+ valuation: ValuationSvg,
40
+ services: ServicesSvg,
41
+ packages: PackagesSvg,
42
+ references: ReferencesSvg,
43
+ reviews: ReviewsSvg,
44
+ other: OtherSvg,
45
+ }
46
+
47
+ const sketch = computed(() => SKETCHES[props.type])
48
+ </script>
49
+
50
+ <template>
51
+ <component :is="sketch" class="size-full" aria-hidden="true" />
52
+ </template>
@@ -0,0 +1,34 @@
1
+ <script lang="ts" setup>
2
+ import NexxtIcon, { type NexxtIconName } from '../../atoms/Icon/Icon.vue'
3
+
4
+ export interface NexxtPageTypeTileProps {
5
+ /** What the tile stands for, e.g. a page type. Shown under the icon. */
6
+ label: string
7
+ icon: NexxtIconName
8
+ /** The tile is being dragged: draws the blue border. The consumer makes it draggable. */
9
+ dragging?: boolean
10
+ }
11
+
12
+ defineOptions({ name: 'NexxtPageTypeTile' })
13
+
14
+ withDefaults(defineProps<NexxtPageTypeTileProps>(), {
15
+ dragging: false,
16
+ })
17
+
18
+ const emit = defineEmits<{
19
+ /** The tile was clicked, as opposed to dragged. */
20
+ select: []
21
+ }>()
22
+ </script>
23
+
24
+ <template>
25
+ <button
26
+ type="button"
27
+ class="flex w-full cursor-grab flex-col items-center gap-2 rounded-xl border bg-white px-3 py-5 text-center transition-colors duration-200 ease-out hover:bg-gray-50 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-cornflower-blue-500 active:cursor-grabbing"
28
+ :class="dragging ? 'border-cornflower-blue-500' : 'border-gray-200 hover:border-gray-300'"
29
+ @click="emit('select')"
30
+ >
31
+ <NexxtIcon :name="icon" class="text-xl text-gray-700" />
32
+ <span class="extra-small-semibold text-gray-900">{{ label }}</span>
33
+ </button>
34
+ </template>
@@ -25,7 +25,10 @@
25
25
  "NexxtInputField": "components/molecules/InputField/InputField.vue",
26
26
  "NexxtInputSelect": "components/molecules/InputSelect/InputSelect.vue",
27
27
  "NexxtModalFooter": "components/molecules/ModalFooter/ModalFooter.vue",
28
+ "NexxtPageCard": "components/molecules/PageCard/PageCard.vue",
28
29
  "NexxtPageContainer": "components/molecules/PageContainer/PageContainer.vue",
30
+ "NexxtPageMockup": "components/molecules/PageMockup/PageMockup.vue",
31
+ "NexxtPageTypeTile": "components/molecules/PageTypeTile/PageTypeTile.vue",
29
32
  "NexxtPagination": "components/molecules/Pagination/Pagination.vue",
30
33
  "NexxtPropertyCard": "components/molecules/PropertyCard/PropertyCard.vue",
31
34
  "NexxtSelect": "components/molecules/Select/Select.vue",
package/src/index.ts CHANGED
@@ -13,6 +13,11 @@ export type { EnergyLabelLetter } from './components/atoms/EnergyLabel/EnergyLab
13
13
  export type { IconType, NexxtIconName } from './components/atoms/Icon/Icon.vue'
14
14
  export type { CustomIconName } from './components/atoms/Icon/customIcons'
15
15
  export type { NexxtTabItem } from './components/molecules/Tabs/Tabs.vue'
16
+ export type {
17
+ NexxtPageCardProps,
18
+ NexxtPageCardSlots,
19
+ } from './components/molecules/PageCard/PageCard.vue'
20
+ export type { NexxtPageMockupType } from './components/molecules/PageMockup/PageMockup.vue'
16
21
  export type {
17
22
  EditorAlignItemsMessages,
18
23
  EditorAlignItemsValue,
@@ -95,7 +100,10 @@ export { default as NexxtInputSelect } from './components/molecules/InputSelect/
95
100
  export { default as NexxtLoader } from './components/atoms/Loader/Loader.vue'
96
101
  export { default as NexxtModal } from './components/organisms/Modal/Modal.vue'
97
102
  export { default as NexxtModalFooter } from './components/molecules/ModalFooter/ModalFooter.vue'
103
+ export { default as NexxtPageCard } from './components/molecules/PageCard/PageCard.vue'
98
104
  export { default as NexxtPageContainer } from './components/molecules/PageContainer/PageContainer.vue'
105
+ export { default as NexxtPageMockup } from './components/molecules/PageMockup/PageMockup.vue'
106
+ export { default as NexxtPageTypeTile } from './components/molecules/PageTypeTile/PageTypeTile.vue'
99
107
  export { default as NexxtPagination } from './components/molecules/Pagination/Pagination.vue'
100
108
  export { default as NexxtPresenceIndicator } from './components/atoms/PresenceIndicator/PresenceIndicator.vue'
101
109
  export { default as NexxtProgressBar } from './components/organisms/ProgressBar/ProgressBar.vue'