ds-one 0.2.0-alpha.1 → 0.2.0-alpha.3

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.
Files changed (93) hide show
  1. package/DS1/1-root/one.css +1 -1
  2. package/DS1/2-core/{article-v1.ts → ds-article.ts} +5 -4
  3. package/DS1/2-core/{attributes-v1.ts → ds-attributes.ts} +4 -3
  4. package/DS1/2-core/{cycle-v1.ts → ds-cycle.ts} +11 -10
  5. package/DS1/2-core/{downloadcv-v1.ts → ds-downloadcv.ts} +9 -8
  6. package/DS1/2-core/{header-v1.ts → ds-header.ts} +4 -3
  7. package/DS1/2-core/{home-v1.ts → ds-home.ts} +3 -2
  8. package/DS1/2-core/{icon-v1.ts → ds-icon.ts} +2 -2
  9. package/DS1/2-core/{link-v1.ts → ds-link.ts} +5 -5
  10. package/DS1/2-core/{markdown-v1.ts → ds-markdown.ts} +3 -2
  11. package/DS1/2-core/{price-v1.ts → ds-price.ts} +4 -3
  12. package/DS1/2-core/{squarecircle-v1.ts → ds-squarecircle.ts} +4 -3
  13. package/DS1/2-core/{title-v1.ts → ds-title.ts} +5 -4
  14. package/DS1/2-core/{tooltip-v1.ts → ds-tooltip.ts} +4 -3
  15. package/DS1/2-core/{viewtoggle-v1.ts → ds-viewtoggle.ts} +4 -3
  16. package/DS1/2-core/{year-v1.ts → ds-year.ts} +4 -3
  17. package/DS1/3-unit/{doublenav-v1.ts → ds-doublenav.ts} +9 -8
  18. package/DS1/3-unit/{list-v1.ts → ds-list.ts} +3 -2
  19. package/DS1/3-unit/{panel-v1.ts → ds-panel.ts} +3 -2
  20. package/DS1/3-unit/{row-v1.ts → ds-row.ts} +3 -2
  21. package/DS1/3-unit/{singlenav-v1.ts → ds-singlenav.ts} +5 -4
  22. package/DS1/index.ts +20 -20
  23. package/DS1/utils/cdn-loader.ts +20 -44
  24. package/README.md +4 -4
  25. package/dist/2-core/ds-article.d.ts +129 -0
  26. package/dist/2-core/ds-article.d.ts.map +1 -0
  27. package/dist/2-core/ds-article.js +361 -0
  28. package/dist/2-core/ds-attributes.d.ts +47 -0
  29. package/dist/2-core/ds-attributes.d.ts.map +1 -0
  30. package/dist/2-core/ds-attributes.js +128 -0
  31. package/dist/2-core/ds-cycle.d.ts +66 -0
  32. package/dist/2-core/ds-cycle.d.ts.map +1 -0
  33. package/dist/2-core/ds-cycle.js +586 -0
  34. package/dist/2-core/ds-downloadcv.d.ts +58 -0
  35. package/dist/2-core/ds-downloadcv.d.ts.map +1 -0
  36. package/dist/2-core/ds-downloadcv.js +119 -0
  37. package/dist/2-core/ds-header.d.ts +28 -0
  38. package/dist/2-core/ds-header.d.ts.map +1 -0
  39. package/dist/2-core/ds-header.js +66 -0
  40. package/dist/2-core/ds-home.d.ts +26 -0
  41. package/dist/2-core/ds-home.d.ts.map +1 -0
  42. package/dist/2-core/ds-home.js +148 -0
  43. package/dist/2-core/ds-icon.d.ts +28 -0
  44. package/dist/2-core/ds-icon.d.ts.map +1 -0
  45. package/dist/2-core/ds-icon.js +297 -0
  46. package/dist/2-core/ds-link.d.ts +35 -0
  47. package/dist/2-core/ds-link.d.ts.map +1 -0
  48. package/dist/2-core/ds-link.js +85 -0
  49. package/dist/2-core/ds-markdown.d.ts +7 -0
  50. package/dist/2-core/ds-markdown.d.ts.map +1 -0
  51. package/dist/2-core/ds-markdown.js +240 -0
  52. package/dist/2-core/ds-price.d.ts +46 -0
  53. package/dist/2-core/ds-price.d.ts.map +1 -0
  54. package/dist/2-core/ds-price.js +72 -0
  55. package/dist/2-core/ds-squarecircle.d.ts +50 -0
  56. package/dist/2-core/ds-squarecircle.d.ts.map +1 -0
  57. package/dist/2-core/ds-squarecircle.js +133 -0
  58. package/dist/2-core/ds-title.d.ts +50 -0
  59. package/dist/2-core/ds-title.d.ts.map +1 -0
  60. package/dist/2-core/ds-title.js +103 -0
  61. package/dist/2-core/ds-tooltip.d.ts +39 -0
  62. package/dist/2-core/ds-tooltip.d.ts.map +1 -0
  63. package/dist/2-core/ds-tooltip.js +145 -0
  64. package/dist/2-core/ds-viewtoggle.d.ts +27 -0
  65. package/dist/2-core/ds-viewtoggle.d.ts.map +1 -0
  66. package/dist/2-core/ds-viewtoggle.js +49 -0
  67. package/dist/2-core/ds-year.d.ts +16 -0
  68. package/dist/2-core/ds-year.d.ts.map +1 -0
  69. package/dist/2-core/ds-year.js +21 -0
  70. package/dist/3-unit/ds-doublenav.d.ts +51 -0
  71. package/dist/3-unit/ds-doublenav.d.ts.map +1 -0
  72. package/dist/3-unit/ds-doublenav.js +88 -0
  73. package/dist/3-unit/ds-list.d.ts +11 -0
  74. package/dist/3-unit/ds-list.d.ts.map +1 -0
  75. package/dist/3-unit/ds-list.js +15 -0
  76. package/dist/3-unit/ds-panel.d.ts +11 -0
  77. package/dist/3-unit/ds-panel.d.ts.map +1 -0
  78. package/dist/3-unit/ds-panel.js +16 -0
  79. package/dist/3-unit/ds-row.d.ts +25 -0
  80. package/dist/3-unit/ds-row.d.ts.map +1 -0
  81. package/dist/3-unit/ds-row.js +32 -0
  82. package/dist/3-unit/ds-singlenav.d.ts +32 -0
  83. package/dist/3-unit/ds-singlenav.d.ts.map +1 -0
  84. package/dist/3-unit/ds-singlenav.js +62 -0
  85. package/dist/ds-one.bundle.js +79 -99
  86. package/dist/ds-one.bundle.js.map +3 -3
  87. package/dist/ds-one.bundle.min.js +47 -47
  88. package/dist/ds-one.bundle.min.js.map +4 -4
  89. package/dist/index.d.ts +20 -20
  90. package/dist/index.js +20 -20
  91. package/dist/utils/cdn-loader.d.ts.map +1 -1
  92. package/dist/utils/cdn-loader.js +20 -38
  93. package/package.json +2 -2
