@nexxtmove/ui 1.1.3 → 1.1.5
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/components/EnergyLabel/EnergyLabel.vue.d.ts +7 -0
- package/dist/components/ReferenceCard/ReferenceCard.vue.d.ts +45 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +338 -226
- package/dist/nuxt.js +2 -0
- package/package.json +8 -8
- package/src/components/EnergyLabel/EnergyLabel.vue +55 -0
- package/src/components/ReferenceCard/ReferenceCard.vue +146 -0
- package/src/components.json +2 -0
- package/src/index.ts +2 -0
package/dist/nuxt.js
CHANGED
|
@@ -47509,6 +47509,7 @@ var Yw, Xw, Zw, Qw, $w, eT = d((() => {
|
|
|
47509
47509
|
NexxtDatePicker: "components/DatePicker/DatePicker.vue",
|
|
47510
47510
|
NexxtDoughnutChart: "components/DoughnutChart/DoughnutChart.vue",
|
|
47511
47511
|
NexxtDropdownButton: "components/DropdownButton/DropdownButton.vue",
|
|
47512
|
+
NexxtEnergyLabel: "components/EnergyLabel/EnergyLabel.vue",
|
|
47512
47513
|
NexxtFloatingPanel: "components/FloatingPanel/FloatingPanel.vue",
|
|
47513
47514
|
NexxtHeader: "components/Header/Header.vue",
|
|
47514
47515
|
NexxtIcon: "components/Icon/Icon.vue",
|
|
@@ -47521,6 +47522,7 @@ var Yw, Xw, Zw, Qw, $w, eT = d((() => {
|
|
|
47521
47522
|
NexxtProgressBar: "components/ProgressBar/ProgressBar.vue",
|
|
47522
47523
|
NexxtPropertyCard: "components/PropertyCard/PropertyCard.vue",
|
|
47523
47524
|
NexxtPropertyListing: "components/PropertyListing/PropertyListing.vue",
|
|
47525
|
+
NexxtReferenceCard: "components/ReferenceCard/ReferenceCard.vue",
|
|
47524
47526
|
NexxtSelect: "components/Select/Select.vue",
|
|
47525
47527
|
NexxtSidebarMenuItem: "components/SidebarMenuItem/SidebarMenuItem.vue",
|
|
47526
47528
|
NexxtSkeleton: "components/Skeleton/Skeleton.vue",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexxtmove/ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.5",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"@eslint/js": "^10.0.1",
|
|
35
35
|
"@nuxt/kit": "^4.4.8",
|
|
36
36
|
"@nuxt/schema": "^4.4.4",
|
|
37
|
-
"@storybook/addon-a11y": "^10.5.
|
|
37
|
+
"@storybook/addon-a11y": "^10.5.2",
|
|
38
38
|
"@storybook/addon-designs": "^11.1.4",
|
|
39
|
-
"@storybook/addon-docs": "^10.5.
|
|
40
|
-
"@storybook/addon-vitest": "^10.5.
|
|
41
|
-
"@storybook/builder-vite": "^10.5.
|
|
42
|
-
"@storybook/vue3-vite": "^10.5.
|
|
39
|
+
"@storybook/addon-docs": "^10.5.2",
|
|
40
|
+
"@storybook/addon-vitest": "^10.5.2",
|
|
41
|
+
"@storybook/builder-vite": "^10.5.2",
|
|
42
|
+
"@storybook/vue3-vite": "^10.5.2",
|
|
43
43
|
"@tailwindcss/vite": "^4.3.1",
|
|
44
44
|
"@types/node": "^26.0.1",
|
|
45
45
|
"@types/react": "^19.2.17",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"eslint": "^10.6.0",
|
|
54
54
|
"eslint-config-prettier": "^10.1.8",
|
|
55
55
|
"eslint-plugin-prettier": "^5.5.6",
|
|
56
|
-
"eslint-plugin-storybook": "10.5.
|
|
56
|
+
"eslint-plugin-storybook": "10.5.2",
|
|
57
57
|
"eslint-plugin-vue": "^10.9.2",
|
|
58
58
|
"flag-icons": "^7.5.0",
|
|
59
59
|
"globals": "^17.7.0",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"react": "^19.2.7",
|
|
64
64
|
"react-dom": "^19.2.7",
|
|
65
65
|
"remark-frontmatter": "^5.0.0",
|
|
66
|
-
"storybook": "^10.5.
|
|
66
|
+
"storybook": "^10.5.2",
|
|
67
67
|
"typescript-eslint": "^8.62.0",
|
|
68
68
|
"vite": "^8.1.0",
|
|
69
69
|
"vite-plugin-dts": "^5.0.3",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
|
|
4
|
+
export type EnergyLabelLetter =
|
|
5
|
+
| 'A++++'
|
|
6
|
+
| 'A+++'
|
|
7
|
+
| 'A++'
|
|
8
|
+
| 'A+'
|
|
9
|
+
| 'A'
|
|
10
|
+
| 'B'
|
|
11
|
+
| 'C'
|
|
12
|
+
| 'D'
|
|
13
|
+
| 'E'
|
|
14
|
+
| 'F'
|
|
15
|
+
| 'G'
|
|
16
|
+
|
|
17
|
+
interface NexxtEnergyLabelProps {
|
|
18
|
+
label: EnergyLabelLetter | Lowercase<EnergyLabelLetter>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const COLORS: Record<EnergyLabelLetter, string> = {
|
|
22
|
+
'A++++': '#00953F',
|
|
23
|
+
'A+++': '#00953F',
|
|
24
|
+
'A++': '#00953F',
|
|
25
|
+
'A+': '#00953F',
|
|
26
|
+
A: '#00953F',
|
|
27
|
+
B: '#52AE32',
|
|
28
|
+
C: '#A5CE6D',
|
|
29
|
+
D: '#FFCC00',
|
|
30
|
+
E: '#F9A93C',
|
|
31
|
+
F: '#EF7D34',
|
|
32
|
+
G: '#E63329',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
defineOptions({
|
|
36
|
+
name: 'NexxtEnergyLabel',
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const { label } = defineProps<NexxtEnergyLabelProps>()
|
|
40
|
+
|
|
41
|
+
const normalized = computed(() => label.toUpperCase() as EnergyLabelLetter)
|
|
42
|
+
|
|
43
|
+
const color = computed(() => COLORS[normalized.value])
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
<template>
|
|
47
|
+
<span
|
|
48
|
+
role="img"
|
|
49
|
+
:aria-label="`Energielabel ${normalized}`"
|
|
50
|
+
class="relative isolate mr-3 inline-flex h-6 items-center justify-center rounded-l px-2 extra-small-semibold text-white after:absolute after:top-1/2 after:left-full after:size-4.25 after:-translate-x-1/2 after:-translate-y-1/2 after:rotate-45 after:rounded-tr after:bg-(--energy-label-color) after:content-['']"
|
|
51
|
+
:style="{ backgroundColor: color, '--energy-label-color': color }"
|
|
52
|
+
>
|
|
53
|
+
<span aria-hidden="true" class="relative z-10">{{ normalized }}</span>
|
|
54
|
+
</span>
|
|
55
|
+
</template>
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import NexxtButton from '../Button/Button.vue'
|
|
4
|
+
import NexxtCheckbox from '../Checkbox/Checkbox.vue'
|
|
5
|
+
import NexxtEnergyLabel, { type EnergyLabelLetter } from '../EnergyLabel/EnergyLabel.vue'
|
|
6
|
+
import NexxtIcon from '../Icon/Icon.vue'
|
|
7
|
+
|
|
8
|
+
export interface ProposalReference {
|
|
9
|
+
index: number
|
|
10
|
+
postalCode: string
|
|
11
|
+
streetName: string
|
|
12
|
+
houseNumber: number
|
|
13
|
+
houseType: string
|
|
14
|
+
city: string
|
|
15
|
+
mainImageUrl: string | null
|
|
16
|
+
latitude: number
|
|
17
|
+
longitude: number
|
|
18
|
+
useSurface: number | null
|
|
19
|
+
parcelSurface: number | null
|
|
20
|
+
buildYear: number | null
|
|
21
|
+
volume: number | null
|
|
22
|
+
energyLabel: string | null
|
|
23
|
+
garage: string | null
|
|
24
|
+
insulation: string | null
|
|
25
|
+
shedStorageType: string | null
|
|
26
|
+
saleDate: string | null
|
|
27
|
+
dateOnOfferSince: string | null
|
|
28
|
+
transportDate: string | null
|
|
29
|
+
salePrice: string | null
|
|
30
|
+
indexedSalePrice: string | null
|
|
31
|
+
pricePerSquareMeter: string | null
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface NexxtReferenceCardProps {
|
|
35
|
+
reference: ProposalReference
|
|
36
|
+
selectedLabel?: string
|
|
37
|
+
unselectedLabel?: string
|
|
38
|
+
detailsLabel?: string
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
defineOptions({ name: 'NexxtReferenceCard' })
|
|
42
|
+
|
|
43
|
+
const {
|
|
44
|
+
reference,
|
|
45
|
+
selectedLabel = 'Meegenomen in advies',
|
|
46
|
+
unselectedLabel = 'Selecteer deze woning',
|
|
47
|
+
detailsLabel = 'Meer details',
|
|
48
|
+
} = defineProps<NexxtReferenceCardProps>()
|
|
49
|
+
|
|
50
|
+
const selected = defineModel<boolean>({ default: false })
|
|
51
|
+
|
|
52
|
+
defineEmits<{ details: [reference: ProposalReference] }>()
|
|
53
|
+
|
|
54
|
+
const address = computed(() => `${reference.streetName} ${reference.houseNumber}`)
|
|
55
|
+
|
|
56
|
+
const location = computed(() => `${reference.postalCode} ${reference.city}`)
|
|
57
|
+
|
|
58
|
+
const energyLabel = computed(() => (reference.energyLabel ?? null) as EnergyLabelLetter | null)
|
|
59
|
+
|
|
60
|
+
const saleDate = computed(() => {
|
|
61
|
+
if (!reference.saleDate) return null
|
|
62
|
+
|
|
63
|
+
const date = new Date(reference.saleDate)
|
|
64
|
+
if (Number.isNaN(date.getTime())) return reference.saleDate
|
|
65
|
+
|
|
66
|
+
return new Intl.DateTimeFormat('nl-NL', {
|
|
67
|
+
day: '2-digit',
|
|
68
|
+
month: '2-digit',
|
|
69
|
+
year: 'numeric',
|
|
70
|
+
}).format(date)
|
|
71
|
+
})
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<template>
|
|
75
|
+
<div
|
|
76
|
+
role="checkbox"
|
|
77
|
+
:aria-checked="selected"
|
|
78
|
+
:aria-label="`${address}, ${location}`"
|
|
79
|
+
tabindex="0"
|
|
80
|
+
:class="[
|
|
81
|
+
'@container flex w-full cursor-pointer flex-col overflow-hidden rounded-lg border transition-colors duration-200',
|
|
82
|
+
'focus-visible:ring-2 focus-visible:ring-cornflower-blue-400 focus-visible:ring-offset-2 focus-visible:outline-none',
|
|
83
|
+
selected ? 'border-cornflower-blue-500' : 'border-gray-200',
|
|
84
|
+
]"
|
|
85
|
+
@click="selected = !selected"
|
|
86
|
+
@keydown.space.prevent="selected = !selected"
|
|
87
|
+
@keydown.enter.prevent="selected = !selected"
|
|
88
|
+
>
|
|
89
|
+
<div class="flex flex-col items-stretch bg-white @lg:flex-row">
|
|
90
|
+
<div
|
|
91
|
+
class="relative h-40 w-full self-stretch overflow-hidden bg-gray-100 @lg:h-auto @lg:w-48 @lg:shrink-0"
|
|
92
|
+
>
|
|
93
|
+
<img
|
|
94
|
+
v-if="reference.mainImageUrl"
|
|
95
|
+
:src="reference.mainImageUrl"
|
|
96
|
+
:alt="address"
|
|
97
|
+
loading="lazy"
|
|
98
|
+
class="h-full w-full object-cover"
|
|
99
|
+
/>
|
|
100
|
+
<div v-else class="flex h-full min-h-32 w-full items-center justify-center">
|
|
101
|
+
<NexxtIcon name="house" class="text-4xl text-gray-500" />
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div
|
|
106
|
+
class="flex min-w-0 flex-1 flex-col justify-center gap-1 border-t border-gray-200 p-4 @lg:border-t-0 @lg:border-l"
|
|
107
|
+
>
|
|
108
|
+
<p class="truncate heading-4">{{ address }}</p>
|
|
109
|
+
<p class="truncate body-normal text-gray-800">{{ location }}</p>
|
|
110
|
+
<div v-if="energyLabel" class="flex items-center justify-between gap-2">
|
|
111
|
+
<span class="body-normal text-gray-800">Energielabel</span>
|
|
112
|
+
<NexxtEnergyLabel :label="energyLabel" />
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<div
|
|
117
|
+
class="flex flex-col justify-center gap-1 border-t border-gray-200 p-4 text-left @lg:min-w-56 @lg:shrink-0 @lg:border-t-0 @lg:border-l"
|
|
118
|
+
>
|
|
119
|
+
<p v-if="reference.salePrice" class="heading-4 whitespace-nowrap">
|
|
120
|
+
{{ reference.salePrice }}
|
|
121
|
+
</p>
|
|
122
|
+
<p v-if="saleDate" class="body-normal text-gray-800">{{ saleDate }}</p>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<div
|
|
127
|
+
:class="[
|
|
128
|
+
'flex flex-wrap items-center justify-between gap-x-4 gap-y-2 border-t px-4 py-2',
|
|
129
|
+
selected
|
|
130
|
+
? 'border-cornflower-blue-500 bg-cornflower-blue-50'
|
|
131
|
+
: 'border-gray-200 bg-gray-50',
|
|
132
|
+
]"
|
|
133
|
+
>
|
|
134
|
+
<div aria-hidden="true" class="pointer-events-none flex min-w-0 items-center gap-3">
|
|
135
|
+
<NexxtCheckbox :model-value="selected" tabindex="-1" />
|
|
136
|
+
<span class="truncate body-normal">
|
|
137
|
+
{{ selected ? selectedLabel : unselectedLabel }}
|
|
138
|
+
</span>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<NexxtButton variant="secondary" @click.stop="$emit('details', reference)">
|
|
142
|
+
{{ detailsLabel }}
|
|
143
|
+
</NexxtButton>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</template>
|
package/src/components.json
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"NexxtDatePicker": "components/DatePicker/DatePicker.vue",
|
|
17
17
|
"NexxtDoughnutChart": "components/DoughnutChart/DoughnutChart.vue",
|
|
18
18
|
"NexxtDropdownButton": "components/DropdownButton/DropdownButton.vue",
|
|
19
|
+
"NexxtEnergyLabel": "components/EnergyLabel/EnergyLabel.vue",
|
|
19
20
|
"NexxtFloatingPanel": "components/FloatingPanel/FloatingPanel.vue",
|
|
20
21
|
"NexxtHeader": "components/Header/Header.vue",
|
|
21
22
|
"NexxtIcon": "components/Icon/Icon.vue",
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
"NexxtProgressBar": "components/ProgressBar/ProgressBar.vue",
|
|
29
30
|
"NexxtPropertyCard": "components/PropertyCard/PropertyCard.vue",
|
|
30
31
|
"NexxtPropertyListing": "components/PropertyListing/PropertyListing.vue",
|
|
32
|
+
"NexxtReferenceCard": "components/ReferenceCard/ReferenceCard.vue",
|
|
31
33
|
"NexxtSelect": "components/Select/Select.vue",
|
|
32
34
|
"NexxtSidebarMenuItem": "components/SidebarMenuItem/SidebarMenuItem.vue",
|
|
33
35
|
"NexxtSkeleton": "components/Skeleton/Skeleton.vue",
|
package/src/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ export { default as NexxtCustomerJourneyTile } from './components/CustomerJourne
|
|
|
19
19
|
export { default as NexxtDatePicker } from './components/DatePicker/DatePicker.vue'
|
|
20
20
|
export { default as NexxtDoughnutChart } from './components/DoughnutChart/DoughnutChart.vue'
|
|
21
21
|
export { default as NexxtDropdownButton } from './components/DropdownButton/DropdownButton.vue'
|
|
22
|
+
export { default as NexxtEnergyLabel } from './components/EnergyLabel/EnergyLabel.vue'
|
|
22
23
|
export { default as NexxtFloatingPanel } from './components/FloatingPanel/FloatingPanel.vue'
|
|
23
24
|
export { default as NexxtHeader } from './components/Header/Header.vue'
|
|
24
25
|
export { default as NexxtIcon } from './components/Icon/Icon.vue'
|
|
@@ -31,6 +32,7 @@ export { default as NexxtPresenceIndicator } from './components/PresenceIndicato
|
|
|
31
32
|
export { default as NexxtProgressBar } from './components/ProgressBar/ProgressBar.vue'
|
|
32
33
|
export { default as NexxtPropertyCard } from './components/PropertyCard/PropertyCard.vue'
|
|
33
34
|
export { default as NexxtPropertyListing } from './components/PropertyListing/PropertyListing.vue'
|
|
35
|
+
export { default as NexxtReferenceCard } from './components/ReferenceCard/ReferenceCard.vue'
|
|
34
36
|
export { default as NexxtSelect } from './components/Select/Select.vue'
|
|
35
37
|
export { default as NexxtSidebarMenuItem } from './components/SidebarMenuItem/SidebarMenuItem.vue'
|
|
36
38
|
export { default as NexxtSkeleton } from './components/Skeleton/Skeleton.vue'
|