Create the stack element
This commit is contained in:
committed by
Jacob Overgaard
parent
310593cbc1
commit
56bc8b46ca
@@ -33,4 +33,5 @@ export * from './multiple-color-picker-input/index.js';
|
|||||||
export * from './multiple-text-string-input/index.js';
|
export * from './multiple-text-string-input/index.js';
|
||||||
export * from './popover-layout/index.js';
|
export * from './popover-layout/index.js';
|
||||||
export * from './ref-item/index.js';
|
export * from './ref-item/index.js';
|
||||||
|
export * from './stack/index.js';
|
||||||
export * from './table/index.js';
|
export * from './table/index.js';
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
export * from './stack.element.js';
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
|
||||||
|
import { customElement, html, css, property, classMap } from "@umbraco-cms/backoffice/external/lit";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @element umb-stack
|
||||||
|
* @description - Element for displaying items in a stack with even spacing between
|
||||||
|
* @extends LitElement
|
||||||
|
*/
|
||||||
|
@customElement('umb-stack')
|
||||||
|
export class UmbStackElement extends UmbLitElement
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Look
|
||||||
|
* @type {String}
|
||||||
|
* @memberof UmbStackElement
|
||||||
|
*/
|
||||||
|
@property({ type:String })
|
||||||
|
look: 'compact' | 'default' = 'default';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Divide
|
||||||
|
* @type {Boolean}
|
||||||
|
* @memberof UmbStackElement
|
||||||
|
*/
|
||||||
|
@property({ type:Boolean })
|
||||||
|
divide: boolean = false;
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return html`<div class=${classMap({ divide: this.divide, compact: this.look === 'compact' })}>
|
||||||
|
<slot></slot>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
static styles = [
|
||||||
|
css`
|
||||||
|
div {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
::slotted(*) {
|
||||||
|
position: relative;
|
||||||
|
margin-top: var(--uui-size-space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.divide ::slotted(*)::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: calc((var(--uui-size-space-6) / 2) * -1);
|
||||||
|
height: 0;
|
||||||
|
width: 100%;
|
||||||
|
border-top: solid 1px var(--uui-color-divider-standalone);
|
||||||
|
}
|
||||||
|
|
||||||
|
::slotted(*:first-child) {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divide ::slotted(*:first-child)::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compact ::slotted(*) {
|
||||||
|
margin-top: var(--uui-size-space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.compact ::slotted(*:first-child) {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compact.divide ::slotted(*)::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UmbStackElement;
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface HTMLElementTagNameMap {
|
||||||
|
'umb-stack': UmbStackElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import type { Meta, StoryObj } from '@storybook/web-components';
|
||||||
|
import './stack.element.js';
|
||||||
|
import type { UmbStackElement} from './stack.element.js';
|
||||||
|
|
||||||
|
const meta: Meta<UmbStackElement> = {
|
||||||
|
title: 'Components/Stack',
|
||||||
|
component: 'umb-stack',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
|
||||||
|
type Story = StoryObj<UmbStackElement>;
|
||||||
|
|
||||||
|
export const Default: Story = {
|
||||||
|
args: { },
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Divide: Story = {
|
||||||
|
args: {
|
||||||
|
divide: true
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Compact: Story = {
|
||||||
|
args: {
|
||||||
|
look: 'compact'
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user