Skip to content

Commit 5031d0b

Browse files
SimpleProgrammingAUmetonym
authored andcommitted
feat(layer): first pass at Layer component (#1932)
Closes #1892
1 parent e4670a1 commit 5031d0b

File tree

9 files changed

+164
-2
lines changed

9 files changed

+164
-2
lines changed

COMPONENT_INDEX.md

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Component Index
22

3-
> 165 components exported from [email protected].
3+
> 166 components exported from [email protected].
44
55
## Components
66

@@ -66,6 +66,7 @@
6666
- [`ImageLoader`](#imageloader)
6767
- [`InlineLoading`](#inlineloading)
6868
- [`InlineNotification`](#inlinenotification)
69+
- [`Layer`](#layer)
6970
- [`Link`](#link)
7071
- [`ListBox`](#listbox)
7172
- [`ListBoxField`](#listboxfield)
@@ -1959,6 +1960,26 @@ None.
19591960
| mouseenter | forwarded | -- |
19601961
| mouseleave | forwarded | -- |
19611962

1963+
## `Layer`
1964+
1965+
### Props
1966+
1967+
| Prop name | Required | Kind | Reactive | Type | Default value | Description |
1968+
| :--------- | :------- | :--------------- | :------- | ------------------------------------------------------------ | ---------------------- | --------------------------------------------------------------------------- |
1969+
| level | No | <code>let</code> | Yes | <code>0 &#124; 1 &#124; 2 </code> | <code>undefined</code> | Specify the layer level to override any existing levels based on hierarchy. |
1970+
| as | No | <code>let</code> | No | <code>string</code> | <code>"div"</code> | Specify the HTML element to render. |
1971+
| layerProps | No | <code>let</code> | No | <code>import('svelte/elements').HTMLElementAttributes</code> | <code>{}</code> | Specify the Layer HTML element props |
1972+
1973+
### Slots
1974+
1975+
| Slot name | Default | Props | Fallback |
1976+
| :-------- | :------ | :---- | :------- |
1977+
| -- | Yes | -- | -- |
1978+
1979+
### Events
1980+
1981+
None.
1982+
19621983
## `Link`
19631984

19641985
### Props

docs/src/COMPONENT_API.json

+46-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"total": 165,
2+
"total": 166,
33
"components": [
44
{
55
"moduleName": "Accordion",
@@ -5754,6 +5754,51 @@
57545754
"typedefs": [],
57555755
"rest_props": { "type": "Element", "name": "div" }
57565756
},
5757+
{
5758+
"moduleName": "Layer",
5759+
"filePath": "src/Layer/Layer.svelte",
5760+
"props": [
5761+
{
5762+
"name": "level",
5763+
"kind": "let",
5764+
"description": "Specify the layer level to override any existing levels based on hierarchy.",
5765+
"type": "0 | 1 | 2 ",
5766+
"isFunction": false,
5767+
"isFunctionDeclaration": false,
5768+
"isRequired": false,
5769+
"constant": false,
5770+
"reactive": true
5771+
},
5772+
{
5773+
"name": "as",
5774+
"kind": "let",
5775+
"description": "Specify the HTML element to render.",
5776+
"type": "string",
5777+
"value": "\"div\"",
5778+
"isFunction": false,
5779+
"isFunctionDeclaration": false,
5780+
"isRequired": false,
5781+
"constant": false,
5782+
"reactive": false
5783+
},
5784+
{
5785+
"name": "layerProps",
5786+
"kind": "let",
5787+
"description": "Specify the Layer HTML element props",
5788+
"type": "import('svelte/elements').HTMLElementAttributes",
5789+
"value": "{}",
5790+
"isFunction": false,
5791+
"isFunctionDeclaration": false,
5792+
"isRequired": false,
5793+
"constant": false,
5794+
"reactive": false
5795+
}
5796+
],
5797+
"moduleExports": [],
5798+
"slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }],
5799+
"events": [],
5800+
"typedefs": []
5801+
},
57575802
{
57585803
"moduleName": "Link",
57595804
"filePath": "src/Link/Link.svelte",

docs/src/pages/components/Layer.svx

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script>
2+
import { Layer } from "carbon-components-svelte";
3+
import Preview from "../../components/Preview.svelte";
4+
</script>
5+
6+
## Default
7+
8+
<Layer>
9+
<p>First layer</p>
10+
<Layer>
11+
<p>Second layer</p>
12+
<Layer>
13+
<p>Third layer</p>
14+
</Layer>
15+
</Layer>
16+
</Layer>

src/Layer/Layer.svelte

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<script>
2+
import { getContext, setContext } from "svelte";
3+
4+
/**
5+
* Specify the layer level to override any existing levels based on hierarchy.
6+
* @type {0 | 1 | 2 }
7+
*/
8+
export let level = undefined;
9+
10+
/** Specify the HTML element to render. */
11+
export let as = "div";
12+
13+
/**
14+
* Specify the Layer HTML element props
15+
* @type {import('svelte/elements').HTMLElementAttributes}
16+
*/
17+
export let layerProps = {};
18+
19+
// If there is no level override, determine the Level based on the hierarchy
20+
const parentLevel = getContext("LAYER_CONTEXT");
21+
22+
if (level === undefined) {
23+
level = typeof parentLevel === "number" ? parentLevel + 1 : 0;
24+
}
25+
26+
setContext("LAYER_CONTEXT", level);
27+
</script>
28+
29+
<svelte:element
30+
this="{as}"
31+
class:bx--layer-one="{level === 0}"
32+
class:bx--layer-two="{level === 1}"
33+
class:bx--layer-three="{level === 2}"
34+
{...layerProps}
35+
>
36+
<slot />
37+
</svelte:element>

src/Layer/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as Layer } from "./Layer.svelte";

src/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export { FormLabel } from "./FormLabel";
5858
export { Grid, Row, Column } from "./Grid";
5959
export { ImageLoader } from "./ImageLoader";
6060
export { InlineLoading } from "./InlineLoading";
61+
export { Layer } from "./Layer";
6162
export { Link, OutboundLink } from "./Link";
6263
export {
6364
ListBox,

tests/Layer.test.svelte

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script>
2+
import { Layer } from "carbon-components-svelte";
3+
</script>
4+
5+
<Layer>
6+
<p>First layer</p>
7+
<Layer>
8+
<p>Second layer</p>
9+
<Layer>
10+
<p>Third layer</p>
11+
</Layer>
12+
</Layer>
13+
</Layer>

types/Layer/Layer.svelte.d.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type { SvelteComponentTyped } from "svelte";
2+
3+
export interface LayerProps {
4+
/**
5+
* Specify the layer level to override any existing levels based on hierarchy.
6+
* @default undefined
7+
*/
8+
level?: 0 | 1 | 2;
9+
10+
/**
11+
* Specify the HTML element to render.
12+
* @default "div"
13+
*/
14+
as?: string;
15+
16+
/**
17+
* Specify the Layer HTML element props
18+
* @default {}
19+
*/
20+
layerProps?: import("svelte/elements").HTMLElementAttributes;
21+
}
22+
23+
export default class Layer extends SvelteComponentTyped<
24+
LayerProps,
25+
Record<string, any>,
26+
{ default: {} }
27+
> {}

types/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export { default as Row } from "./Grid/Row.svelte";
6464
export { default as Column } from "./Grid/Column.svelte";
6565
export { default as ImageLoader } from "./ImageLoader/ImageLoader.svelte";
6666
export { default as InlineLoading } from "./InlineLoading/InlineLoading.svelte";
67+
export { default as Layer } from "./Layer/Layer.svelte";
6768
export { default as Link } from "./Link/Link.svelte";
6869
export { default as OutboundLink } from "./Link/OutboundLink.svelte";
6970
export { default as ListBox } from "./ListBox/ListBox.svelte";

0 commit comments

Comments
 (0)