diff --git a/packages/@kws3/ui/accordion/Accordion.svelte b/packages/@kws3/ui/accordion/Accordion.svelte new file mode 100644 index 000000000..6ad1f977e --- /dev/null +++ b/packages/@kws3/ui/accordion/Accordion.svelte @@ -0,0 +1,57 @@ + +
+ + +
+ + diff --git a/packages/@kws3/ui/accordion/AccordionItem.svelte b/packages/@kws3/ui/accordion/AccordionItem.svelte new file mode 100644 index 000000000..9ed63a8ae --- /dev/null +++ b/packages/@kws3/ui/accordion/AccordionItem.svelte @@ -0,0 +1,122 @@ + + +
+
{ + if (title_click) onToggle(); + }}> +
+
+ + {title} +
+
+ +
+
+
+
+
+ + +
+
+
+ + diff --git a/packages/@kws3/ui/index.js b/packages/@kws3/ui/index.js index 557f2eeaa..34006f164 100644 --- a/packages/@kws3/ui/index.js +++ b/packages/@kws3/ui/index.js @@ -59,6 +59,8 @@ export { default as DataSearch } from "./datagrid/DataSearch/DataSearch.svelte"; export { default as Pagination } from "./datagrid/Pagination/Pagination.svelte"; export { default as DataSort } from "./datagrid/DataSort/DataSort.svelte"; +export { default as Accordion } from "./accordion/Accordion.svelte"; +export { default as AccordionItem } from "./accordion/AccordionItem.svelte"; export { default as Chart } from "./charts/Chart.svelte"; export { default as DonutChart } from "./charts/DonutChart.svelte"; export { default as PieChart } from "./charts/PieChart.svelte"; diff --git a/packages/@kws3/ui/styles/Accordion.scss b/packages/@kws3/ui/styles/Accordion.scss new file mode 100644 index 000000000..a4e51fd03 --- /dev/null +++ b/packages/@kws3/ui/styles/Accordion.scss @@ -0,0 +1,127 @@ +$accordion-background-color: $background !default; +$accordion-radius: $radius !default; + +$accordion-header-background-color: $text !default; +$accordion-header-color: $text-invert !default; +$accordion-header-padding: 0.5em 0.75em !default; +$accordion-header-radius: $radius !default; + +$accordion-content-border: 1px solid $border !default; +$accordion-content-color: $text !default; +$accordion-content-padding-top: 1em !default; +$accordion-content-padding-left: 1.25em !default; +$accordion-content-radius: $radius !default; + +$accordion-content-pre-background-color: $white !default; +$accordion-content-pre-code-background-color: transparent !default; + +.accordions { + .accordion { + @include block; + display: flex; + flex-direction: column; + background-color: $accordion-background-color; + border-radius: $accordion-radius; + font-size: $size-normal; + strong { + color: currentColor; + } + a:not(.button):not(.tag) { + color: currentColor; + text-decoration: underline; + } // Sizes + &.is-small { + font-size: $size-small; + } + &.is-medium { + font-size: $size-medium; + } + &.is-large { + font-size: $size-large; + } + &:not(:first-child) { + .accordion-header { + border-radius: 0; + } + } + &:not(:last-child) { + margin-bottom: 0; + .accordion-content { + border-radius: 0; + } + } + .toggle, + [data-action="toggle"] { + cursor: pointer; + } + .accordion-header { + background-color: $accordion-header-background-color; + border-radius: $accordion-header-radius $accordion-header-radius 0 0; + color: $accordion-header-color; + line-height: 1.25; + padding: $accordion-header-padding; + position: relative; + & + .accordion-body { + overflow-y: hidden; + max-height: 0; + color: $accordion-content-color; + border: $accordion-content-border; + border-radius: $accordion-content-radius; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top: none; + -webkit-transition: max-height 0.2s ease; + -moz-transition: max-height 0.2s ease; + -o-transition: max-height 0.2s ease; + transition: max-height 0.2s ease; + .accordion-content { + padding: $accordion-content-padding-top + $accordion-content-padding-left; + code, + pre { + background-color: $accordion-content-pre-background-color; + } + pre code { + background-color: $accordion-content-pre-code-background-color; + } + } + } + } + &.is-active { + .accordion-header { + .toggle { + &::before { + content: "\002D"; + } + } + } + .accordion-body { + max-height: 100em; + } + // Colors + } + @each $name, $pair in $colors { + $color: nth($pair, 1); + $color-invert: nth($pair, 2); + $color-lightning: max((100% - lightness($color)) - 2%, 0%); + $color-luminance: colorLuminance($color); + $darken-percentage: $color-luminance * 70%; + $desaturate-percentage: $color-luminance * 30%; + &.is-#{$name} { + background-color: lighten($color, $color-lightning); + border-bottom: 1px solid lighten($color, $color-lightning); + .accordion-header { + background-color: $color; + color: $color-invert; + } + .accordion-content { + border-color: $color; + color: desaturate( + darken($color, $darken-percentage), + $desaturate-percentage + ); + } + } + } + } +} diff --git a/src/scss/app.scss b/src/scss/app.scss index 2afd76116..b469185f4 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -172,6 +172,65 @@ pre.prismjs > code { //Tooltip @import "../../packages/@kws3/ui/styles/Tooltip.scss"; +//Accordion +@import "../../packages/@kws3/ui/styles/Accordion.scss"; +// #stepsHolder{ +// padding-top: 1.2rem; +// overflow: auto; +// } +// .steps{ +// font-size: 0.9rem; +// .steps-segment{ +// cursor: pointer; +// .steps-marker{ +// transform: scale(0.9); +// transition: transform 0.3s $easeOutCustom; +// } +// &.is-active{ +// .steps-marker{ +// transform: scale(1.5); +// border:2px solid $primary !important; +// background: $white !important; +// color: $text !important; +// } +// & ~ .steps-segment{ +// cursor: default; +// .steps-marker{ +// transform: scale(1); +// } +// } +// } +// } +// } + +// @include mobile{ +// .steps.is-horizontal.has-content-centered{ +// .steps-segment{ +// &:not(:last-child):after { +// height: 0.2em; +// left: 2.5rem; +// right: -1.75rem; +// top: calc(0.75rem - (0.1em)); +// } +// .steps-marker { +// position: absolute; +// left: calc(50% - 0.75rem); +// height: 1.5rem; +// width: 1.5rem; +// font-size: 0.75rem; +// transition: transform 0.3s; +// } +// .steps-content { +// margin-top: 2rem; +// margin-left: .5em; +// margin-right: .5em; +// padding-top: .2em; +// font-size:0.75rem; +// line-height:1.2; +// } +// } +// } +// } //Grid @import "../../packages/@kws3/ui/styles/Grid.scss"; diff --git a/src/stories/helpers/Accordion/Accordion.svelte b/src/stories/helpers/Accordion/Accordion.svelte new file mode 100644 index 000000000..2142fb2c1 --- /dev/null +++ b/src/stories/helpers/Accordion/Accordion.svelte @@ -0,0 +1,92 @@ +
+
+ {#if !title_click && !expanded} + + {/if} +
+
+ + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Pellentesque risus mi, tempus quis placerat ut, porta nec + nulla. Vestibulum rhoncus ac ex sit amet fringilla. Nullam gravida purus + diam, et dictum felis venenatis + efficitur. Aenean ac eleifend lacus, in mollis lectus. Donec + sodales, arcu et sollicitudin porttitor, tortor urna tempor ligula, id + porttitor mi magna a neque. Donec dui urna, vehicula et sem eget, facilisis + sodales sem. +
+ +
+ + + Lorem ipsum dolor sit amet, consectetur adipiscing elit.Pellentesque risus mi, tempus quis placerat ut, porta nec nulla. Vestibulum rhoncus ac ex sit + amet fringilla. Nullam gravida purus diam, et dictum + felis venenatis + efficitur. Aenean ac eleifend lacus, in mollis lectus. Donec + sodales, arcu et sollicitudin porttitor, tortor urna tempor ligula, id + porttitor mi magna a neque. Donec dui urna, vehicula et sem eget, facilisis + sodales sem. +
+ +
+ + + Lorem ipsum dolor sit amet, consectetur adipiscing elit.Pellentesque risus mi, tempus quis placerat ut, porta nec nulla. Vestibulum rhoncus ac ex sit + amet fringilla. Nullam gravida purus diam, et dictum + felis venenatis + efficitur. Aenean ac eleifend lacus, in mollis lectus. Donec + sodales, arcu et sollicitudin porttitor, tortor urna tempor ligula, id + porttitor mi magna a neque. Donec dui urna, vehicula et sem eget, facilisis + sodales sem. + +
+ + diff --git a/src/stories/helpers/Accordion/accordion.stories.mdx b/src/stories/helpers/Accordion/accordion.stories.mdx new file mode 100644 index 000000000..79f408d7f --- /dev/null +++ b/src/stories/helpers/Accordion/accordion.stories.mdx @@ -0,0 +1,89 @@ +import { Story, Preview, Meta, ArgsTable, Source, Description, Canvas } from '@storybook/addon-docs'; +import dedent from 'ts-dedent'; +import { Accordion, AccordionItem } from "@kws3/ui"; +import AccordionDecorator from "./Accordion.svelte"; +import { action } from '@storybook/addon-actions'; + +export let args={ + title : "Title", + color : "primary", + class : "", + style : "", + expanded : true, + title_click: true +}; + +`, + }, + }, + }} +/> + + + + + + {(args) => ({ + Component: AccordionDecorator, + props: args, + })} + + + + + +### Usage + + +#### Import the SCSS: + + +### Example + + + Section 1 + + + Section 2 + Section 3 + + + `} +/>