@@ -0,0 +1,49 @@
1
+ import { LitElement, html } from "lit";
2
+ import { getText } from "../utils/language";
3
+ import { getViewMode, setViewMode } from "../utils/viewMode";
4
+ /**
5
+ * A component for toggling between text and image view modes
6
+ *
7
+ * @element ds-viewtoggle
8
+ */
9
+ export class ViewToggle extends LitElement {
10
+ constructor() {
11
+ super();
12
+ this._toggle = () => {
13
+ const next = this._mode === "image" ? "text" : "image";
14
+ setViewMode(next);
15
+ };
16
+ this._mode = getViewMode();
17
+ this.boundHandlers = {
18
+ viewModeChanged: ((e) => {
19
+ const mode = e.detail === "image" ? "image" : "text";
20
+ if (this._mode !== mode) {
21
+ this._mode = mode;
22
+ }
23
+ }),
24
+ languageChanged: (() => {
25
+ this.requestUpdate();
26
+ }),
27
+ };
28
+ }
29
+ connectedCallback() {
30
+ super.connectedCallback();
31
+ window.addEventListener("view-mode-changed", this.boundHandlers.viewModeChanged);
32
+ window.addEventListener("language-changed", this.boundHandlers.languageChanged);
33
+ }
34
+ disconnectedCallback() {
35
+ super.disconnectedCallback();
36
+ window.removeEventListener("view-mode-changed", this.boundHandlers.viewModeChanged);
37
+ window.removeEventListener("language-changed", this.boundHandlers.languageChanged);
38
+ }
39
+ render() {
40
+ const label = this._mode === "image" ? getText("hideImage") : getText("viewImage");
41
+ return html `
42
+ <ds-button variant="primary" @click=${this._toggle}>${label}</ds-button>
43
+ `;
44
+ }
45
+ }
46
+ ViewToggle.properties = {
47
+ _mode: { type: String, state: true },
48
+ };
49
+ customElements.define("ds-viewtoggle", ViewToggle);
@@ -0,0 +1,16 @@
1
+ import { LitElement } from "lit";
2
+ /**
3
+ * A component for displaying the current year
4
+ *
5
+ * @element ds-year
6
+ */
7
+ export declare class Year extends LitElement {
8
+ static styles: import("lit").CSSResult;
9
+ render(): import("lit-html").TemplateResult<1>;
10
+ }
11
+ declare global {
12
+ interface HTMLElementTagNameMap {
13
+ "ds-year": Year;
14
+ }
15
+ }
16
+ //# sourceMappingURL=ds-year.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-year.d.ts","sourceRoot":"","sources":["../../DS1/2-core/ds-year.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,IAAK,SAAQ,UAAU;IAClC,MAAM,CAAC,MAAM,0BAOX;IAEF,MAAM;CAIP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,IAAI,CAAC;KACjB;CACF"}
@@ -0,0 +1,21 @@
1
+ import { LitElement, html, css } from "lit";
2
+ /**
3
+ * A component for displaying the current year
4
+ *
5
+ * @element ds-year
6
+ */
7
+ export class Year extends LitElement {
8
+ render() {
9
+ const year = new Date().getFullYear();
10
+ return html `<span>${year}</span>`;
11
+ }
12
+ }
13
+ Year.styles = css `
14
+ :host {
15
+ display: inline;
16
+ font-family: var(--typeface, var(--typeface-regular));
17
+ font-size: inherit;
18
+ color: inherit;
19
+ }
20
+ `;
21
+ customElements.define("ds-year", Year);
@@ -0,0 +1,51 @@
1
+ import { LitElement } from "lit";
2
+ /**
3
+ * A component for double navigation (previous/next)
4
+ *
5
+ * @element ds-doublenav
6
+ * @prop {string} previous - URL for previous link
7
+ * @prop {string} next - URL for next link
8
+ * @prop {string} previousText - Text for previous link
9
+ * @prop {string} nextText - Text for next link
10
+ * @prop {string} overlay - Overlay color (blue, red, orange, green, yellow)
11
+ */
12
+ export declare class DoubleNav extends LitElement {
13
+ static get properties(): {
14
+ previous: {
15
+ type: StringConstructor;
16
+ reflect: boolean;
17
+ };
18
+ next: {
19
+ type: StringConstructor;
20
+ reflect: boolean;
21
+ };
22
+ previousText: {
23
+ type: StringConstructor;
24
+ reflect: boolean;
25
+ attribute: string;
26
+ };
27
+ nextText: {
28
+ type: StringConstructor;
29
+ reflect: boolean;
30
+ attribute: string;
31
+ };
32
+ overlay: {
33
+ type: StringConstructor;
34
+ reflect: boolean;
35
+ };
36
+ };
37
+ previous: string;
38
+ next: string;
39
+ previousText: string;
40
+ nextText: string;
41
+ overlay?: string;
42
+ constructor();
43
+ static styles: import("lit").CSSResult;
44
+ render(): import("lit-html").TemplateResult<1>;
45
+ }
46
+ declare global {
47
+ interface HTMLElementTagNameMap {
48
+ "ds-doublenav": DoubleNav;
49
+ }
50
+ }
51
+ //# sourceMappingURL=ds-doublenav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-doublenav.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-doublenav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C;;;;;;;;;GASG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,MAAM,KAAK,UAAU;;;;;;;;;;;;;;;;;;;;;;;MAQpB;IAEO,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;;IAWzB,MAAM,CAAC,MAAM,0BAoCX;IAEF,MAAM;CAoBP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,SAAS,CAAC;KAC3B;CACF"}
@@ -0,0 +1,88 @@
1
+ import { LitElement, html, css } from "lit";
2
+ /**
3
+ * A component for double navigation (previous/next)
4
+ *
5
+ * @element ds-doublenav
6
+ * @prop {string} previous - URL for previous link
7
+ * @prop {string} next - URL for next link
8
+ * @prop {string} previousText - Text for previous link
9
+ * @prop {string} nextText - Text for next link
10
+ * @prop {string} overlay - Overlay color (blue, red, orange, green, yellow)
11
+ */
12
+ export class DoubleNav extends LitElement {
13
+ static get properties() {
14
+ return {
15
+ previous: { type: String, reflect: true },
16
+ next: { type: String, reflect: true },
17
+ previousText: { type: String, reflect: true, attribute: "previous-text" },
18
+ nextText: { type: String, reflect: true, attribute: "next-text" },
19
+ overlay: { type: String, reflect: true },
20
+ };
21
+ }
22
+ constructor() {
23
+ super();
24
+ this.previous = "";
25
+ this.next = "";
26
+ this.previousText = "";
27
+ this.nextText = "";
28
+ this.overlay = "";
29
+ }
30
+ render() {
31
+ return html `
32
+ ${this.previous
33
+ ? html `
34
+ <a href="${this.previous}" class="nav-previous">
35
+ <ds-icon type="left"></ds-icon>
36
+ <ds-text>${this.previousText || "Previous"}</ds-text>
37
+ </a>
38
+ `
39
+ : html `<div></div>`}
40
+ ${this.next
41
+ ? html `
42
+ <a href="${this.next}" class="nav-next">
43
+ <ds-text>${this.nextText || "Next"}</ds-text>
44
+ <ds-icon type="right"></ds-icon>
45
+ </a>
46
+ `
47
+ : html `<div></div>`}
48
+ `;
49
+ }
50
+ }
51
+ DoubleNav.styles = css `
52
+ :host {
53
+ display: flex;
54
+ justify-content: space-between;
55
+ gap: calc(5px * var(--scaling-factor));
56
+ padding: calc(2px * var(--scaling-factor));
57
+ align-items: center;
58
+ }
59
+
60
+ a {
61
+ display: inline-flex;
62
+ align-items: center;
63
+ gap: calc(5px * var(--scaling-factor));
64
+ text-decoration: none;
65
+ color: inherit;
66
+ }
67
+
68
+ .nav-previous {
69
+ justify-self: start;
70
+ }
71
+
72
+ .nav-next {
73
+ justify-self: end;
74
+ }
75
+
76
+ .nav-previous ds-icon {
77
+ order: -1;
78
+ }
79
+
80
+ .nav-next ds-icon {
81
+ padding-top: 3px;
82
+ }
83
+
84
+ .nav-previous ds-icon {
85
+ padding-top: 3px;
86
+ }
87
+ `;
88
+ customElements.define("ds-doublenav", DoubleNav);
@@ -0,0 +1,11 @@
1
+ import { LitElement } from "lit";
2
+ export declare class List extends LitElement {
3
+ static styles: import("lit").CSSResult;
4
+ render(): import("lit-html").TemplateResult<1>;
5
+ }
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ "ds-list": List;
9
+ }
10
+ }
11
+ //# sourceMappingURL=ds-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-list.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,qBAAa,IAAK,SAAQ,UAAU;IAClC,MAAM,CAAC,MAAM,0BAOX;IAEF,MAAM;CAGP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,IAAI,CAAC;KACjB;CACF"}
@@ -0,0 +1,15 @@
1
+ import { LitElement, html, css } from "lit";
2
+ export class List extends LitElement {
3
+ render() {
4
+ return html `<slot></slot>`;
5
+ }
6
+ }
7
+ List.styles = css `
8
+ :host {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: 0;
12
+ width: 100%;
13
+ }
14
+ `;
15
+ customElements.define("ds-list", List);
@@ -0,0 +1,11 @@
1
+ import { LitElement } from "lit";
2
+ export declare class Panel extends LitElement {
3
+ static styles: import("lit").CSSResult;
4
+ render(): import("lit-html").TemplateResult<1>;
5
+ }
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ "ds-panel": Panel;
9
+ }
10
+ }
11
+ //# sourceMappingURL=ds-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-panel.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-panel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,qBAAa,KAAM,SAAQ,UAAU;IACnC,MAAM,CAAC,MAAM,0BAQX;IAEF,MAAM;CAGP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,KAAK,CAAC;KACnB;CACF"}
@@ -0,0 +1,16 @@
1
+ import { LitElement, html, css } from "lit";
2
+ export class Panel extends LitElement {
3
+ render() {
4
+ return html `<slot></slot>`;
5
+ }
6
+ }
7
+ Panel.styles = css `
8
+ :host {
9
+ display: flex;
10
+ flex-direction: row;
11
+ height: var(--08);
12
+ align-items: end;
13
+ gap: var(--025);
14
+ }
15
+ `;
16
+ customElements.define("ds-panel", Panel);
@@ -0,0 +1,25 @@
1
+ import { LitElement } from "lit";
2
+ declare global {
3
+ interface CustomElementRegistry {
4
+ define(name: string, constructor: typeof LitElement): void;
5
+ }
6
+ var customElements: CustomElementRegistry;
7
+ }
8
+ export declare class Row extends LitElement {
9
+ static properties: {
10
+ type: {
11
+ type: StringConstructor;
12
+ reflect: boolean;
13
+ };
14
+ };
15
+ type: "fill" | "centered";
16
+ constructor();
17
+ static styles: import("lit").CSSResult;
18
+ render(): import("lit-html").TemplateResult<1>;
19
+ }
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ "ds-row": Row;
23
+ }
24
+ }
25
+ //# sourceMappingURL=ds-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-row.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,UAAU,GAAG,IAAI,CAAC;KAC5D;IACD,IAAI,cAAc,EAAE,qBAAqB,CAAC;CAC3C;AAED,qBAAa,GAAI,SAAQ,UAAU;IACjC,MAAM,CAAC,UAAU;;;;;MAEf;IAEM,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;;IAOlC,MAAM,CAAC,MAAM,0BAiBX;IAEF,MAAM;CAGP;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,GAAG,CAAC;KACf;CACF"}
@@ -0,0 +1,32 @@
1
+ import { LitElement, html, css } from "lit";
2
+ export class Row extends LitElement {
3
+ constructor() {
4
+ super();
5
+ this.type = "fill";
6
+ }
7
+ render() {
8
+ return html `<slot></slot>`;
9
+ }
10
+ }
11
+ Row.properties = {
12
+ type: { type: String, reflect: true },
13
+ };
14
+ Row.styles = css `
15
+ :host {
16
+ display: flex;
17
+ align-items: end;
18
+ width: calc(240px * var(--scaling-factor));
19
+ }
20
+
21
+ :host([type="fill"]) {
22
+ justify-content: space-between;
23
+ height: calc(var(--1) * var(--scaling-factor));
24
+ }
25
+
26
+ :host([type="centered"]) {
27
+ justify-content: center;
28
+ height: calc(var(--1) * var(--scaling-factor));
29
+ gap: calc(var(--025) * var(--scaling-factor));
30
+ }
31
+ `;
32
+ customElements.define("ds-row", Row);
@@ -0,0 +1,32 @@
1
+ import { LitElement } from "lit";
2
+ /**
3
+ * A component for single navigation links
4
+ *
5
+ * @element ds-singlenav
6
+ * @prop {string} type - Type of navigation: "projects" or "work"
7
+ * @prop {string} to - Optional custom destination URL
8
+ */
9
+ export declare class SingleNav extends LitElement {
10
+ static get properties(): {
11
+ type: {
12
+ type: StringConstructor;
13
+ reflect: boolean;
14
+ };
15
+ to: {
16
+ type: StringConstructor;
17
+ reflect: boolean;
18
+ };
19
+ };
20
+ type: "projects" | "work";
21
+ to?: string;
22
+ constructor();
23
+ static styles: import("lit").CSSResult;
24
+ render(): import("lit-html").TemplateResult<1>;
25
+ private getNavConfig;
26
+ }
27
+ declare global {
28
+ interface HTMLElementTagNameMap {
29
+ "ds-singlenav": SingleNav;
30
+ }
31
+ }
32
+ //# sourceMappingURL=ds-singlenav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-singlenav.d.ts","sourceRoot":"","sources":["../../DS1/3-unit/ds-singlenav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,MAAM,KAAK,UAAU;;;;;;;;;MAKpB;IAEO,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;;IAOpB,MAAM,CAAC,MAAM,0BAgBX;IAEF,MAAM;IAYN,OAAO,CAAC,YAAY;CAcrB;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,SAAS,CAAC;KAC3B;CACF"}
@@ -0,0 +1,62 @@
1
+ import { LitElement, html, css } from "lit";
2
+ /**
3
+ * A component for single navigation links
4
+ *
5
+ * @element ds-singlenav
6
+ * @prop {string} type - Type of navigation: "projects" or "work"
7
+ * @prop {string} to - Optional custom destination URL
8
+ */
9
+ export class SingleNav extends LitElement {
10
+ static get properties() {
11
+ return {
12
+ type: { type: String, reflect: true },
13
+ to: { type: String, reflect: true },
14
+ };
15
+ }
16
+ constructor() {
17
+ super();
18
+ this.type = "work";
19
+ }
20
+ render() {
21
+ const navConfig = this.getNavConfig();
22
+ const href = this.to || navConfig.href;
23
+ return html `
24
+ <a href="${href}">
25
+ <ds-text key="${navConfig.key}"></ds-text>
26
+ <ds-icon type="right"></ds-icon>
27
+ </a>
28
+ `;
29
+ }
30
+ getNavConfig() {
31
+ switch (this.type) {
32
+ case "projects":
33
+ return {
34
+ href: "/projects",
35
+ key: "projects",
36
+ };
37
+ case "work":
38
+ return {
39
+ href: "/",
40
+ key: "workExperience",
41
+ };
42
+ }
43
+ }
44
+ }
45
+ SingleNav.styles = css `
46
+ :host {
47
+ display: flex;
48
+ justify-content: end;
49
+ gap: calc(5px * var(--scaling-factor));
50
+ padding: calc(2px * var(--scaling-factor));
51
+ align-items: center;
52
+ }
53
+
54
+ a {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ gap: calc(5px * var(--scaling-factor));
58
+ text-decoration: none;
59
+ color: inherit;
60
+ }
61
+ `;
62
+ customElements.define("ds-singlenav", SingleNav);