@zap-wunschlachen/wl-shared-components 1.0.35 → 1.0.37
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/.github/workflows/playwright.yml +205 -205
- package/.github/workflows/static.yml +61 -61
- package/.github/workflows/update-snapshots.yml +37 -37
- package/.prettierrc +5 -5
- package/.storybook/main.ts +18 -18
- package/.storybook/preview.ts +37 -37
- package/.storybook/storyWrapper.vue +18 -18
- package/.storybook/withVuetifyTheme.decorator.ts +21 -21
- package/App.vue +43 -38
- package/README.md +56 -56
- package/heroicons.ts +75 -75
- package/index.html +19 -19
- package/package.json +67 -67
- package/playwright.config.ts +48 -48
- package/public/audio/test.aac +0 -0
- package/public/background.svg +60 -60
- package/public/style.css +187 -187
- package/public/technologies.svg +22 -22
- package/src/assets/css/base.css +232 -232
- package/src/assets/css/variables.css +109 -109
- package/src/components/Accordion/Accordion.css +59 -59
- package/src/components/Accordion/AccordionGroup.vue +51 -51
- package/src/components/Accordion/AccordionItem.vue +66 -66
- package/src/components/Appointment/Card/Actions.css +54 -54
- package/src/components/Appointment/Card/Actions.vue +99 -99
- package/src/components/Appointment/Card/AnamneseNotification.css +15 -15
- package/src/components/Appointment/Card/AnamneseNotification.vue +23 -23
- package/src/components/Appointment/Card/Card.css +80 -80
- package/src/components/Appointment/Card/Card.vue +93 -93
- package/src/components/Appointment/Card/Details.css +50 -50
- package/src/components/Appointment/Card/Details.vue +43 -43
- package/src/components/Audio/Audio.vue +187 -187
- package/src/components/Audio/Waveform.vue +118 -117
- package/src/components/Button/Button.vue +174 -136
- package/src/components/CheckBox/CheckBox.css +214 -185
- package/src/components/CheckBox/Checkbox.vue +138 -130
- package/src/components/DateInput/DateInput.css +2 -2
- package/src/components/DateInput/DateInput.vue +262 -262
- package/src/components/Dialog/Dialog.css +6 -6
- package/src/components/Dialog/Dialog.vue +38 -29
- package/src/components/EditField/EditField.css +19 -19
- package/src/components/EditField/EditField.vue +202 -202
- package/src/components/ErrorPage/ErrorPage.css +172 -172
- package/src/components/IconBullet/IconBullet.vue +86 -86
- package/src/components/IconBullet/IconBulletList.vue +41 -41
- package/src/components/Icons/AdvanceAppointments.vue +153 -153
- package/src/components/Icons/Audio/CloudFailed.vue +20 -20
- package/src/components/Icons/Audio/CloudSaved.vue +21 -21
- package/src/components/Icons/Audio/Delete.vue +15 -15
- package/src/components/Icons/Audio/Pause.vue +18 -18
- package/src/components/Icons/Audio/Play.vue +15 -15
- package/src/components/Icons/CalendarNotification.vue +126 -126
- package/src/components/Icons/Chair.vue +32 -32
- package/src/components/Icons/ChairNotification.vue +35 -35
- package/src/components/Icons/Circle.vue +66 -66
- package/src/components/Icons/FavIcon.vue +22 -22
- package/src/components/Icons/FilledCircle.vue +11 -11
- package/src/components/Icons/Group3.vue +46 -46
- package/src/components/Icons/RingNotification.vue +54 -54
- package/src/components/Icons/SolidArrowRight.vue +14 -14
- package/src/components/Icons/calendar.vue +17 -17
- package/src/components/Icons/checkbox.vue +19 -19
- package/src/components/Icons/outlineChecked.vue +27 -27
- package/src/components/Icons/play.vue +5 -5
- package/src/components/Input/Input.css +187 -187
- package/src/components/Input/Input.vue +253 -247
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.css +7 -7
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.vue +116 -116
- package/src/components/Laboratory/ChatBoxImage/ChatBoxImage.vue +81 -81
- package/src/components/Laboratory/ChatMessage/ChatMessage.vue +113 -113
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.css +4 -4
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.vue +99 -99
- package/src/components/Laboratory/ChatNotification/ChatNotification.vue +130 -130
- package/src/components/Laboratory/DocumentCard/DocumentCard.css +3 -3
- package/src/components/Laboratory/DocumentCard/DocumentCard.vue +50 -50
- package/src/components/Laboratory/DocumentCard/DocumentCardItem.vue +53 -53
- package/src/components/Laboratory/InfoCard/InfoCard.vue +162 -162
- package/src/components/Laboratory/MainColumnsBar/MainColumnsBar.vue +102 -102
- package/src/components/Laboratory/ProgressCircle/ProgressCircle.vue +152 -152
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.css +33 -33
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.vue +75 -75
- package/src/components/Laboratory/SelectionColumnBar/SelectionColumnBar.vue +92 -92
- package/src/components/Laboratory/StatusNotification/StatusNotification.vue +49 -49
- package/src/components/Laboratory/TagLabel/TagLabel.vue +126 -126
- package/src/components/Laboratory/TagLabelGroup/TagLabelGroup.vue +97 -97
- package/src/components/Laboratory/TicketCard/TicketCard.css +3 -3
- package/src/components/Laboratory/TicketCard/TicketCard.vue +143 -143
- package/src/components/Laboratory/TimeLine/TimeLineEvent.css +18 -18
- package/src/components/Laboratory/TimeLine/TimeLineEvent.vue +119 -119
- package/src/components/Laboratory/TimeLine/Timeline.css +4 -4
- package/src/components/Laboratory/TimeLine/Timeline.vue +30 -30
- package/src/components/Loader/Loader.css +71 -51
- package/src/components/Loader/Loader.vue +1 -0
- package/src/components/MaintenanceBanner/MaintenanceBanner.css +353 -353
- package/src/components/MaintenanceBanner/MaintenanceBanner.vue +127 -127
- package/src/components/MaintenanceBanner/MaintenanceIllustration.vue +54 -54
- package/src/components/Modal/Modal.css +5 -5
- package/src/components/Modal/Modal.vue +22 -22
- package/src/components/NotificationBubble/NotificationBubble.css +4 -4
- package/src/components/NotificationBubble/NotificationBubble.vue +90 -90
- package/src/components/OtpInput/OtpInput.css +39 -39
- package/src/components/OtpInput/OtpInput.vue +151 -151
- package/src/components/PhoneInput/PhoneInput.css +31 -31
- package/src/components/PhoneInput/PhoneInput.vue +113 -113
- package/src/components/Select/Select.css +150 -150
- package/src/components/Select/Select.vue +316 -315
- package/src/components/TextArea/TextArea.css +3 -3
- package/src/components/TextArea/TextArea.vue +126 -126
- package/src/components/TickBox/TickBox.css +49 -49
- package/src/components/TickBox/TickBox.vue +126 -126
- package/src/components/accessibility.css +218 -0
- package/src/components/index.ts +28 -28
- package/src/constants/iconEnums.ts +3 -3
- package/src/i18n/i18n.ts +15 -15
- package/src/i18n/locales/de.json +30 -30
- package/src/i18n/locales/en.json +30 -30
- package/src/index.ts +34 -34
- package/src/main.ts +11 -11
- package/src/plugins/vuetify.ts +141 -141
- package/src/shims-vue.d.ts +10 -10
- package/src/stories/Accordion.stories.ts +650 -650
- package/src/stories/Audio.stories.ts +28 -28
- package/src/stories/Button.stories.ts +263 -263
- package/src/stories/CheckBox.stories.ts +348 -348
- package/src/stories/DateInput.stories.ts +53 -53
- package/src/stories/Dialog.stories.ts +147 -147
- package/src/stories/EditField.stories.ts +78 -78
- package/src/stories/IconBullet/IconBullet.stories.ts +201 -201
- package/src/stories/IconBullet/IconBulletList.stories.ts +275 -275
- package/src/stories/Input.stories.ts +351 -351
- package/src/stories/Laboratory/Cards/AppointmentCard/AppointmentCard.stories.ts +260 -260
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCard.stories.ts +176 -176
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCardItem.stories.ts +119 -119
- package/src/stories/Laboratory/Cards/InfoCard/InfoCard.stories.ts +320 -320
- package/src/stories/Laboratory/Cards/TicketCard/TicketCard.stories.ts +335 -335
- package/src/stories/Laboratory/Chat/ChatBoxImage.stories.ts +82 -82
- package/src/stories/Laboratory/Chat/ChatMessage.stories.ts +198 -198
- package/src/stories/Laboratory/Chat/ChatMessageBadge.stories.ts +204 -204
- package/src/stories/Laboratory/Chat/ChatNotification.stories.ts +144 -144
- package/src/stories/Laboratory/Chat/ProgressLinear.stories.ts +186 -186
- package/src/stories/Laboratory/Chat/StatusNotification.stories.ts +111 -111
- package/src/stories/Laboratory/MainColumnsBar.stories.ts +48 -48
- package/src/stories/Laboratory/ProgressCircle.stories.ts +261 -261
- package/src/stories/Laboratory/SelectionColumnBar.stories.ts +234 -234
- package/src/stories/Laboratory/TagLabel.stories.ts +418 -418
- package/src/stories/Laboratory/TagLabelGroup.stories.ts +234 -234
- package/src/stories/Laboratory/Timeline.stories.ts +403 -403
- package/src/stories/NotificationBubble.stories.ts +194 -194
- package/src/stories/OtpInput.stories.ts +100 -100
- package/src/stories/PhoneInput.stories.ts +52 -52
- package/src/stories/Select.stories.ts +419 -419
- package/src/stories/TextArea.stories.ts +112 -112
- package/src/stories/TickBox.stories.ts +294 -294
- package/src/stories/v-icon.stories.ts +91 -91
- package/src/utils/index.ts +109 -109
- package/src/vite-env.d.ts +1 -1
- package/tests/e2e/README.md +220 -220
- package/tests/e2e/accessibility.spec.ts +638 -638
- package/tests/e2e/accordion.spec.ts +42 -42
- package/tests/e2e/additional-components.spec.ts +437 -437
- package/tests/e2e/all-components.spec.ts +135 -135
- package/tests/e2e/appointment-card.spec.ts +816 -816
- package/tests/e2e/button-fixed.spec.ts +58 -58
- package/tests/e2e/button.spec.ts +76 -76
- package/tests/e2e/checkbox.spec.ts +50 -50
- package/tests/e2e/date-input.spec.ts +46 -46
- package/tests/e2e/debug.spec.ts +51 -51
- package/tests/e2e/dialog.spec.ts +58 -58
- package/tests/e2e/input.spec.ts +55 -55
- package/tests/e2e/laboratory-components.spec.ts +320 -320
- package/tests/e2e/otp-input.spec.ts +50 -50
- package/tests/e2e/select.spec.ts +52 -52
- package/tests/e2e/storybook-utils.ts +59 -59
- package/tests/e2e/test-basic.spec.ts +33 -33
- package/tests/e2e/visual-regression.spec.ts +350 -350
- package/tests/unit/accessibility/component-a11y.spec.ts +469 -0
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts +228 -0
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts.skip +342 -342
- package/tests/unit/components/Accordion/AccordionItem.spec.ts +292 -0
- package/tests/unit/components/Accordion/AccordionItem.spec.ts.skip +383 -383
- package/tests/unit/components/Appointment/AnamneseNotification.spec.ts +176 -0
- package/tests/unit/components/Appointment/Card/Actions.spec.ts +407 -407
- package/tests/unit/components/Appointment/Card/Card.spec.ts +485 -485
- package/tests/unit/components/Appointment/Card/Details.spec.ts +397 -397
- package/tests/unit/components/Audio/Audio.spec.ts +403 -403
- package/tests/unit/components/Audio/Waveform.spec.ts +483 -483
- package/tests/unit/components/Background/Background.spec.ts +177 -0
- package/tests/unit/components/Core/Button.spec.ts +336 -336
- package/tests/unit/components/Core/Checkbox.spec.ts +544 -544
- package/tests/unit/components/Core/DateInput.spec.ts +690 -690
- package/tests/unit/components/Core/Dialog.spec.ts +485 -485
- package/tests/unit/components/Core/EditField.spec.ts +782 -782
- package/tests/unit/components/Core/Input.spec.ts +512 -512
- package/tests/unit/components/Core/Modal.spec.ts +518 -518
- package/tests/unit/components/Core/NotificationBubble.spec.ts +606 -606
- package/tests/unit/components/Core/OtpInput.spec.ts +708 -708
- package/tests/unit/components/Core/PhoneInput.spec.ts +619 -619
- package/tests/unit/components/Core/Select.spec.ts +712 -712
- package/tests/unit/components/Core/TextArea.spec.ts +565 -565
- package/tests/unit/components/Core/TickBox.spec.ts +779 -779
- package/tests/unit/components/ErrorPage/ErrorPage.spec.ts +313 -0
- package/tests/unit/components/ErrorPage/ErrorPageLogo.spec.ts +153 -0
- package/tests/unit/components/IconBullet/IconBullet.spec.ts +356 -356
- package/tests/unit/components/IconBullet/IconBulletList.spec.ts +371 -371
- package/tests/unit/components/Icons/AdvanceAppointments.spec.ts +61 -0
- package/tests/unit/components/Icons/Audio/CloudFailed.spec.ts +108 -108
- package/tests/unit/components/Icons/Audio/CloudSaved.spec.ts +149 -149
- package/tests/unit/components/Icons/Audio/Delete.spec.ts +158 -158
- package/tests/unit/components/Icons/Audio/Pause.spec.ts +208 -208
- package/tests/unit/components/Icons/Audio/Play.spec.ts +217 -217
- package/tests/unit/components/Icons/CalendarNotification.spec.ts +186 -186
- package/tests/unit/components/Icons/Chair.spec.ts +234 -234
- package/tests/unit/components/Icons/ChairNotification.spec.ts +311 -311
- package/tests/unit/components/Icons/Circle.spec.ts +255 -255
- package/tests/unit/components/Icons/FavIcon.spec.ts +251 -251
- package/tests/unit/components/Icons/FilledCircle.spec.ts +274 -274
- package/tests/unit/components/Icons/Group3.spec.ts +355 -355
- package/tests/unit/components/Icons/Logo.spec.ts +228 -0
- package/tests/unit/components/Icons/MiniLogo.spec.ts +38 -0
- package/tests/unit/components/Icons/RingNotification.spec.ts +393 -393
- package/tests/unit/components/Icons/SolidArrowRight.spec.ts +49 -0
- package/tests/unit/components/Icons/calendar.spec.ts +286 -286
- package/tests/unit/components/Icons/checkbox.spec.ts +315 -315
- package/tests/unit/components/Icons/outlineChecked.spec.ts +434 -434
- package/tests/unit/components/Icons/play.spec.ts +308 -308
- package/tests/unit/components/Laboratory/AppointmentCard.spec.ts +167 -167
- package/tests/unit/components/Laboratory/ChatBoxImage.spec.ts +179 -179
- package/tests/unit/components/Laboratory/ChatMessage.spec.ts +263 -263
- package/tests/unit/components/Laboratory/ChatMessageBadge.spec.ts +282 -282
- package/tests/unit/components/Laboratory/ChatNotification.spec.ts +256 -256
- package/tests/unit/components/Laboratory/DocumentCard.spec.ts +228 -228
- package/tests/unit/components/Laboratory/DocumentCardItem.spec.ts +236 -236
- package/tests/unit/components/Laboratory/InfoCard.spec.ts +308 -308
- package/tests/unit/components/Laboratory/MainColumnsBar.spec.ts +251 -251
- package/tests/unit/components/Laboratory/ProgressCircle.spec.ts +290 -290
- package/tests/unit/components/Laboratory/ProgressLinear.spec.ts +275 -275
- package/tests/unit/components/Laboratory/SelectionColumnBar.spec.ts +288 -288
- package/tests/unit/components/Laboratory/StatusNotification.spec.ts +296 -296
- package/tests/unit/components/Laboratory/TagLabel.spec.ts +353 -353
- package/tests/unit/components/Laboratory/TagLabelGroup.spec.ts +377 -377
- package/tests/unit/components/Laboratory/TicketCard.spec.ts +351 -351
- package/tests/unit/components/Laboratory/TimeLineEvent.spec.ts +381 -381
- package/tests/unit/components/Laboratory/Timeline.spec.ts +419 -419
- package/tests/unit/components/Loader/Loader.spec.ts +197 -0
- package/tests/unit/components/MaintenanceBanner/MaintenanceBanner.spec.ts +302 -0
- package/tests/unit/constants/iconEnums.spec.ts +39 -39
- package/tests/unit/i18n/i18n.spec.ts +88 -88
- package/tests/unit/plugins/vuetify.spec.ts +220 -220
- package/tests/unit/setup.ts +189 -189
- package/tests/unit/src/components/index.spec.ts.skip +192 -192
- package/tests/unit/src/index.spec.ts.skip +182 -182
- package/tests/unit/src/main.spec.ts +151 -151
- package/tests/unit/utils/accessibility.spec.ts +318 -0
- package/tsconfig.json +26 -26
- package/vite.config.ts +29 -29
- package/vitest.config.ts +83 -83
|
@@ -1,650 +1,650 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
3
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
4
|
-
import AppointmentCard from '@components/Laboratory/AppointmentCard/AppointmentCard.vue';
|
|
5
|
-
import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
|
|
6
|
-
import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
|
|
7
|
-
import { ref } from 'vue';
|
|
8
|
-
import { action } from '@storybook/addon-actions';
|
|
9
|
-
|
|
10
|
-
// Meta configuration for the Accordion components
|
|
11
|
-
const meta: Meta<typeof AccordionGroup> = {
|
|
12
|
-
title: 'WL/Accordion',
|
|
13
|
-
component: AccordionGroup,
|
|
14
|
-
tags: ['autodocs'],
|
|
15
|
-
argTypes: {
|
|
16
|
-
multiple: {
|
|
17
|
-
control: 'boolean',
|
|
18
|
-
description: 'Allows multiple panels to be open simultaneously.',
|
|
19
|
-
},
|
|
20
|
-
variant: {
|
|
21
|
-
control: 'select',
|
|
22
|
-
options: ['plain', 'outlined'],
|
|
23
|
-
description:
|
|
24
|
-
'Determines the visual style of the accordion items. Options are "plain" or "outlined".',
|
|
25
|
-
},
|
|
26
|
-
variantGroup: {
|
|
27
|
-
control: 'select',
|
|
28
|
-
options: ['inset', 'popout'],
|
|
29
|
-
description:
|
|
30
|
-
'Determines the style of the accordion group, allowing for "inset" or "popout".',
|
|
31
|
-
},
|
|
32
|
-
bgColor: {
|
|
33
|
-
control: 'color',
|
|
34
|
-
description: 'Sets the background color of each AccordionItem.',
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
parameters: {
|
|
38
|
-
docs: {
|
|
39
|
-
description: {
|
|
40
|
-
component: `
|
|
41
|
-
The \`AccordionGroup\` component wraps multiple \`AccordionItem\` components, allowing for a collapsible panel layout. The \`AccordionGroup\` manages the state of which panels are open, and allows for single or multiple panels to be open at a time.
|
|
42
|
-
|
|
43
|
-
### AccordionGroup Props
|
|
44
|
-
- **\`multiple\`**: Boolean to allow multiple panels to be open simultaneously.
|
|
45
|
-
- **\`variantGroup\`**: Specifies the overall styling, either "inset" for embedded or "popout" for standout styling.
|
|
46
|
-
|
|
47
|
-
### AccordionItem Props
|
|
48
|
-
- **\`title\`**: Specifies the header text. Default is "Default Title".
|
|
49
|
-
- **\`text\`**: Specifies the content text within the panel. Default is "Default text".
|
|
50
|
-
- **\`variant\`**: Sets the accordion item style (plain or outlined).
|
|
51
|
-
- **\`value\`**: Unique identifier for the accordion item. Required when used inside an \`AccordionGroup\`.
|
|
52
|
-
- **\`bgColor\`**: Sets the background color of the accordion item.
|
|
53
|
-
|
|
54
|
-
### Slots
|
|
55
|
-
- **\`title\`**: A slot for custom title content in the header.
|
|
56
|
-
- **\`content\`**: A slot for custom content within the accordion panel.
|
|
57
|
-
|
|
58
|
-
### Example Usage
|
|
59
|
-
The following examples demonstrate how to use \`AccordionGroup\` and \`AccordionItem\` components, including custom content in the \`content\` slot and applying custom background colors.
|
|
60
|
-
`,
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
export default meta;
|
|
67
|
-
type Story = StoryObj<typeof meta>;
|
|
68
|
-
|
|
69
|
-
// Define the common template
|
|
70
|
-
const Template: Story = {
|
|
71
|
-
render: (args) => ({
|
|
72
|
-
components: {
|
|
73
|
-
AccordionGroup,
|
|
74
|
-
AccordionItem,
|
|
75
|
-
AppointmentCard,
|
|
76
|
-
DocumentCard,
|
|
77
|
-
DocumentCardItem,
|
|
78
|
-
},
|
|
79
|
-
setup() {
|
|
80
|
-
const panel = ref([]);
|
|
81
|
-
const downloadAction = action('download:all');
|
|
82
|
-
|
|
83
|
-
function handleDownload() {
|
|
84
|
-
downloadAction('Document downloaded');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return {
|
|
88
|
-
args,
|
|
89
|
-
panel,
|
|
90
|
-
downloadAction,
|
|
91
|
-
handleDownload,
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
|
-
template: `
|
|
95
|
-
<div :class="[args.variantGroup === 'inset' ? 'inset-style' : 'popout-style']">
|
|
96
|
-
<AccordionGroup v-bind="args" v-model="panel">
|
|
97
|
-
<!-- Content will be defined in individual stories -->
|
|
98
|
-
</AccordionGroup>
|
|
99
|
-
</div>
|
|
100
|
-
`,
|
|
101
|
-
}),
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
// Story: Outlined variant with inset style
|
|
105
|
-
export const OutlinedInset: Story = {
|
|
106
|
-
...Template,
|
|
107
|
-
args: {
|
|
108
|
-
variant: 'outlined',
|
|
109
|
-
variantGroup: 'inset',
|
|
110
|
-
multiple: false,
|
|
111
|
-
bgColor: '#f5f5f7', // Default background color
|
|
112
|
-
},
|
|
113
|
-
render: (args) => ({
|
|
114
|
-
components: { AccordionGroup, AccordionItem },
|
|
115
|
-
setup() {
|
|
116
|
-
const panel = ref([]);
|
|
117
|
-
|
|
118
|
-
return { args, panel };
|
|
119
|
-
},
|
|
120
|
-
template: `
|
|
121
|
-
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
122
|
-
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
123
|
-
<AccordionItem
|
|
124
|
-
title="What is the cost of a complete denture?"
|
|
125
|
-
text="Sample text goes here..."
|
|
126
|
-
value="panel1"
|
|
127
|
-
:variant="args.variant"
|
|
128
|
-
:bg-color="args.bgColor"
|
|
129
|
-
/>
|
|
130
|
-
</AccordionGroup>
|
|
131
|
-
</div>
|
|
132
|
-
`,
|
|
133
|
-
}),
|
|
134
|
-
parameters: {
|
|
135
|
-
docs: {
|
|
136
|
-
source: {
|
|
137
|
-
code: `
|
|
138
|
-
<template>
|
|
139
|
-
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
140
|
-
<AccordionGroup :multiple="false" variant-group="inset" v-model="panel">
|
|
141
|
-
<AccordionItem
|
|
142
|
-
title="What is the cost of a complete denture?"
|
|
143
|
-
text="Sample text goes here..."
|
|
144
|
-
value="panel1"
|
|
145
|
-
variant="outlined"
|
|
146
|
-
:bg-color="args.bgColor"
|
|
147
|
-
/>
|
|
148
|
-
</AccordionGroup>
|
|
149
|
-
</div>
|
|
150
|
-
</template>
|
|
151
|
-
|
|
152
|
-
<script setup>
|
|
153
|
-
import { ref } from 'vue';
|
|
154
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
155
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
156
|
-
|
|
157
|
-
const panel = ref([]);
|
|
158
|
-
</script>
|
|
159
|
-
`,
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
// Story: Popout style with multiple accordions
|
|
166
|
-
export const PopoutWithMultipleAccordions: Story = {
|
|
167
|
-
...Template,
|
|
168
|
-
args: {
|
|
169
|
-
variant: 'outlined',
|
|
170
|
-
variantGroup: 'accordion',
|
|
171
|
-
multiple: true,
|
|
172
|
-
bgColor: '#f5f5f7', // Default background color
|
|
173
|
-
},
|
|
174
|
-
render: (args) => ({
|
|
175
|
-
components: { AccordionGroup, AccordionItem },
|
|
176
|
-
setup() {
|
|
177
|
-
const panel = ref([]);
|
|
178
|
-
|
|
179
|
-
function selectAll() {
|
|
180
|
-
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
function selectNone() {
|
|
184
|
-
panel.value = [];
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return { args, panel, selectAll, selectNone };
|
|
188
|
-
},
|
|
189
|
-
template: `
|
|
190
|
-
<div>
|
|
191
|
-
<div class="text-center d-flex pb-4">
|
|
192
|
-
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
193
|
-
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
194
|
-
</div>
|
|
195
|
-
|
|
196
|
-
<div class="pb-4">v-model: {{ panel }}</div>
|
|
197
|
-
|
|
198
|
-
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
199
|
-
<AccordionItem
|
|
200
|
-
title="Accordion Item 1"
|
|
201
|
-
text="Content for Accordion Item 1."
|
|
202
|
-
value="panel1"
|
|
203
|
-
:variant="args.variant"
|
|
204
|
-
:bg-color="args.bgColor"
|
|
205
|
-
/>
|
|
206
|
-
<AccordionItem
|
|
207
|
-
title="Accordion Item 2"
|
|
208
|
-
text="Content for Accordion Item 2."
|
|
209
|
-
value="panel2"
|
|
210
|
-
:variant="args.variant"
|
|
211
|
-
:bg-color="args.bgColor"
|
|
212
|
-
/>
|
|
213
|
-
<AccordionItem
|
|
214
|
-
title="Accordion Item 3"
|
|
215
|
-
text="Content for Accordion Item 3."
|
|
216
|
-
value="panel3"
|
|
217
|
-
:variant="args.variant"
|
|
218
|
-
:bg-color="args.bgColor"
|
|
219
|
-
/>
|
|
220
|
-
</AccordionGroup>
|
|
221
|
-
</div>
|
|
222
|
-
`,
|
|
223
|
-
}),
|
|
224
|
-
parameters: {
|
|
225
|
-
docs: {
|
|
226
|
-
source: {
|
|
227
|
-
code: `
|
|
228
|
-
<template>
|
|
229
|
-
<div>
|
|
230
|
-
<div class="text-center d-flex pb-4">
|
|
231
|
-
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
232
|
-
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
233
|
-
</div>
|
|
234
|
-
|
|
235
|
-
<div class="pb-4">v-model: {{ panel }}</div>
|
|
236
|
-
|
|
237
|
-
<AccordionGroup :multiple="true" variant-group="popout" v-model="panel">
|
|
238
|
-
<AccordionItem
|
|
239
|
-
title="Accordion Item 1"
|
|
240
|
-
text="Content for Accordion Item 1."
|
|
241
|
-
value="panel1"
|
|
242
|
-
variant="outlined"
|
|
243
|
-
:bg-color="args.bgColor"
|
|
244
|
-
/>
|
|
245
|
-
<AccordionItem
|
|
246
|
-
title="Accordion Item 2"
|
|
247
|
-
text="Content for Accordion Item 2."
|
|
248
|
-
value="panel2"
|
|
249
|
-
variant="outlined"
|
|
250
|
-
:bg-color="args.bgColor"
|
|
251
|
-
/>
|
|
252
|
-
<AccordionItem
|
|
253
|
-
title="Accordion Item 3"
|
|
254
|
-
text="Content for Accordion Item 3."
|
|
255
|
-
value="panel3"
|
|
256
|
-
variant="outlined"
|
|
257
|
-
:bg-color="args.bgColor"
|
|
258
|
-
/>
|
|
259
|
-
</AccordionGroup>
|
|
260
|
-
</div>
|
|
261
|
-
</template>
|
|
262
|
-
|
|
263
|
-
<script setup>
|
|
264
|
-
import { ref } from 'vue';
|
|
265
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
266
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
267
|
-
|
|
268
|
-
const panel = ref([]);
|
|
269
|
-
|
|
270
|
-
function selectAll() {
|
|
271
|
-
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
function selectNone() {
|
|
275
|
-
panel.value = [];
|
|
276
|
-
}
|
|
277
|
-
</script>
|
|
278
|
-
`,
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
// Story: Pre-Opened Accordion with Inset Style
|
|
285
|
-
export const AccordionWithPreOpenedPanels: Story = {
|
|
286
|
-
...Template,
|
|
287
|
-
args: {
|
|
288
|
-
variant: 'outlined',
|
|
289
|
-
variantGroup: 'accordion',
|
|
290
|
-
multiple: true,
|
|
291
|
-
bgColor: '#f5f5f7', // Default background color
|
|
292
|
-
},
|
|
293
|
-
render: (args) => ({
|
|
294
|
-
components: { AccordionGroup, AccordionItem },
|
|
295
|
-
setup() {
|
|
296
|
-
const panel = ref(['panel1', 'panel3']); // Pre-open panels 1 and 3
|
|
297
|
-
|
|
298
|
-
function selectAll() {
|
|
299
|
-
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
function selectNone() {
|
|
303
|
-
panel.value = [];
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
return { args, panel, selectAll, selectNone };
|
|
307
|
-
},
|
|
308
|
-
template: `
|
|
309
|
-
<div>
|
|
310
|
-
<div class="text-center d-flex pb-4">
|
|
311
|
-
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
312
|
-
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
313
|
-
</div>
|
|
314
|
-
|
|
315
|
-
<div class="pb-4">v-model: {{ panel }}</div>
|
|
316
|
-
|
|
317
|
-
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
318
|
-
<AccordionItem
|
|
319
|
-
title="Accordion Item 1 (Pre-Opened)"
|
|
320
|
-
text="Content for Accordion Item 1."
|
|
321
|
-
value="panel1"
|
|
322
|
-
:variant="args.variant"
|
|
323
|
-
:bg-color="args.bgColor"
|
|
324
|
-
/>
|
|
325
|
-
<AccordionItem
|
|
326
|
-
title="Accordion Item 2"
|
|
327
|
-
text="Content for Accordion Item 2."
|
|
328
|
-
value="panel2"
|
|
329
|
-
:variant="args.variant"
|
|
330
|
-
:bg-color="args.bgColor"
|
|
331
|
-
/>
|
|
332
|
-
<AccordionItem
|
|
333
|
-
title="Accordion Item 3 (Pre-Opened)"
|
|
334
|
-
text="Content for Accordion Item 3."
|
|
335
|
-
value="panel3"
|
|
336
|
-
:variant="args.variant"
|
|
337
|
-
:bg-color="args.bgColor"
|
|
338
|
-
/>
|
|
339
|
-
</AccordionGroup>
|
|
340
|
-
</div>
|
|
341
|
-
`,
|
|
342
|
-
}),
|
|
343
|
-
parameters: {
|
|
344
|
-
docs: {
|
|
345
|
-
source: {
|
|
346
|
-
code: `
|
|
347
|
-
<template>
|
|
348
|
-
<div>
|
|
349
|
-
<div class="text-center d-flex pb-4">
|
|
350
|
-
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
351
|
-
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
352
|
-
</div>
|
|
353
|
-
|
|
354
|
-
<div class="pb-4">v-model: {{ panel }}</div>
|
|
355
|
-
|
|
356
|
-
<AccordionGroup :multiple="true" variant-group="inset" v-model="panel">
|
|
357
|
-
<AccordionItem
|
|
358
|
-
title="Accordion Item 1 (Pre-Opened)"
|
|
359
|
-
text="Content for Accordion Item 1."
|
|
360
|
-
value="panel1"
|
|
361
|
-
variant="outlined"
|
|
362
|
-
:bg-color="args.bgColor"
|
|
363
|
-
/>
|
|
364
|
-
<AccordionItem
|
|
365
|
-
title="Accordion Item 2"
|
|
366
|
-
text="Content for Accordion Item 2."
|
|
367
|
-
value="panel2"
|
|
368
|
-
variant="outlined"
|
|
369
|
-
:bg-color="args.bgColor"
|
|
370
|
-
/>
|
|
371
|
-
<AccordionItem
|
|
372
|
-
title="Accordion Item 3 (Pre-Opened)"
|
|
373
|
-
text="Content for Accordion Item 3."
|
|
374
|
-
value="panel3"
|
|
375
|
-
variant="outlined"
|
|
376
|
-
:bg-color="args.bgColor"
|
|
377
|
-
/>
|
|
378
|
-
</AccordionGroup>
|
|
379
|
-
</div>
|
|
380
|
-
</template>
|
|
381
|
-
|
|
382
|
-
<script setup>
|
|
383
|
-
import { ref } from 'vue';
|
|
384
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
385
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
386
|
-
|
|
387
|
-
const panel = ref(['panel1', 'panel3']);
|
|
388
|
-
|
|
389
|
-
function selectAll() {
|
|
390
|
-
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
function selectNone() {
|
|
394
|
-
panel.value = [];
|
|
395
|
-
}
|
|
396
|
-
</script>
|
|
397
|
-
`,
|
|
398
|
-
},
|
|
399
|
-
},
|
|
400
|
-
},
|
|
401
|
-
};
|
|
402
|
-
|
|
403
|
-
// Story: Accordion with Document Card
|
|
404
|
-
export const AccordionWithDocumentCard: Story = {
|
|
405
|
-
...Template,
|
|
406
|
-
args: {
|
|
407
|
-
variant: 'plain',
|
|
408
|
-
multiple: false,
|
|
409
|
-
bgColor: '#f5f5f7', // Default background color
|
|
410
|
-
},
|
|
411
|
-
render: (args) => ({
|
|
412
|
-
components: {
|
|
413
|
-
AccordionGroup,
|
|
414
|
-
AccordionItem,
|
|
415
|
-
DocumentCard,
|
|
416
|
-
DocumentCardItem,
|
|
417
|
-
},
|
|
418
|
-
setup() {
|
|
419
|
-
const panel = ref([]);
|
|
420
|
-
const downloadAction = action('download:all');
|
|
421
|
-
|
|
422
|
-
function handleDownload() {
|
|
423
|
-
downloadAction('Document downloaded');
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
return { args, panel, downloadAction, handleDownload };
|
|
427
|
-
},
|
|
428
|
-
template: `
|
|
429
|
-
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
430
|
-
<AccordionGroup :multiple="args.multiple" v-model="panel">
|
|
431
|
-
<AccordionItem value="panel1" :variant="args.variant" :bg-color="args.bgColor">
|
|
432
|
-
<template #title>
|
|
433
|
-
<h3>Document Card</h3>
|
|
434
|
-
</template>
|
|
435
|
-
<template #content>
|
|
436
|
-
<DocumentCard title="Attachments" @download:all="downloadAction">
|
|
437
|
-
<DocumentCardItem
|
|
438
|
-
header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
|
|
439
|
-
subheader="Uploaded 06.09.24 09:43"
|
|
440
|
-
icon="mdi-download"
|
|
441
|
-
@click:icon="handleDownload"
|
|
442
|
-
/>
|
|
443
|
-
<DocumentCardItem
|
|
444
|
-
header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
|
|
445
|
-
subheader="Uploaded 07.09.24 10:15"
|
|
446
|
-
icon="mdi-file"
|
|
447
|
-
@click:icon="handleDownload"
|
|
448
|
-
/>
|
|
449
|
-
<DocumentCardItem
|
|
450
|
-
header="08.09.2024 John Doe, Lzp. 33 Mandibular"
|
|
451
|
-
subheader="Uploaded 08.09.24 11:30"
|
|
452
|
-
icon="mdi-file-document"
|
|
453
|
-
@click:icon="handleDownload"
|
|
454
|
-
/>
|
|
455
|
-
</DocumentCard>
|
|
456
|
-
</template>
|
|
457
|
-
</AccordionItem>
|
|
458
|
-
</AccordionGroup>
|
|
459
|
-
</div>
|
|
460
|
-
`,
|
|
461
|
-
}),
|
|
462
|
-
parameters: {
|
|
463
|
-
docs: {
|
|
464
|
-
source: {
|
|
465
|
-
code: `
|
|
466
|
-
<template>
|
|
467
|
-
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
468
|
-
<AccordionGroup :multiple="false" v-model="panel">
|
|
469
|
-
<AccordionItem value="panel1" variant="plain" :bg-color="args.bgColor">
|
|
470
|
-
<template #title>
|
|
471
|
-
<h3>Document Card</h3>
|
|
472
|
-
</template>
|
|
473
|
-
<template #content>
|
|
474
|
-
<DocumentCard title="Attachments" @download:all="downloadAction">
|
|
475
|
-
<DocumentCardItem
|
|
476
|
-
header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
|
|
477
|
-
subheader="Uploaded 06.09.24 09:43"
|
|
478
|
-
icon="mdi-download"
|
|
479
|
-
@click:icon="handleDownload"
|
|
480
|
-
/>
|
|
481
|
-
<DocumentCardItem
|
|
482
|
-
header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
|
|
483
|
-
subheader="Uploaded 07.09.24 10:15"
|
|
484
|
-
icon="mdi-file"
|
|
485
|
-
@click:icon="handleDownload"
|
|
486
|
-
/>
|
|
487
|
-
<DocumentCardItem
|
|
488
|
-
header="08.09.2024 John Doe, Lzp. 33 Mandibular"
|
|
489
|
-
subheader="Uploaded 08.09.24 11:30"
|
|
490
|
-
icon="mdi-file-document"
|
|
491
|
-
@click:icon="handleDownload"
|
|
492
|
-
/>
|
|
493
|
-
</DocumentCard>
|
|
494
|
-
</template>
|
|
495
|
-
</AccordionItem>
|
|
496
|
-
</AccordionGroup>
|
|
497
|
-
</div>
|
|
498
|
-
</template>
|
|
499
|
-
|
|
500
|
-
<script setup>
|
|
501
|
-
import { ref } from 'vue';
|
|
502
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
503
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
504
|
-
import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
|
|
505
|
-
import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
|
|
506
|
-
|
|
507
|
-
const panel = ref([]);
|
|
508
|
-
|
|
509
|
-
function handleDownload() {
|
|
510
|
-
// Download action logic
|
|
511
|
-
}
|
|
512
|
-
</script>
|
|
513
|
-
`,
|
|
514
|
-
},
|
|
515
|
-
},
|
|
516
|
-
},
|
|
517
|
-
};
|
|
518
|
-
|
|
519
|
-
// Story: Accordion with Slots
|
|
520
|
-
export const AccordionWithSlots: Story = {
|
|
521
|
-
...Template,
|
|
522
|
-
args: {
|
|
523
|
-
variant: 'plain',
|
|
524
|
-
multiple: false,
|
|
525
|
-
bgColor: '#f5f5f7', // Default background color
|
|
526
|
-
},
|
|
527
|
-
render: (args) => ({
|
|
528
|
-
components: { AccordionGroup, AccordionItem, AppointmentCard },
|
|
529
|
-
setup() {
|
|
530
|
-
const panel = ref([]);
|
|
531
|
-
|
|
532
|
-
return { args, panel };
|
|
533
|
-
},
|
|
534
|
-
template: `
|
|
535
|
-
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
536
|
-
<AccordionGroup :multiple="args.multiple" v-model="panel">
|
|
537
|
-
<AccordionItem value="panel1" :variant="args.variant" :bg-color="args.bgColor">
|
|
538
|
-
<template #title>
|
|
539
|
-
<h3>Custom Title via Slot</h3>
|
|
540
|
-
</template>
|
|
541
|
-
<template #content>
|
|
542
|
-
<AppointmentCard
|
|
543
|
-
date="18.05.2024"
|
|
544
|
-
status="Done"
|
|
545
|
-
treatment-name="Checkup"
|
|
546
|
-
dentist-name="Dr. Jane Smith"
|
|
547
|
-
/>
|
|
548
|
-
</template>
|
|
549
|
-
</AccordionItem>
|
|
550
|
-
</AccordionGroup>
|
|
551
|
-
</div>
|
|
552
|
-
`,
|
|
553
|
-
}),
|
|
554
|
-
parameters: {
|
|
555
|
-
docs: {
|
|
556
|
-
source: {
|
|
557
|
-
code: `
|
|
558
|
-
<template>
|
|
559
|
-
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
560
|
-
<AccordionGroup :multiple="false" v-model="panel">
|
|
561
|
-
<AccordionItem value="panel1" variant="plain" :bg-color="args.bgColor">
|
|
562
|
-
<template #title>
|
|
563
|
-
<h3>Custom Title via Slot</h3>
|
|
564
|
-
</template>
|
|
565
|
-
<template #content>
|
|
566
|
-
<AppointmentCard
|
|
567
|
-
date="18.05.2024"
|
|
568
|
-
status="Done"
|
|
569
|
-
treatment-name="Checkup"
|
|
570
|
-
dentist-name="Dr. Jane Smith"
|
|
571
|
-
/>
|
|
572
|
-
</template>
|
|
573
|
-
</AccordionItem>
|
|
574
|
-
</AccordionGroup>
|
|
575
|
-
</div>
|
|
576
|
-
</template>
|
|
577
|
-
|
|
578
|
-
<script setup>
|
|
579
|
-
import { ref } from 'vue';
|
|
580
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
581
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
582
|
-
import AppointmentCard from '@components/Laboratory/AppointmentCard/AppointmentCard.vue';
|
|
583
|
-
|
|
584
|
-
const panel = ref([]);
|
|
585
|
-
</script>
|
|
586
|
-
`,
|
|
587
|
-
},
|
|
588
|
-
},
|
|
589
|
-
},
|
|
590
|
-
};
|
|
591
|
-
|
|
592
|
-
// Story: Accordion with Custom Colors (Optional - Additional Story)
|
|
593
|
-
export const AccordionWithCustomColors: Story = {
|
|
594
|
-
args: {
|
|
595
|
-
variant: 'outlined',
|
|
596
|
-
variantGroup: 'accordion',
|
|
597
|
-
multiple: false,
|
|
598
|
-
bgColor: 'blue', // Default background color
|
|
599
|
-
},
|
|
600
|
-
render: (args) => ({
|
|
601
|
-
components: { AccordionGroup, AccordionItem },
|
|
602
|
-
setup() {
|
|
603
|
-
const panel = ref([]);
|
|
604
|
-
|
|
605
|
-
return { args, panel };
|
|
606
|
-
},
|
|
607
|
-
template: `
|
|
608
|
-
<div :style="{ padding: '16px', borderRadius: '8px' }">
|
|
609
|
-
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
610
|
-
<AccordionItem
|
|
611
|
-
title="Custom Colored Accordion"
|
|
612
|
-
text="This accordion item has a customizable background color."
|
|
613
|
-
value="panel1"
|
|
614
|
-
:variant="args.variant"
|
|
615
|
-
:bg-color="args.bgColor"
|
|
616
|
-
/>
|
|
617
|
-
</AccordionGroup>
|
|
618
|
-
</div>
|
|
619
|
-
`,
|
|
620
|
-
}),
|
|
621
|
-
parameters: {
|
|
622
|
-
docs: {
|
|
623
|
-
source: {
|
|
624
|
-
code: `
|
|
625
|
-
<template>
|
|
626
|
-
<div :style="{ padding: '16px', borderRadius: '8px' }">
|
|
627
|
-
<AccordionGroup :multiple="false" variant-group="inset" v-model="panel">
|
|
628
|
-
<AccordionItem
|
|
629
|
-
title="Custom Colored Accordion"
|
|
630
|
-
text="This accordion item has a customizable background color."
|
|
631
|
-
value="panel1"
|
|
632
|
-
variant="outlined"
|
|
633
|
-
:bg-color="args.bgColor"
|
|
634
|
-
/>
|
|
635
|
-
</AccordionGroup>
|
|
636
|
-
</div>
|
|
637
|
-
</template>
|
|
638
|
-
|
|
639
|
-
<script setup>
|
|
640
|
-
import { ref } from 'vue';
|
|
641
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
642
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
643
|
-
|
|
644
|
-
const panel = ref([]);
|
|
645
|
-
</script>
|
|
646
|
-
`,
|
|
647
|
-
},
|
|
648
|
-
},
|
|
649
|
-
},
|
|
650
|
-
};
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
3
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
4
|
+
import AppointmentCard from '@components/Laboratory/AppointmentCard/AppointmentCard.vue';
|
|
5
|
+
import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
|
|
6
|
+
import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
|
|
7
|
+
import { ref } from 'vue';
|
|
8
|
+
import { action } from '@storybook/addon-actions';
|
|
9
|
+
|
|
10
|
+
// Meta configuration for the Accordion components
|
|
11
|
+
const meta: Meta<typeof AccordionGroup> = {
|
|
12
|
+
title: 'WL/Accordion',
|
|
13
|
+
component: AccordionGroup,
|
|
14
|
+
tags: ['autodocs'],
|
|
15
|
+
argTypes: {
|
|
16
|
+
multiple: {
|
|
17
|
+
control: 'boolean',
|
|
18
|
+
description: 'Allows multiple panels to be open simultaneously.',
|
|
19
|
+
},
|
|
20
|
+
variant: {
|
|
21
|
+
control: 'select',
|
|
22
|
+
options: ['plain', 'outlined'],
|
|
23
|
+
description:
|
|
24
|
+
'Determines the visual style of the accordion items. Options are "plain" or "outlined".',
|
|
25
|
+
},
|
|
26
|
+
variantGroup: {
|
|
27
|
+
control: 'select',
|
|
28
|
+
options: ['inset', 'popout'],
|
|
29
|
+
description:
|
|
30
|
+
'Determines the style of the accordion group, allowing for "inset" or "popout".',
|
|
31
|
+
},
|
|
32
|
+
bgColor: {
|
|
33
|
+
control: 'color',
|
|
34
|
+
description: 'Sets the background color of each AccordionItem.',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
parameters: {
|
|
38
|
+
docs: {
|
|
39
|
+
description: {
|
|
40
|
+
component: `
|
|
41
|
+
The \`AccordionGroup\` component wraps multiple \`AccordionItem\` components, allowing for a collapsible panel layout. The \`AccordionGroup\` manages the state of which panels are open, and allows for single or multiple panels to be open at a time.
|
|
42
|
+
|
|
43
|
+
### AccordionGroup Props
|
|
44
|
+
- **\`multiple\`**: Boolean to allow multiple panels to be open simultaneously.
|
|
45
|
+
- **\`variantGroup\`**: Specifies the overall styling, either "inset" for embedded or "popout" for standout styling.
|
|
46
|
+
|
|
47
|
+
### AccordionItem Props
|
|
48
|
+
- **\`title\`**: Specifies the header text. Default is "Default Title".
|
|
49
|
+
- **\`text\`**: Specifies the content text within the panel. Default is "Default text".
|
|
50
|
+
- **\`variant\`**: Sets the accordion item style (plain or outlined).
|
|
51
|
+
- **\`value\`**: Unique identifier for the accordion item. Required when used inside an \`AccordionGroup\`.
|
|
52
|
+
- **\`bgColor\`**: Sets the background color of the accordion item.
|
|
53
|
+
|
|
54
|
+
### Slots
|
|
55
|
+
- **\`title\`**: A slot for custom title content in the header.
|
|
56
|
+
- **\`content\`**: A slot for custom content within the accordion panel.
|
|
57
|
+
|
|
58
|
+
### Example Usage
|
|
59
|
+
The following examples demonstrate how to use \`AccordionGroup\` and \`AccordionItem\` components, including custom content in the \`content\` slot and applying custom background colors.
|
|
60
|
+
`,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export default meta;
|
|
67
|
+
type Story = StoryObj<typeof meta>;
|
|
68
|
+
|
|
69
|
+
// Define the common template
|
|
70
|
+
const Template: Story = {
|
|
71
|
+
render: (args) => ({
|
|
72
|
+
components: {
|
|
73
|
+
AccordionGroup,
|
|
74
|
+
AccordionItem,
|
|
75
|
+
AppointmentCard,
|
|
76
|
+
DocumentCard,
|
|
77
|
+
DocumentCardItem,
|
|
78
|
+
},
|
|
79
|
+
setup() {
|
|
80
|
+
const panel = ref([]);
|
|
81
|
+
const downloadAction = action('download:all');
|
|
82
|
+
|
|
83
|
+
function handleDownload() {
|
|
84
|
+
downloadAction('Document downloaded');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
args,
|
|
89
|
+
panel,
|
|
90
|
+
downloadAction,
|
|
91
|
+
handleDownload,
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
template: `
|
|
95
|
+
<div :class="[args.variantGroup === 'inset' ? 'inset-style' : 'popout-style']">
|
|
96
|
+
<AccordionGroup v-bind="args" v-model="panel">
|
|
97
|
+
<!-- Content will be defined in individual stories -->
|
|
98
|
+
</AccordionGroup>
|
|
99
|
+
</div>
|
|
100
|
+
`,
|
|
101
|
+
}),
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// Story: Outlined variant with inset style
|
|
105
|
+
export const OutlinedInset: Story = {
|
|
106
|
+
...Template,
|
|
107
|
+
args: {
|
|
108
|
+
variant: 'outlined',
|
|
109
|
+
variantGroup: 'inset',
|
|
110
|
+
multiple: false,
|
|
111
|
+
bgColor: '#f5f5f7', // Default background color
|
|
112
|
+
},
|
|
113
|
+
render: (args) => ({
|
|
114
|
+
components: { AccordionGroup, AccordionItem },
|
|
115
|
+
setup() {
|
|
116
|
+
const panel = ref([]);
|
|
117
|
+
|
|
118
|
+
return { args, panel };
|
|
119
|
+
},
|
|
120
|
+
template: `
|
|
121
|
+
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
122
|
+
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
123
|
+
<AccordionItem
|
|
124
|
+
title="What is the cost of a complete denture?"
|
|
125
|
+
text="Sample text goes here..."
|
|
126
|
+
value="panel1"
|
|
127
|
+
:variant="args.variant"
|
|
128
|
+
:bg-color="args.bgColor"
|
|
129
|
+
/>
|
|
130
|
+
</AccordionGroup>
|
|
131
|
+
</div>
|
|
132
|
+
`,
|
|
133
|
+
}),
|
|
134
|
+
parameters: {
|
|
135
|
+
docs: {
|
|
136
|
+
source: {
|
|
137
|
+
code: `
|
|
138
|
+
<template>
|
|
139
|
+
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
140
|
+
<AccordionGroup :multiple="false" variant-group="inset" v-model="panel">
|
|
141
|
+
<AccordionItem
|
|
142
|
+
title="What is the cost of a complete denture?"
|
|
143
|
+
text="Sample text goes here..."
|
|
144
|
+
value="panel1"
|
|
145
|
+
variant="outlined"
|
|
146
|
+
:bg-color="args.bgColor"
|
|
147
|
+
/>
|
|
148
|
+
</AccordionGroup>
|
|
149
|
+
</div>
|
|
150
|
+
</template>
|
|
151
|
+
|
|
152
|
+
<script setup>
|
|
153
|
+
import { ref } from 'vue';
|
|
154
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
155
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
156
|
+
|
|
157
|
+
const panel = ref([]);
|
|
158
|
+
</script>
|
|
159
|
+
`,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// Story: Popout style with multiple accordions
|
|
166
|
+
export const PopoutWithMultipleAccordions: Story = {
|
|
167
|
+
...Template,
|
|
168
|
+
args: {
|
|
169
|
+
variant: 'outlined',
|
|
170
|
+
variantGroup: 'accordion',
|
|
171
|
+
multiple: true,
|
|
172
|
+
bgColor: '#f5f5f7', // Default background color
|
|
173
|
+
},
|
|
174
|
+
render: (args) => ({
|
|
175
|
+
components: { AccordionGroup, AccordionItem },
|
|
176
|
+
setup() {
|
|
177
|
+
const panel = ref([]);
|
|
178
|
+
|
|
179
|
+
function selectAll() {
|
|
180
|
+
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function selectNone() {
|
|
184
|
+
panel.value = [];
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return { args, panel, selectAll, selectNone };
|
|
188
|
+
},
|
|
189
|
+
template: `
|
|
190
|
+
<div>
|
|
191
|
+
<div class="text-center d-flex pb-4">
|
|
192
|
+
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
193
|
+
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<div class="pb-4">v-model: {{ panel }}</div>
|
|
197
|
+
|
|
198
|
+
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
199
|
+
<AccordionItem
|
|
200
|
+
title="Accordion Item 1"
|
|
201
|
+
text="Content for Accordion Item 1."
|
|
202
|
+
value="panel1"
|
|
203
|
+
:variant="args.variant"
|
|
204
|
+
:bg-color="args.bgColor"
|
|
205
|
+
/>
|
|
206
|
+
<AccordionItem
|
|
207
|
+
title="Accordion Item 2"
|
|
208
|
+
text="Content for Accordion Item 2."
|
|
209
|
+
value="panel2"
|
|
210
|
+
:variant="args.variant"
|
|
211
|
+
:bg-color="args.bgColor"
|
|
212
|
+
/>
|
|
213
|
+
<AccordionItem
|
|
214
|
+
title="Accordion Item 3"
|
|
215
|
+
text="Content for Accordion Item 3."
|
|
216
|
+
value="panel3"
|
|
217
|
+
:variant="args.variant"
|
|
218
|
+
:bg-color="args.bgColor"
|
|
219
|
+
/>
|
|
220
|
+
</AccordionGroup>
|
|
221
|
+
</div>
|
|
222
|
+
`,
|
|
223
|
+
}),
|
|
224
|
+
parameters: {
|
|
225
|
+
docs: {
|
|
226
|
+
source: {
|
|
227
|
+
code: `
|
|
228
|
+
<template>
|
|
229
|
+
<div>
|
|
230
|
+
<div class="text-center d-flex pb-4">
|
|
231
|
+
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
232
|
+
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
233
|
+
</div>
|
|
234
|
+
|
|
235
|
+
<div class="pb-4">v-model: {{ panel }}</div>
|
|
236
|
+
|
|
237
|
+
<AccordionGroup :multiple="true" variant-group="popout" v-model="panel">
|
|
238
|
+
<AccordionItem
|
|
239
|
+
title="Accordion Item 1"
|
|
240
|
+
text="Content for Accordion Item 1."
|
|
241
|
+
value="panel1"
|
|
242
|
+
variant="outlined"
|
|
243
|
+
:bg-color="args.bgColor"
|
|
244
|
+
/>
|
|
245
|
+
<AccordionItem
|
|
246
|
+
title="Accordion Item 2"
|
|
247
|
+
text="Content for Accordion Item 2."
|
|
248
|
+
value="panel2"
|
|
249
|
+
variant="outlined"
|
|
250
|
+
:bg-color="args.bgColor"
|
|
251
|
+
/>
|
|
252
|
+
<AccordionItem
|
|
253
|
+
title="Accordion Item 3"
|
|
254
|
+
text="Content for Accordion Item 3."
|
|
255
|
+
value="panel3"
|
|
256
|
+
variant="outlined"
|
|
257
|
+
:bg-color="args.bgColor"
|
|
258
|
+
/>
|
|
259
|
+
</AccordionGroup>
|
|
260
|
+
</div>
|
|
261
|
+
</template>
|
|
262
|
+
|
|
263
|
+
<script setup>
|
|
264
|
+
import { ref } from 'vue';
|
|
265
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
266
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
267
|
+
|
|
268
|
+
const panel = ref([]);
|
|
269
|
+
|
|
270
|
+
function selectAll() {
|
|
271
|
+
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function selectNone() {
|
|
275
|
+
panel.value = [];
|
|
276
|
+
}
|
|
277
|
+
</script>
|
|
278
|
+
`,
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
// Story: Pre-Opened Accordion with Inset Style
|
|
285
|
+
export const AccordionWithPreOpenedPanels: Story = {
|
|
286
|
+
...Template,
|
|
287
|
+
args: {
|
|
288
|
+
variant: 'outlined',
|
|
289
|
+
variantGroup: 'accordion',
|
|
290
|
+
multiple: true,
|
|
291
|
+
bgColor: '#f5f5f7', // Default background color
|
|
292
|
+
},
|
|
293
|
+
render: (args) => ({
|
|
294
|
+
components: { AccordionGroup, AccordionItem },
|
|
295
|
+
setup() {
|
|
296
|
+
const panel = ref(['panel1', 'panel3']); // Pre-open panels 1 and 3
|
|
297
|
+
|
|
298
|
+
function selectAll() {
|
|
299
|
+
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function selectNone() {
|
|
303
|
+
panel.value = [];
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return { args, panel, selectAll, selectNone };
|
|
307
|
+
},
|
|
308
|
+
template: `
|
|
309
|
+
<div>
|
|
310
|
+
<div class="text-center d-flex pb-4">
|
|
311
|
+
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
312
|
+
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<div class="pb-4">v-model: {{ panel }}</div>
|
|
316
|
+
|
|
317
|
+
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
318
|
+
<AccordionItem
|
|
319
|
+
title="Accordion Item 1 (Pre-Opened)"
|
|
320
|
+
text="Content for Accordion Item 1."
|
|
321
|
+
value="panel1"
|
|
322
|
+
:variant="args.variant"
|
|
323
|
+
:bg-color="args.bgColor"
|
|
324
|
+
/>
|
|
325
|
+
<AccordionItem
|
|
326
|
+
title="Accordion Item 2"
|
|
327
|
+
text="Content for Accordion Item 2."
|
|
328
|
+
value="panel2"
|
|
329
|
+
:variant="args.variant"
|
|
330
|
+
:bg-color="args.bgColor"
|
|
331
|
+
/>
|
|
332
|
+
<AccordionItem
|
|
333
|
+
title="Accordion Item 3 (Pre-Opened)"
|
|
334
|
+
text="Content for Accordion Item 3."
|
|
335
|
+
value="panel3"
|
|
336
|
+
:variant="args.variant"
|
|
337
|
+
:bg-color="args.bgColor"
|
|
338
|
+
/>
|
|
339
|
+
</AccordionGroup>
|
|
340
|
+
</div>
|
|
341
|
+
`,
|
|
342
|
+
}),
|
|
343
|
+
parameters: {
|
|
344
|
+
docs: {
|
|
345
|
+
source: {
|
|
346
|
+
code: `
|
|
347
|
+
<template>
|
|
348
|
+
<div>
|
|
349
|
+
<div class="text-center d-flex pb-4">
|
|
350
|
+
<v-btn class="ma-2" @click="selectAll">All</v-btn>
|
|
351
|
+
<v-btn class="ma-2" @click="selectNone">None</v-btn>
|
|
352
|
+
</div>
|
|
353
|
+
|
|
354
|
+
<div class="pb-4">v-model: {{ panel }}</div>
|
|
355
|
+
|
|
356
|
+
<AccordionGroup :multiple="true" variant-group="inset" v-model="panel">
|
|
357
|
+
<AccordionItem
|
|
358
|
+
title="Accordion Item 1 (Pre-Opened)"
|
|
359
|
+
text="Content for Accordion Item 1."
|
|
360
|
+
value="panel1"
|
|
361
|
+
variant="outlined"
|
|
362
|
+
:bg-color="args.bgColor"
|
|
363
|
+
/>
|
|
364
|
+
<AccordionItem
|
|
365
|
+
title="Accordion Item 2"
|
|
366
|
+
text="Content for Accordion Item 2."
|
|
367
|
+
value="panel2"
|
|
368
|
+
variant="outlined"
|
|
369
|
+
:bg-color="args.bgColor"
|
|
370
|
+
/>
|
|
371
|
+
<AccordionItem
|
|
372
|
+
title="Accordion Item 3 (Pre-Opened)"
|
|
373
|
+
text="Content for Accordion Item 3."
|
|
374
|
+
value="panel3"
|
|
375
|
+
variant="outlined"
|
|
376
|
+
:bg-color="args.bgColor"
|
|
377
|
+
/>
|
|
378
|
+
</AccordionGroup>
|
|
379
|
+
</div>
|
|
380
|
+
</template>
|
|
381
|
+
|
|
382
|
+
<script setup>
|
|
383
|
+
import { ref } from 'vue';
|
|
384
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
385
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
386
|
+
|
|
387
|
+
const panel = ref(['panel1', 'panel3']);
|
|
388
|
+
|
|
389
|
+
function selectAll() {
|
|
390
|
+
panel.value = ['panel1', 'panel2', 'panel3'];
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
function selectNone() {
|
|
394
|
+
panel.value = [];
|
|
395
|
+
}
|
|
396
|
+
</script>
|
|
397
|
+
`,
|
|
398
|
+
},
|
|
399
|
+
},
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
// Story: Accordion with Document Card
|
|
404
|
+
export const AccordionWithDocumentCard: Story = {
|
|
405
|
+
...Template,
|
|
406
|
+
args: {
|
|
407
|
+
variant: 'plain',
|
|
408
|
+
multiple: false,
|
|
409
|
+
bgColor: '#f5f5f7', // Default background color
|
|
410
|
+
},
|
|
411
|
+
render: (args) => ({
|
|
412
|
+
components: {
|
|
413
|
+
AccordionGroup,
|
|
414
|
+
AccordionItem,
|
|
415
|
+
DocumentCard,
|
|
416
|
+
DocumentCardItem,
|
|
417
|
+
},
|
|
418
|
+
setup() {
|
|
419
|
+
const panel = ref([]);
|
|
420
|
+
const downloadAction = action('download:all');
|
|
421
|
+
|
|
422
|
+
function handleDownload() {
|
|
423
|
+
downloadAction('Document downloaded');
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return { args, panel, downloadAction, handleDownload };
|
|
427
|
+
},
|
|
428
|
+
template: `
|
|
429
|
+
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
430
|
+
<AccordionGroup :multiple="args.multiple" v-model="panel">
|
|
431
|
+
<AccordionItem value="panel1" :variant="args.variant" :bg-color="args.bgColor">
|
|
432
|
+
<template #title>
|
|
433
|
+
<h3>Document Card</h3>
|
|
434
|
+
</template>
|
|
435
|
+
<template #content>
|
|
436
|
+
<DocumentCard title="Attachments" @download:all="downloadAction">
|
|
437
|
+
<DocumentCardItem
|
|
438
|
+
header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
|
|
439
|
+
subheader="Uploaded 06.09.24 09:43"
|
|
440
|
+
icon="mdi-download"
|
|
441
|
+
@click:icon="handleDownload"
|
|
442
|
+
/>
|
|
443
|
+
<DocumentCardItem
|
|
444
|
+
header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
|
|
445
|
+
subheader="Uploaded 07.09.24 10:15"
|
|
446
|
+
icon="mdi-file"
|
|
447
|
+
@click:icon="handleDownload"
|
|
448
|
+
/>
|
|
449
|
+
<DocumentCardItem
|
|
450
|
+
header="08.09.2024 John Doe, Lzp. 33 Mandibular"
|
|
451
|
+
subheader="Uploaded 08.09.24 11:30"
|
|
452
|
+
icon="mdi-file-document"
|
|
453
|
+
@click:icon="handleDownload"
|
|
454
|
+
/>
|
|
455
|
+
</DocumentCard>
|
|
456
|
+
</template>
|
|
457
|
+
</AccordionItem>
|
|
458
|
+
</AccordionGroup>
|
|
459
|
+
</div>
|
|
460
|
+
`,
|
|
461
|
+
}),
|
|
462
|
+
parameters: {
|
|
463
|
+
docs: {
|
|
464
|
+
source: {
|
|
465
|
+
code: `
|
|
466
|
+
<template>
|
|
467
|
+
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
468
|
+
<AccordionGroup :multiple="false" v-model="panel">
|
|
469
|
+
<AccordionItem value="panel1" variant="plain" :bg-color="args.bgColor">
|
|
470
|
+
<template #title>
|
|
471
|
+
<h3>Document Card</h3>
|
|
472
|
+
</template>
|
|
473
|
+
<template #content>
|
|
474
|
+
<DocumentCard title="Attachments" @download:all="downloadAction">
|
|
475
|
+
<DocumentCardItem
|
|
476
|
+
header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
|
|
477
|
+
subheader="Uploaded 06.09.24 09:43"
|
|
478
|
+
icon="mdi-download"
|
|
479
|
+
@click:icon="handleDownload"
|
|
480
|
+
/>
|
|
481
|
+
<DocumentCardItem
|
|
482
|
+
header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
|
|
483
|
+
subheader="Uploaded 07.09.24 10:15"
|
|
484
|
+
icon="mdi-file"
|
|
485
|
+
@click:icon="handleDownload"
|
|
486
|
+
/>
|
|
487
|
+
<DocumentCardItem
|
|
488
|
+
header="08.09.2024 John Doe, Lzp. 33 Mandibular"
|
|
489
|
+
subheader="Uploaded 08.09.24 11:30"
|
|
490
|
+
icon="mdi-file-document"
|
|
491
|
+
@click:icon="handleDownload"
|
|
492
|
+
/>
|
|
493
|
+
</DocumentCard>
|
|
494
|
+
</template>
|
|
495
|
+
</AccordionItem>
|
|
496
|
+
</AccordionGroup>
|
|
497
|
+
</div>
|
|
498
|
+
</template>
|
|
499
|
+
|
|
500
|
+
<script setup>
|
|
501
|
+
import { ref } from 'vue';
|
|
502
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
503
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
504
|
+
import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
|
|
505
|
+
import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
|
|
506
|
+
|
|
507
|
+
const panel = ref([]);
|
|
508
|
+
|
|
509
|
+
function handleDownload() {
|
|
510
|
+
// Download action logic
|
|
511
|
+
}
|
|
512
|
+
</script>
|
|
513
|
+
`,
|
|
514
|
+
},
|
|
515
|
+
},
|
|
516
|
+
},
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
// Story: Accordion with Slots
|
|
520
|
+
export const AccordionWithSlots: Story = {
|
|
521
|
+
...Template,
|
|
522
|
+
args: {
|
|
523
|
+
variant: 'plain',
|
|
524
|
+
multiple: false,
|
|
525
|
+
bgColor: '#f5f5f7', // Default background color
|
|
526
|
+
},
|
|
527
|
+
render: (args) => ({
|
|
528
|
+
components: { AccordionGroup, AccordionItem, AppointmentCard },
|
|
529
|
+
setup() {
|
|
530
|
+
const panel = ref([]);
|
|
531
|
+
|
|
532
|
+
return { args, panel };
|
|
533
|
+
},
|
|
534
|
+
template: `
|
|
535
|
+
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
536
|
+
<AccordionGroup :multiple="args.multiple" v-model="panel">
|
|
537
|
+
<AccordionItem value="panel1" :variant="args.variant" :bg-color="args.bgColor">
|
|
538
|
+
<template #title>
|
|
539
|
+
<h3>Custom Title via Slot</h3>
|
|
540
|
+
</template>
|
|
541
|
+
<template #content>
|
|
542
|
+
<AppointmentCard
|
|
543
|
+
date="18.05.2024"
|
|
544
|
+
status="Done"
|
|
545
|
+
treatment-name="Checkup"
|
|
546
|
+
dentist-name="Dr. Jane Smith"
|
|
547
|
+
/>
|
|
548
|
+
</template>
|
|
549
|
+
</AccordionItem>
|
|
550
|
+
</AccordionGroup>
|
|
551
|
+
</div>
|
|
552
|
+
`,
|
|
553
|
+
}),
|
|
554
|
+
parameters: {
|
|
555
|
+
docs: {
|
|
556
|
+
source: {
|
|
557
|
+
code: `
|
|
558
|
+
<template>
|
|
559
|
+
<div style="margin: 16px; padding: 16px; border-radius: 8px;">
|
|
560
|
+
<AccordionGroup :multiple="false" v-model="panel">
|
|
561
|
+
<AccordionItem value="panel1" variant="plain" :bg-color="args.bgColor">
|
|
562
|
+
<template #title>
|
|
563
|
+
<h3>Custom Title via Slot</h3>
|
|
564
|
+
</template>
|
|
565
|
+
<template #content>
|
|
566
|
+
<AppointmentCard
|
|
567
|
+
date="18.05.2024"
|
|
568
|
+
status="Done"
|
|
569
|
+
treatment-name="Checkup"
|
|
570
|
+
dentist-name="Dr. Jane Smith"
|
|
571
|
+
/>
|
|
572
|
+
</template>
|
|
573
|
+
</AccordionItem>
|
|
574
|
+
</AccordionGroup>
|
|
575
|
+
</div>
|
|
576
|
+
</template>
|
|
577
|
+
|
|
578
|
+
<script setup>
|
|
579
|
+
import { ref } from 'vue';
|
|
580
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
581
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
582
|
+
import AppointmentCard from '@components/Laboratory/AppointmentCard/AppointmentCard.vue';
|
|
583
|
+
|
|
584
|
+
const panel = ref([]);
|
|
585
|
+
</script>
|
|
586
|
+
`,
|
|
587
|
+
},
|
|
588
|
+
},
|
|
589
|
+
},
|
|
590
|
+
};
|
|
591
|
+
|
|
592
|
+
// Story: Accordion with Custom Colors (Optional - Additional Story)
|
|
593
|
+
export const AccordionWithCustomColors: Story = {
|
|
594
|
+
args: {
|
|
595
|
+
variant: 'outlined',
|
|
596
|
+
variantGroup: 'accordion',
|
|
597
|
+
multiple: false,
|
|
598
|
+
bgColor: 'blue', // Default background color
|
|
599
|
+
},
|
|
600
|
+
render: (args) => ({
|
|
601
|
+
components: { AccordionGroup, AccordionItem },
|
|
602
|
+
setup() {
|
|
603
|
+
const panel = ref([]);
|
|
604
|
+
|
|
605
|
+
return { args, panel };
|
|
606
|
+
},
|
|
607
|
+
template: `
|
|
608
|
+
<div :style="{ padding: '16px', borderRadius: '8px' }">
|
|
609
|
+
<AccordionGroup :multiple="args.multiple" :variant-group="args.variantGroup" v-model="panel">
|
|
610
|
+
<AccordionItem
|
|
611
|
+
title="Custom Colored Accordion"
|
|
612
|
+
text="This accordion item has a customizable background color."
|
|
613
|
+
value="panel1"
|
|
614
|
+
:variant="args.variant"
|
|
615
|
+
:bg-color="args.bgColor"
|
|
616
|
+
/>
|
|
617
|
+
</AccordionGroup>
|
|
618
|
+
</div>
|
|
619
|
+
`,
|
|
620
|
+
}),
|
|
621
|
+
parameters: {
|
|
622
|
+
docs: {
|
|
623
|
+
source: {
|
|
624
|
+
code: `
|
|
625
|
+
<template>
|
|
626
|
+
<div :style="{ padding: '16px', borderRadius: '8px' }">
|
|
627
|
+
<AccordionGroup :multiple="false" variant-group="inset" v-model="panel">
|
|
628
|
+
<AccordionItem
|
|
629
|
+
title="Custom Colored Accordion"
|
|
630
|
+
text="This accordion item has a customizable background color."
|
|
631
|
+
value="panel1"
|
|
632
|
+
variant="outlined"
|
|
633
|
+
:bg-color="args.bgColor"
|
|
634
|
+
/>
|
|
635
|
+
</AccordionGroup>
|
|
636
|
+
</div>
|
|
637
|
+
</template>
|
|
638
|
+
|
|
639
|
+
<script setup>
|
|
640
|
+
import { ref } from 'vue';
|
|
641
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
642
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
643
|
+
|
|
644
|
+
const panel = ref([]);
|
|
645
|
+
</script>
|
|
646
|
+
`,
|
|
647
|
+
},
|
|
648
|
+
},
|
|
649
|
+
},
|
|
650
|
+
};
|