Skip to content

Commit 4869dee

Browse files
committed
feat(panelmenu): implement styles
1 parent a6a9146 commit 4869dee

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed

src/primevue/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import toast from "./toast/toast";
1919
import select from "./select/select";
2020
import inputMask from "./inputMask/inputMask";
2121
import breadcrumb from "@/primevue/breadcrumb/breadcrumb";
22+
import panelmenu from "./panelMenu/panelMenu";
2223
import tree from "./tree/tree";
2324

2425
import { deDE } from "@/config/locale";
@@ -44,6 +45,7 @@ export const RisUiTheme = {
4445
inputMask,
4546
breadcrumb,
4647
tree,
48+
panelmenu,
4749
};
4850

4951
export const RisUiLocale = {
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { html } from "@/lib/tags";
2+
import { Meta, StoryObj } from "@storybook/vue3";
3+
import PanelMenu from "primevue/panelmenu";
4+
import { MenuItem } from "primevue/menuitem";
5+
import { ref } from "vue";
6+
7+
const meta: Meta<typeof PanelMenu> = {
8+
component: PanelMenu,
9+
tags: ["autodocs"],
10+
args: {},
11+
12+
argTypes: {},
13+
};
14+
15+
type MenuItemWithCount = MenuItem & {
16+
count?: string;
17+
items?: MenuItemWithCount[] | undefined;
18+
};
19+
20+
const items: MenuItemWithCount[] = [
21+
{
22+
label: "Alle Dokumentarten",
23+
count: "1.024",
24+
key: "all",
25+
},
26+
{
27+
label: "Gesetze & Verordnungen",
28+
count: "1.024",
29+
key: "N",
30+
},
31+
{
32+
label: "Gerichtsentscheidungen",
33+
count: "1.024",
34+
key: "R",
35+
items: [
36+
{ label: "Alle Gerichtsentscheidungen", count: "1.024", key: "R-A" },
37+
{ label: "Urteil", count: "1.024", key: "R-U" },
38+
{ label: "Beschluss", count: "1.024", key: "R-B" },
39+
{ label: "Sonstige Entscheidungen", count: "1.024", key: "R-S" },
40+
],
41+
},
42+
];
43+
44+
export default meta;
45+
46+
export const Default: StoryObj<typeof meta> = {
47+
render: (args) => ({
48+
components: { PanelMenu },
49+
setup() {
50+
const expandedKeys = ref({ R: true, "R-A": true });
51+
return { args, items, expandedKeys };
52+
},
53+
template: html`<label class="ris-label2-regular mb-16 block"
54+
>Dokumentarten</label
55+
><PanelMenu
56+
:model="items"
57+
v-model:expandedKeys="expandedKeys"
58+
class="md:w-200 w-full"
59+
multiple
60+
><template #submenuicon><i /></template
61+
></PanelMenu>`,
62+
}),
63+
};
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { tw } from "@/lib/tags";
2+
import { PanelMenuPassThroughOptions } from "primevue/panelmenu";
3+
4+
const pointer = tw`cursor-pointer`;
5+
const selected = tw`ris-label2-bold border-l-blue-800 bg-blue-200 text-black`;
6+
const hover = tw`hover:bg-blue-200`;
7+
const hoverSelected = tw`hover:bg-blue-300`;
8+
9+
const focusVisible = tw`focus-visible:outline-none focus-visible:outline-4 focus-visible:outline-offset-4 focus-visible:outline-blue-800`;
10+
const panelMenu: PanelMenuPassThroughOptions = {
11+
root: {
12+
class: tw`text-blue-800`,
13+
},
14+
15+
header: ({ context }) => {
16+
const base = tw`group flex h-64 items-center border-l-4 border-transparent py-8 pl-10 pr-20`;
17+
return {
18+
class: {
19+
[base]: true,
20+
[focusVisible]: true,
21+
[pointer]: true,
22+
[selected]: context.active,
23+
[hover]: !context.active,
24+
[hoverSelected]: context.active,
25+
},
26+
};
27+
},
28+
content: {
29+
class: tw`ml-28 mt-8`,
30+
},
31+
rootList: {
32+
class: tw`focus-visible:outline-none`,
33+
},
34+
panel: {
35+
class: tw`focus-visible:outline-none`,
36+
},
37+
itemLink: {
38+
class: tw`focus-visible:bg-black`,
39+
},
40+
itemContent: ({ context }) => {
41+
const base = tw`group flex h-48 items-center border-l-4 border-transparent py-8 pl-10 pr-20`;
42+
const focused = tw`outline-none outline-4 outline-offset-4 outline-blue-800`;
43+
44+
return {
45+
class: {
46+
[base]: true,
47+
[focused]: context.focused,
48+
[pointer]: true,
49+
[selected]: context.active,
50+
[hover]: !context.active,
51+
[hoverSelected]: context.active,
52+
},
53+
};
54+
},
55+
};
56+
57+
export default panelMenu;

0 commit comments

Comments
 (0)