Skip to content

Commit a08b390

Browse files
committed
feat: add NeStepper component
1 parent 6ac1f1a commit a08b390

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

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/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)