nve-designsystem 0.1.51 → 0.1.54
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/components/nve-icon/nve-icon.component.d.ts +2 -1
- package/components/nve-icon/nve-icon.component.js +23 -19
- package/components/nve-icon/nve-icon.styles.js +9 -10
- package/components/nve-stepper/nve-step/nve-step.component.d.ts +25 -5
- package/components/nve-stepper/nve-step/nve-step.component.js +61 -66
- package/components/nve-stepper/nve-step/nve-step.styles.js +52 -50
- package/components/nve-stepper/nve-stepper.component.d.ts +36 -3
- package/components/nve-stepper/nve-stepper.component.js +72 -42
- package/components/nve-stepper/nve-stepper.styles.js +54 -64
- package/package.json +1 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
/**
|
|
3
3
|
* Et ikon.
|
|
4
|
-
* Vi bruker ikoner fra Material Symbols.
|
|
4
|
+
* Vi bruker ikoner fra Material Symbols. Man kan bruke både 'Sharp' og 'Outlined' ikoner.
|
|
5
5
|
* @see https://fonts.google.com/icons
|
|
6
6
|
*/
|
|
7
7
|
export default class NveIcon extends LitElement {
|
|
8
8
|
static styles: import("lit").CSSResult[];
|
|
9
|
+
/** Bestemmer om man skal bruke 'sharp' eller 'outlined' ikoner */
|
|
9
10
|
library: 'Outlined' | 'Sharp';
|
|
10
11
|
/** Navnet på ikonet i Material Symbols-biblioteket */
|
|
11
12
|
name: string;
|
|
@@ -1,31 +1,35 @@
|
|
|
1
|
-
import { s as
|
|
2
|
-
import { n as
|
|
3
|
-
import
|
|
4
|
-
var
|
|
5
|
-
for (var
|
|
6
|
-
(
|
|
7
|
-
return
|
|
1
|
+
import { s as m, x as c } from "../../chunks/lit-element.js";
|
|
2
|
+
import { n as p, t as y } from "../../chunks/property.js";
|
|
3
|
+
import f from "./nve-icon.styles.js";
|
|
4
|
+
var h = Object.defineProperty, d = Object.getOwnPropertyDescriptor, n = (e, s, i, o) => {
|
|
5
|
+
for (var t = o > 1 ? void 0 : o ? d(s, i) : s, a = e.length - 1, l; a >= 0; a--)
|
|
6
|
+
(l = e[a]) && (t = (o ? l(s, i, t) : l(t)) || t);
|
|
7
|
+
return o && t && h(s, i, t), t;
|
|
8
8
|
};
|
|
9
|
-
let
|
|
9
|
+
let r = class extends m {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments), this.library = "Outlined", this.name = "";
|
|
12
12
|
}
|
|
13
13
|
firstUpdated() {
|
|
14
|
+
if (!document.getElementById(`material-icons-${this.library.toLowerCase()}`)) {
|
|
15
|
+
const e = document.createElement("link");
|
|
16
|
+
e.id = `material-icons-${this.library.toLowerCase()}`, e.rel = "stylesheet", e.href = `https://fonts.googleapis.com/css2?family=Material+Symbols+${this.library}:opsz,wght,FILL,GRAD@24,400,0,0`, document.head.appendChild(e);
|
|
17
|
+
}
|
|
14
18
|
}
|
|
15
19
|
render() {
|
|
16
|
-
return
|
|
20
|
+
return c`<span part="icon" style="font-family:Material Symbols ${this.library}">${this.name}</span>`;
|
|
17
21
|
}
|
|
18
22
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
],
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
],
|
|
26
|
-
|
|
23
|
+
r.styles = [f];
|
|
24
|
+
n([
|
|
25
|
+
p({ type: String })
|
|
26
|
+
], r.prototype, "library", 2);
|
|
27
|
+
n([
|
|
28
|
+
p({ reflect: !0 })
|
|
29
|
+
], r.prototype, "name", 2);
|
|
30
|
+
r = n([
|
|
27
31
|
y("nve-icon")
|
|
28
|
-
],
|
|
32
|
+
], r);
|
|
29
33
|
export {
|
|
30
|
-
|
|
34
|
+
r as default
|
|
31
35
|
};
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import { i as e } from "../../chunks/lit-element.js";
|
|
2
2
|
const o = e`
|
|
3
|
-
|
|
4
3
|
/* Brukes i dropdown. Eneste måten å override shadow dom for å rotere expand_more ikonet når menyen åpner */
|
|
5
4
|
:host([name='expand_more']) {
|
|
6
5
|
transform: var(--icon-rotation, none);
|
|
7
6
|
transition: transform 0.3s ease;
|
|
8
7
|
}
|
|
9
8
|
|
|
10
|
-
/* prevent icon beeing highlighted */
|
|
9
|
+
/* prevent icon beeing highlighted */
|
|
11
10
|
:host {
|
|
12
|
-
|
|
11
|
+
-webkit-touch-callout: none; /* iOS Safari */
|
|
13
12
|
-webkit-user-select: none; /* Safari */
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
-khtml-user-select: none; /* Konqueror HTML */
|
|
14
|
+
-moz-user-select: none; /* Old versions of Firefox */
|
|
15
|
+
-ms-user-select: none; /* Internet Explorer/Edge */
|
|
16
|
+
user-select: none; /* Non-prefixed version, currently
|
|
18
17
|
supported by Chrome, Edge, Opera and Firefox */
|
|
19
|
-
}
|
|
20
|
-
:host {
|
|
18
|
+
}
|
|
19
|
+
:host {
|
|
21
20
|
display: flex;
|
|
22
|
-
}
|
|
21
|
+
}
|
|
23
22
|
|
|
24
23
|
/* we need it to center the icon */
|
|
25
24
|
:is(span) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement } from
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
2
|
export declare enum StepState {
|
|
3
3
|
NotStarted = 0,
|
|
4
4
|
Started = 1,
|
|
@@ -6,7 +6,6 @@ export declare enum StepState {
|
|
|
6
6
|
Error = 3
|
|
7
7
|
}
|
|
8
8
|
export interface StepProps {
|
|
9
|
-
icons: string[];
|
|
10
9
|
title: string;
|
|
11
10
|
description: string;
|
|
12
11
|
state: StepState;
|
|
@@ -14,16 +13,37 @@ export interface StepProps {
|
|
|
14
13
|
readyForEntrance: boolean;
|
|
15
14
|
}
|
|
16
15
|
export default class NveStep extends LitElement {
|
|
17
|
-
icons: string[];
|
|
18
16
|
title: string;
|
|
17
|
+
/**
|
|
18
|
+
* Avstand mellom steppene
|
|
19
|
+
*/
|
|
19
20
|
spaceBetweenSteps: number;
|
|
21
|
+
/**
|
|
22
|
+
* Hvilken ikonbibliotek som skal brukes, Sharp eller Outlined.
|
|
23
|
+
*/
|
|
20
24
|
iconLibrary: 'Outlined' | 'Sharp';
|
|
25
|
+
/**
|
|
26
|
+
* Stegets index
|
|
27
|
+
*/
|
|
21
28
|
index: number;
|
|
22
29
|
description: string;
|
|
30
|
+
/**
|
|
31
|
+
* Er steget besøkt, ikke besøkt, fullført eller feilet
|
|
32
|
+
* @type {StepState}
|
|
33
|
+
*/
|
|
23
34
|
state: StepState;
|
|
24
|
-
|
|
35
|
+
selectedStepIndex: number;
|
|
36
|
+
/**
|
|
37
|
+
* Er steget valgt
|
|
38
|
+
*/
|
|
25
39
|
isSelected: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Er steget det siste i rekken
|
|
42
|
+
*/
|
|
26
43
|
isLast: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Er det lov å gå inn i steget, alle krav er oppfylt
|
|
46
|
+
*/
|
|
27
47
|
entraceAllowed: boolean;
|
|
28
48
|
static styles: import("lit").CSSResult[];
|
|
29
49
|
iconForState(state: StepState): string;
|
|
@@ -32,6 +52,6 @@ export default class NveStep extends LitElement {
|
|
|
32
52
|
}
|
|
33
53
|
declare global {
|
|
34
54
|
interface HTMLElementTagNameMap {
|
|
35
|
-
|
|
55
|
+
'nve-step': NveStep;
|
|
36
56
|
}
|
|
37
57
|
}
|
|
@@ -1,56 +1,54 @@
|
|
|
1
1
|
import { s as d, x as l } from "../../../chunks/lit-element.js";
|
|
2
|
-
import { n as
|
|
2
|
+
import { n as r, t as h } from "../../../chunks/property.js";
|
|
3
3
|
import y from "./nve-step.styles.js";
|
|
4
|
-
var v = Object.defineProperty, u = Object.getOwnPropertyDescriptor,
|
|
5
|
-
for (var o = n > 1 ? void 0 : n ? u(
|
|
6
|
-
(
|
|
7
|
-
return n && o && v(
|
|
4
|
+
var v = Object.defineProperty, u = Object.getOwnPropertyDescriptor, i = (e, t, c, n) => {
|
|
5
|
+
for (var o = n > 1 ? void 0 : n ? u(t, c) : t, a = e.length - 1, p; a >= 0; a--)
|
|
6
|
+
(p = e[a]) && (o = (n ? p(t, c, o) : p(o)) || o);
|
|
7
|
+
return n && o && v(t, c, o), o;
|
|
8
8
|
}, f = /* @__PURE__ */ ((e) => (e[e.NotStarted = 0] = "NotStarted", e[e.Started = 1] = "Started", e[e.Done = 2] = "Done", e[e.Error = 3] = "Error", e))(f || {});
|
|
9
|
-
let
|
|
9
|
+
let s = class extends d {
|
|
10
10
|
constructor() {
|
|
11
|
-
super(...arguments), this.
|
|
11
|
+
super(...arguments), this.title = "", this.spaceBetweenSteps = 200, this.iconLibrary = "Outlined", this.index = 0, this.description = "", this.state = 0, this.selectedStepIndex = 0, this.isSelected = !1, this.isLast = !1, this.entraceAllowed = !1;
|
|
12
12
|
}
|
|
13
13
|
iconForState(e) {
|
|
14
|
-
let
|
|
14
|
+
let t = "";
|
|
15
15
|
switch (e) {
|
|
16
16
|
case 0:
|
|
17
|
-
|
|
17
|
+
t = `counter_${this.index + 1}`;
|
|
18
18
|
break;
|
|
19
19
|
case 1:
|
|
20
|
-
this.isSelected ?
|
|
20
|
+
this.isSelected ? t = `counter_${this.index + 1}` : t = "error";
|
|
21
21
|
break;
|
|
22
22
|
case 2:
|
|
23
|
-
|
|
23
|
+
this.isSelected ? t = `counter_${this.index + 1}` : t = "check_circle";
|
|
24
24
|
break;
|
|
25
25
|
case 3:
|
|
26
|
-
|
|
26
|
+
t = "error";
|
|
27
27
|
break;
|
|
28
28
|
default:
|
|
29
|
-
|
|
29
|
+
t = `help_${this.iconLibrary}`;
|
|
30
30
|
break;
|
|
31
31
|
}
|
|
32
|
-
return
|
|
32
|
+
return t;
|
|
33
33
|
}
|
|
34
34
|
onClick() {
|
|
35
|
-
this.dispatchEvent(
|
|
36
|
-
new CustomEvent("clicked", { detail: { index: this.index } })
|
|
37
|
-
);
|
|
35
|
+
this.dispatchEvent(new CustomEvent("clicked", { detail: { index: this.index } }));
|
|
38
36
|
}
|
|
39
37
|
render() {
|
|
40
38
|
return l`
|
|
41
39
|
<div class="step">
|
|
42
|
-
<div class="step-figure">
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
40
|
+
<div class="step-figure">
|
|
41
|
+
<span
|
|
42
|
+
@click="${this.onClick}"
|
|
43
|
+
class="${this.index <= this.selectedStepIndex ? "reached" : ""} ${this.state == 3 ? "hasError" : ""} ${this.state > 0 ? "" : "notStarted"}"
|
|
44
|
+
>
|
|
45
|
+
<nve-icon library=${this.iconLibrary} slot="suffix" name="${this.iconForState(this.state)}"></nve-icon>
|
|
46
|
+
</span>
|
|
47
|
+
|
|
48
|
+
${this.isLast ? "" : l`<div
|
|
49
|
+
style="width:${this.spaceBetweenSteps}px"
|
|
50
|
+
class="divider-horizontal ${this.index < this.selectedStepIndex ? "selectedInterval" : ""} ${this.state > 0 ? "" : "notStarted"}"
|
|
51
|
+
></div>`}
|
|
54
52
|
</div>
|
|
55
53
|
<div class="step-title">${this.title}</div>
|
|
56
54
|
<div class="step-description">${this.description}</div>
|
|
@@ -58,44 +56,41 @@ let t = class extends d {
|
|
|
58
56
|
`;
|
|
59
57
|
}
|
|
60
58
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
],
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
],
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
],
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
],
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
],
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
],
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
],
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
],
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
],
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
],
|
|
92
|
-
|
|
93
|
-
i({ type: Boolean })
|
|
94
|
-
], t.prototype, "entraceAllowed", 2);
|
|
95
|
-
t = r([
|
|
59
|
+
s.styles = [y];
|
|
60
|
+
i([
|
|
61
|
+
r({ reflect: !0 })
|
|
62
|
+
], s.prototype, "title", 2);
|
|
63
|
+
i([
|
|
64
|
+
r({ type: Number })
|
|
65
|
+
], s.prototype, "spaceBetweenSteps", 2);
|
|
66
|
+
i([
|
|
67
|
+
r({ type: String })
|
|
68
|
+
], s.prototype, "iconLibrary", 2);
|
|
69
|
+
i([
|
|
70
|
+
r({ type: Number })
|
|
71
|
+
], s.prototype, "index", 2);
|
|
72
|
+
i([
|
|
73
|
+
r({ type: String })
|
|
74
|
+
], s.prototype, "description", 2);
|
|
75
|
+
i([
|
|
76
|
+
r({ type: Number })
|
|
77
|
+
], s.prototype, "state", 2);
|
|
78
|
+
i([
|
|
79
|
+
r({ type: Number })
|
|
80
|
+
], s.prototype, "selectedStepIndex", 2);
|
|
81
|
+
i([
|
|
82
|
+
r({ type: Boolean, reflect: !0 })
|
|
83
|
+
], s.prototype, "isSelected", 2);
|
|
84
|
+
i([
|
|
85
|
+
r({ type: Boolean })
|
|
86
|
+
], s.prototype, "isLast", 2);
|
|
87
|
+
i([
|
|
88
|
+
r({ type: Boolean })
|
|
89
|
+
], s.prototype, "entraceAllowed", 2);
|
|
90
|
+
s = i([
|
|
96
91
|
h("nve-step")
|
|
97
|
-
],
|
|
92
|
+
], s);
|
|
98
93
|
export {
|
|
99
94
|
f as StepState,
|
|
100
|
-
|
|
95
|
+
s as default
|
|
101
96
|
};
|
|
@@ -1,64 +1,66 @@
|
|
|
1
1
|
import { i as t } from "../../../chunks/lit-element.js";
|
|
2
2
|
const o = t`
|
|
3
|
-
.step-figure {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
3
|
+
.step-figure {
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
}
|
|
9
8
|
|
|
10
|
-
.divider-horizontal {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
9
|
+
.divider-horizontal {
|
|
10
|
+
height: 2px;
|
|
11
|
+
background-color: black;
|
|
12
|
+
flex-grow: 1;
|
|
13
|
+
}
|
|
15
14
|
|
|
16
|
-
.step-title{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
.step-description{
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
15
|
+
.step-title {
|
|
16
|
+
font-size: 16px;
|
|
17
|
+
font-weight: bold;
|
|
18
|
+
padding-top: 4px;
|
|
19
|
+
}
|
|
20
|
+
.step-description {
|
|
21
|
+
font-size: 14px;
|
|
22
|
+
font-weight: bold;
|
|
23
|
+
padding-top: 4px;
|
|
24
|
+
}
|
|
26
25
|
|
|
27
|
-
.selectedInterval {
|
|
28
|
-
|
|
29
|
-
}
|
|
26
|
+
.selectedInterval {
|
|
27
|
+
height: 4px;
|
|
28
|
+
}
|
|
30
29
|
|
|
31
|
-
.
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
.reached {
|
|
31
|
+
font-variation-settings:
|
|
32
|
+
'FILL' 1,
|
|
33
|
+
'wght' 300,
|
|
34
|
+
'GRAD' 1,
|
|
35
|
+
'opsz' 48 !important;
|
|
36
|
+
}
|
|
34
37
|
|
|
35
|
-
.hasError {
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
+
.hasError {
|
|
39
|
+
color: red;
|
|
40
|
+
}
|
|
38
41
|
|
|
39
|
-
.notStarted {
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
+
.notStarted {
|
|
43
|
+
color: rgb(184, 184, 184);
|
|
44
|
+
}
|
|
42
45
|
|
|
43
|
-
.evaluated {
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
+
.evaluated {
|
|
47
|
+
background-color: rgb(184, 184, 184);
|
|
48
|
+
}
|
|
46
49
|
|
|
47
|
-
span {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.material-symbols-sharp {
|
|
54
|
-
font-size: 2rem;
|
|
55
|
-
font-variation-settings:
|
|
56
|
-
'FILL' 0,
|
|
57
|
-
'wght' 300,
|
|
58
|
-
'GRAD' 0,
|
|
59
|
-
'opsz' 24
|
|
60
|
-
}
|
|
50
|
+
span {
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
font-size: 2rem;
|
|
53
|
+
display: flex;
|
|
54
|
+
}
|
|
61
55
|
|
|
56
|
+
.material-symbols-sharp {
|
|
57
|
+
font-size: 2rem;
|
|
58
|
+
font-variation-settings:
|
|
59
|
+
'FILL' 0,
|
|
60
|
+
'wght' 300,
|
|
61
|
+
'GRAD' 0,
|
|
62
|
+
'opsz' 24;
|
|
63
|
+
}
|
|
62
64
|
`;
|
|
63
65
|
export {
|
|
64
66
|
o as default
|
|
@@ -2,18 +2,49 @@ import { LitElement } from 'lit';
|
|
|
2
2
|
import { StepProps } from './nve-step/nve-step.component';
|
|
3
3
|
export default class NveStepper extends LitElement {
|
|
4
4
|
static styles: import("lit").CSSResult[];
|
|
5
|
+
/**
|
|
6
|
+
* Hvilken retning steppene skal gå. TODO: implementer vertical
|
|
7
|
+
*/
|
|
5
8
|
orientation: 'horizontal' | 'vertical';
|
|
6
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Indeks for valgt steg, gir mulighet for å styre hvilket steg som er valgt.
|
|
11
|
+
*/
|
|
12
|
+
selectedStepIndex: {
|
|
13
|
+
value: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Avstand mellom steppene
|
|
17
|
+
*/
|
|
7
18
|
spaceBetweenSteps: number;
|
|
19
|
+
/**
|
|
20
|
+
* Hvilken ikonbibliotek som skal brukes, Sharp eller Outlined.
|
|
21
|
+
*/
|
|
8
22
|
iconLibrary: 'Outlined' | 'Sharp';
|
|
23
|
+
/**
|
|
24
|
+
* Mulighet om å endre teksten på knapp ved siste steg,
|
|
25
|
+
* default er disabled neste.
|
|
26
|
+
*/
|
|
27
|
+
optionalEndButton: string;
|
|
28
|
+
/**
|
|
29
|
+
* Steppene som skal vises, se StepProps interface for data som skal sendes inn.
|
|
30
|
+
*/
|
|
9
31
|
steps: StepProps[];
|
|
10
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Ved endring av props, re-render komponenten eksternt med document.querySelector("nve-stepper")?.reRender();
|
|
34
|
+
* Ellers vil man ikke se endringene før intern state endres.
|
|
35
|
+
*/
|
|
36
|
+
reRender(): void;
|
|
11
37
|
firstUpdated(): void;
|
|
12
38
|
nextStep(): void;
|
|
13
39
|
prevStep(): void;
|
|
14
40
|
selectStep(event: any): void;
|
|
15
41
|
setStep(index: number): void;
|
|
42
|
+
/**
|
|
43
|
+
* Sjekker om vi er på start eller slutten av steppene
|
|
44
|
+
* @returns 'start', 'end' eller undefined
|
|
45
|
+
*/
|
|
16
46
|
getExtremes(): "start" | "end" | undefined;
|
|
47
|
+
onComplete(): void;
|
|
17
48
|
render(): import("lit-html").TemplateResult<1>;
|
|
18
49
|
}
|
|
19
50
|
declare global {
|
|
@@ -22,7 +53,9 @@ declare global {
|
|
|
22
53
|
}
|
|
23
54
|
}
|
|
24
55
|
export interface StepperProps {
|
|
25
|
-
|
|
56
|
+
selectedStepIndex: {
|
|
57
|
+
value: number;
|
|
58
|
+
};
|
|
26
59
|
steps: StepProps[];
|
|
27
60
|
spaceBetweenSteps: number;
|
|
28
61
|
}
|
|
@@ -1,59 +1,78 @@
|
|
|
1
|
-
import { s as
|
|
2
|
-
import { n as
|
|
3
|
-
import { StepState as
|
|
4
|
-
import
|
|
1
|
+
import { s as c, x as h } from "../../chunks/lit-element.js";
|
|
2
|
+
import { n as r, t as v } from "../../chunks/property.js";
|
|
3
|
+
import { StepState as l } from "./nve-step/nve-step.component.js";
|
|
4
|
+
import u from "./nve-stepper.styles.js";
|
|
5
5
|
import "./nve-step/nve-step.styles.js";
|
|
6
|
-
var
|
|
7
|
-
for (var i =
|
|
8
|
-
(
|
|
9
|
-
return
|
|
6
|
+
var S = Object.defineProperty, y = Object.getOwnPropertyDescriptor, n = (e, t, o, p) => {
|
|
7
|
+
for (var i = p > 1 ? void 0 : p ? y(t, o) : t, a = e.length - 1, d; a >= 0; a--)
|
|
8
|
+
(d = e[a]) && (i = (p ? d(t, o, i) : d(i)) || i);
|
|
9
|
+
return p && i && S(t, o, i), i;
|
|
10
10
|
};
|
|
11
|
-
let s = class extends
|
|
11
|
+
let s = class extends c {
|
|
12
12
|
constructor() {
|
|
13
|
-
super(...arguments), this.orientation = "horizontal", this.spaceBetweenSteps = 200, this.iconLibrary = "Outlined", this.
|
|
13
|
+
super(...arguments), this.orientation = "horizontal", this.selectedStepIndex = { value: 0 }, this.spaceBetweenSteps = 200, this.iconLibrary = "Outlined", this.optionalEndButton = "", this.steps = new Array();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Ved endring av props, re-render komponenten eksternt med document.querySelector("nve-stepper")?.reRender();
|
|
17
|
+
* Ellers vil man ikke se endringene før intern state endres.
|
|
18
|
+
*/
|
|
19
|
+
reRender() {
|
|
20
|
+
this.requestUpdate();
|
|
14
21
|
}
|
|
15
22
|
firstUpdated() {
|
|
16
|
-
this.setStep(this.
|
|
23
|
+
this.setStep(this.selectedStepIndex.value);
|
|
17
24
|
}
|
|
18
25
|
nextStep() {
|
|
19
|
-
this.
|
|
26
|
+
this.selectedStepIndex.value < this.steps.length - 1 && this.setStep(this.selectedStepIndex.value + 1);
|
|
20
27
|
}
|
|
21
28
|
prevStep() {
|
|
22
|
-
this.
|
|
29
|
+
this.selectedStepIndex.value > 0 && this.setStep(this.selectedStepIndex.value - 1);
|
|
23
30
|
}
|
|
24
31
|
selectStep(e) {
|
|
25
|
-
e.detail.index > 0 && this.steps[e.detail.index - 1].state ==
|
|
32
|
+
e.detail.index > 0 && this.steps[e.detail.index - 1].state == l.NotStarted || this.setStep(e.detail.index);
|
|
26
33
|
}
|
|
27
34
|
setStep(e) {
|
|
28
35
|
if (this.steps[e].readyForEntrance) {
|
|
29
|
-
this.
|
|
36
|
+
this.selectedStepIndex.value = e;
|
|
30
37
|
for (let t = 0; t < this.steps.length; t++)
|
|
31
|
-
this.steps[t].isSelected = t === e, t <= e && this.steps[t].state
|
|
38
|
+
this.steps[t].isSelected = t === e, t <= e && this.steps[t].state !== l.Done && (this.steps[t].state = l.Started), this.steps = [...this.steps];
|
|
32
39
|
}
|
|
33
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Sjekker om vi er på start eller slutten av steppene
|
|
43
|
+
* @returns 'start', 'end' eller undefined
|
|
44
|
+
*/
|
|
34
45
|
getExtremes() {
|
|
35
|
-
if (this.
|
|
46
|
+
if (this.selectedStepIndex.value === 0)
|
|
36
47
|
return "start";
|
|
37
|
-
if (this.
|
|
48
|
+
if (this.selectedStepIndex.value === this.steps.length - 1)
|
|
38
49
|
return "end";
|
|
39
50
|
}
|
|
51
|
+
onComplete() {
|
|
52
|
+
this.dispatchEvent(new CustomEvent("complete", { bubbles: !0 }));
|
|
53
|
+
}
|
|
40
54
|
render() {
|
|
41
|
-
return
|
|
55
|
+
return h`
|
|
42
56
|
<div class="stepper ${this.orientation}">
|
|
43
|
-
<
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
<div style="width: 120px">
|
|
58
|
+
<nve-button
|
|
59
|
+
.disabled=${this.getExtremes() === "start"}
|
|
60
|
+
size="medium"
|
|
61
|
+
variant="primary"
|
|
62
|
+
@click=${this.prevStep}
|
|
63
|
+
><nve-icon slot="prefix" name="navigate_before" library="${this.iconLibrary}"></nve-icon>Forrige</nve-button
|
|
64
|
+
>
|
|
65
|
+
</div>
|
|
46
66
|
<div class="flex-container">
|
|
47
67
|
${this.steps.map(
|
|
48
|
-
(e, t) =>
|
|
68
|
+
(e, t) => h`
|
|
49
69
|
<nve-step
|
|
50
70
|
@clicked=${this.selectStep}
|
|
51
71
|
.iconLibrary=${this.iconLibrary}
|
|
52
|
-
.icons=${e.icons}
|
|
53
72
|
.title=${e.title}
|
|
54
73
|
.description=${e.description}
|
|
55
74
|
.state=${e.state}
|
|
56
|
-
.
|
|
75
|
+
.selectedStepIndex=${this.selectedStepIndex.value}
|
|
57
76
|
.isSelected=${e.isSelected}
|
|
58
77
|
.isLast=${t === this.steps.length - 1}
|
|
59
78
|
.index=${t}
|
|
@@ -65,31 +84,42 @@ let s = class extends d {
|
|
|
65
84
|
`
|
|
66
85
|
)}
|
|
67
86
|
</div>
|
|
68
|
-
<
|
|
69
|
-
<nve-
|
|
70
|
-
|
|
87
|
+
<div style="width: 120px">
|
|
88
|
+
<nve-button
|
|
89
|
+
.disabled=${this.getExtremes() === "end" && this.optionalEndButton === ""}
|
|
90
|
+
size="medium"
|
|
91
|
+
variant="primary"
|
|
92
|
+
@click=${this.getExtremes() === "end" && this.optionalEndButton !== "" ? this.onComplete : this.nextStep}
|
|
93
|
+
>
|
|
94
|
+
<nve-icon slot="suffix" name="navigate_next" library="${this.iconLibrary}"></nve-icon>
|
|
95
|
+
${this.getExtremes() === "end" && this.optionalEndButton !== "" ? this.optionalEndButton : "Neste"}
|
|
96
|
+
</nve-button>
|
|
97
|
+
</div>
|
|
71
98
|
</div>
|
|
72
99
|
`;
|
|
73
100
|
}
|
|
74
101
|
};
|
|
75
|
-
s.styles = [
|
|
76
|
-
|
|
77
|
-
|
|
102
|
+
s.styles = [u];
|
|
103
|
+
n([
|
|
104
|
+
r()
|
|
78
105
|
], s.prototype, "orientation", 2);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
], s.prototype, "
|
|
82
|
-
|
|
83
|
-
|
|
106
|
+
n([
|
|
107
|
+
r({ type: Object })
|
|
108
|
+
], s.prototype, "selectedStepIndex", 2);
|
|
109
|
+
n([
|
|
110
|
+
r({ type: Number })
|
|
84
111
|
], s.prototype, "spaceBetweenSteps", 2);
|
|
85
|
-
|
|
86
|
-
|
|
112
|
+
n([
|
|
113
|
+
r({ type: String })
|
|
87
114
|
], s.prototype, "iconLibrary", 2);
|
|
88
|
-
|
|
89
|
-
|
|
115
|
+
n([
|
|
116
|
+
r({ type: String })
|
|
117
|
+
], s.prototype, "optionalEndButton", 2);
|
|
118
|
+
n([
|
|
119
|
+
r({ type: Array })
|
|
90
120
|
], s.prototype, "steps", 2);
|
|
91
|
-
s =
|
|
92
|
-
|
|
121
|
+
s = n([
|
|
122
|
+
v("nve-stepper")
|
|
93
123
|
], s);
|
|
94
124
|
export {
|
|
95
125
|
s as default
|
|
@@ -1,75 +1,65 @@
|
|
|
1
1
|
import { i as e } from "../../chunks/lit-element.js";
|
|
2
2
|
const t = e`
|
|
3
|
-
.stepper {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
3
|
+
.stepper {
|
|
4
|
+
display: flex;
|
|
5
|
+
position: relative;
|
|
6
|
+
align-items: center;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
}
|
|
10
10
|
|
|
11
|
-
a {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
.step {
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
button {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
11
|
+
a {
|
|
12
|
+
cursor: pointer;
|
|
13
|
+
user-select: none;
|
|
14
|
+
}
|
|
15
|
+
.step {
|
|
16
|
+
height: 200px;
|
|
17
|
+
}
|
|
18
|
+
button {
|
|
19
|
+
z-index: 2;
|
|
20
|
+
user-select: none;
|
|
21
|
+
}
|
|
22
22
|
|
|
23
|
-
.scroll-menu {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
23
|
+
.scroll-menu {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
overflow-x: hidden;
|
|
27
|
+
}
|
|
28
28
|
|
|
29
|
-
.flex-container {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
.hidden {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
:host {
|
|
39
|
-
|
|
29
|
+
.flex-container {
|
|
30
|
+
display: flex;
|
|
31
|
+
padding: 20px 60px 20px 60px;
|
|
32
|
+
position: relative;
|
|
33
|
+
}
|
|
34
|
+
.hidden {
|
|
35
|
+
visibility: hidden;
|
|
36
|
+
pointer-events: none;
|
|
37
|
+
}
|
|
38
|
+
:host {
|
|
39
|
+
-webkit-touch-callout: none; /* iOS Safari */
|
|
40
40
|
-webkit-user-select: none; /* Safari */
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
-khtml-user-select: none; /* Konqueror HTML */
|
|
42
|
+
-moz-user-select: none; /* Old versions of Firefox */
|
|
43
|
+
-ms-user-select: none; /* Internet Explorer/Edge */
|
|
44
|
+
user-select: none; /* Non-prefixed version, currently
|
|
45
45
|
supported by Chrome, Edge, Opera and Firefox */
|
|
46
|
-
}
|
|
46
|
+
}
|
|
47
47
|
|
|
48
|
-
.scroll-button.prev {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
to left,
|
|
64
|
-
#ffffff,
|
|
65
|
-
#ffffff 60%,
|
|
66
|
-
transparent 100%
|
|
67
|
-
);
|
|
68
|
-
padding: 20px 80px 20px 80px;
|
|
69
|
-
position: absolute;
|
|
70
|
-
z-index: 1;
|
|
71
|
-
right: 0;
|
|
72
|
-
}
|
|
48
|
+
.scroll-button.prev {
|
|
49
|
+
background: linear-gradient(to right, #ffffff, #ffffff 60%, transparent 100%);
|
|
50
|
+
padding: 20px 80px 20px 20px;
|
|
51
|
+
margin: 0 60px;
|
|
52
|
+
position: absolute;
|
|
53
|
+
z-index: 1;
|
|
54
|
+
left: 0;
|
|
55
|
+
}
|
|
56
|
+
.scroll-button.next {
|
|
57
|
+
background: linear-gradient(to left, #ffffff, #ffffff 60%, transparent 100%);
|
|
58
|
+
padding: 20px 80px 20px 80px;
|
|
59
|
+
position: absolute;
|
|
60
|
+
z-index: 1;
|
|
61
|
+
right: 0;
|
|
62
|
+
}
|
|
73
63
|
`;
|
|
74
64
|
export {
|
|
75
65
|
t as default
|