Skip to content

Commit c31d655

Browse files
authored
feat: add NeStepper and minor fixes (#97)
1 parent 6ac1f1a commit c31d655

File tree

6 files changed

+73
-3
lines changed

6 files changed

+73
-3
lines changed

src/components/NeDropdown.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ref, watch } from 'vue'
1313
1414
export interface Props {
1515
items: NeDropdownItem[]
16-
alignToRight: boolean
16+
alignToRight?: boolean
1717
openMenuAriaLabel?: string
1818
menuClasses?: string
1919
}

src/components/NePaginator.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ function navigateToPage(page: number) {
230230
</template>
231231
<li>
232232
<button
233-
:disabled="currentPage === totalPages"
233+
:disabled="currentPage >= totalPages"
234234
:aria-label="nextLabel"
235235
class="flex h-10 items-center justify-center rounded-e-lg border border-gray-300 bg-white px-4 leading-tight text-gray-500 hover:bg-gray-50 hover:text-gray-700 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-700 dark:bg-gray-950 dark:text-gray-400 dark:hover:bg-gray-900 dark:hover:text-white"
236236
@click="navigateToPage(currentPage + 1)"

src/components/NeStepper.vue

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<!--
2+
Copyright (C) 2025 Nethesis S.r.l.
3+
SPDX-License-Identifier: GPL-3.0-or-later
4+
-->
5+
6+
<script setup lang="ts">
7+
import NeProgressBar from './NeProgressBar.vue'
8+
import { range } from 'lodash-es'
9+
10+
const { totalSteps, currentStep, stepLabel } = defineProps<{
11+
totalSteps: number
12+
currentStep: number
13+
stepLabel: string
14+
}>()
15+
</script>
16+
17+
<template>
18+
<div>
19+
<NeProgressBar :progress="(currentStep / totalSteps) * 100" size="sm" />
20+
<div class="mt-2 flex flex-row">
21+
<div v-for="i in range(1, totalSteps + 1)" :key="i" class="flex grow basis-0 justify-center">
22+
<p
23+
v-if="i === currentStep"
24+
class="text-primary-700 dark:text-primary-500 text-xs font-medium"
25+
>
26+
{{ stepLabel }} {{ currentStep }}/{{ totalSteps }}
27+
</p>
28+
</div>
29+
</div>
30+
</div>
31+
</template>

src/components/NeTableRow.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@ const trCardStyle: Record<Breakpoint, string> = {
1818
}
1919
</script>
2020
<template>
21-
<tr :class="[`grid`, `hover:bg-gray-100 dark:hover:bg-gray-800`, trCardStyle[cardBreakpoint]]">
21+
<tr
22+
:class="[
23+
`grid`,
24+
`transition-colors duration-200 hover:bg-gray-100 dark:hover:bg-gray-800`,
25+
trCardStyle[cardBreakpoint]
26+
]"
27+
>
2228
<slot />
2329
</tr>
2430
</template>

src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export { default as NeDropdownFilter } from './components/NeDropdownFilter.vue'
4040
export { default as NeSortDropdown } from './components/NeSortDropdown.vue'
4141
export { default as NeAvatar } from './components/NeAvatar.vue'
4242
export { default as NeBadgeV2 } from './components/NeBadgeV2.vue'
43+
export { default as NeStepper } from './components/NeStepper.vue'
4344

4445
// types export
4546
export type { NeComboboxOption } from './components/NeCombobox.vue'

stories/NeStepper.stories.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright (C) 2025 Nethesis S.r.l.
2+
// SPDX-License-Identifier: GPL-3.0-or-later
3+
4+
import type { Meta, StoryObj } from '@storybook/vue3-vite'
5+
import { NeStepper } from '../src/main'
6+
7+
const meta = {
8+
title: 'NeStepper',
9+
component: NeStepper,
10+
tags: ['autodocs'],
11+
args: {
12+
totalSteps: 4,
13+
currentStep: 1,
14+
stepLabel: 'Step'
15+
} // default values
16+
} satisfies Meta<typeof NeStepper>
17+
18+
export default meta
19+
type Story = StoryObj<typeof meta>
20+
21+
const defaultTemplate = `<NeStepper v-bind="args" />`
22+
23+
export const Default: Story = {
24+
render: (args) => ({
25+
components: { NeStepper },
26+
setup() {
27+
return { args }
28+
},
29+
template: defaultTemplate
30+
}),
31+
args: {}
32+
}

0 commit comments

Comments
 (0)