diff --git a/docs/components/accordion/accordion.md b/docs/components/accordion/accordion.md index 650d1fc..a4eb653 100644 --- a/docs/components/accordion/accordion.md +++ b/docs/components/accordion/accordion.md @@ -53,29 +53,53 @@ Always open prop to makes accordion able to open multiple elements. ```vue @@ -88,29 +112,53 @@ Flush prop makes opened tab being not able to close. ```vue @@ -123,29 +171,53 @@ You can style headers with `header-classes` prop and content containers with `co ```vue diff --git a/docs/components/accordion/examples/AccordionAlwaysOpenExample.vue b/docs/components/accordion/examples/AccordionAlwaysOpenExample.vue index 962c199..c2a031f 100644 --- a/docs/components/accordion/examples/AccordionAlwaysOpenExample.vue +++ b/docs/components/accordion/examples/AccordionAlwaysOpenExample.vue @@ -1,27 +1,51 @@ diff --git a/docs/components/accordion/examples/AccordionExample.vue b/docs/components/accordion/examples/AccordionExample.vue index 556a382..b378b4d 100644 --- a/docs/components/accordion/examples/AccordionExample.vue +++ b/docs/components/accordion/examples/AccordionExample.vue @@ -1,27 +1,51 @@ diff --git a/docs/components/accordion/examples/AccordionFlushExample.vue b/docs/components/accordion/examples/AccordionFlushExample.vue index e277b16..458cdb6 100644 --- a/docs/components/accordion/examples/AccordionFlushExample.vue +++ b/docs/components/accordion/examples/AccordionFlushExample.vue @@ -1,27 +1,51 @@ diff --git a/docs/components/accordion/examples/AccordionStyledHeadersExample.vue b/docs/components/accordion/examples/AccordionStyledHeadersExample.vue index 224cd84..f54e5f4 100644 --- a/docs/components/accordion/examples/AccordionStyledHeadersExample.vue +++ b/docs/components/accordion/examples/AccordionStyledHeadersExample.vue @@ -1,27 +1,51 @@ diff --git a/src/components/Accordion/Accordion.vue b/src/components/Accordion/Accordion.vue index d40592b..a47c3b7 100644 --- a/src/components/Accordion/Accordion.vue +++ b/src/components/Accordion/Accordion.vue @@ -1,89 +1,29 @@ diff --git a/src/components/Accordion/AccordionContent.vue b/src/components/Accordion/AccordionContent.vue new file mode 100644 index 0000000..9325428 --- /dev/null +++ b/src/components/Accordion/AccordionContent.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/Accordion/AccordionHeader.vue b/src/components/Accordion/AccordionHeader.vue new file mode 100644 index 0000000..20e00ce --- /dev/null +++ b/src/components/Accordion/AccordionHeader.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/components/Accordion/AccordionPanel.vue b/src/components/Accordion/AccordionPanel.vue new file mode 100644 index 0000000..109e6af --- /dev/null +++ b/src/components/Accordion/AccordionPanel.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/components/Accordion/composables/useAccordionState.ts b/src/components/Accordion/composables/useAccordionState.ts new file mode 100644 index 0000000..306e7f8 --- /dev/null +++ b/src/components/Accordion/composables/useAccordionState.ts @@ -0,0 +1,27 @@ +import { onBeforeMount, onBeforeUnmount, reactive } from 'vue' +import type { tAccordionMode, tState } from '@/components/Accordion/types' + +const accordionsStates = reactive({}) +export function useAccordionState(id?: string, mode?: tAccordionMode): { + accordionsStates: tState +} { + + onBeforeMount(() => { + if (!id) return + accordionsStates[id] = { + id: id, + mode: mode ? mode : 'default', + panels: {}, + } + }) + onBeforeUnmount(() => { + if (!id) return + delete accordionsStates[id] + }) + + return { + accordionsStates, + } +} + + diff --git a/src/components/Accordion/types.ts b/src/components/Accordion/types.ts index 58bd9a2..ffc4a72 100644 --- a/src/components/Accordion/types.ts +++ b/src/components/Accordion/types.ts @@ -1,8 +1,18 @@ -export type AccordionItem = { - header: string - icon?: string -} -export interface AccordionTransformedItem extends AccordionItem { +export type tAccordionMode = 'flush' | 'alwaysOpen' | 'default' +export type tAccordionPanel = { + order: number id: string isVisible: boolean } +type tAccordionPanels = { + [key: string]: tAccordionPanel +} +type tStateElement = { + id: string, + mode: tAccordionMode + + panels: tAccordionPanels +} +export type tState = { + [key: string]: tStateElement +}