ds-one 0.2.5-alpha.9 → 0.3.0-alpha.1
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/DS1/0-face/device.ts +138 -0
- package/DS1/0-face/scaling.ts +152 -0
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/one.css +124 -77
- package/DS1/2-core/ds-banner.ts +120 -1
- package/DS1/2-core/ds-button.ts +16 -93
- package/DS1/2-core/ds-card.ts +137 -0
- package/DS1/2-core/ds-cycle.ts +77 -179
- package/DS1/2-core/ds-date.ts +3 -10
- package/DS1/2-core/ds-gap.ts +38 -0
- package/DS1/2-core/ds-icon.ts +6 -35
- package/DS1/2-core/ds-input.ts +306 -1
- package/DS1/2-core/ds-pagedots.ts +52 -0
- package/DS1/2-core/ds-text.ts +55 -28
- package/DS1/2-core/ds-tooltip.ts +12 -58
- package/DS1/2-core/styles/ds-banner.css +77 -0
- package/DS1/2-core/styles/ds-button.css +67 -0
- package/DS1/2-core/styles/ds-cycle.css +21 -0
- package/DS1/2-core/styles/ds-date.css +9 -0
- package/DS1/2-core/styles/ds-gap.css +93 -0
- package/DS1/2-core/styles/ds-icon.css +30 -0
- package/DS1/2-core/styles/ds-input.css +46 -0
- package/DS1/2-core/styles/ds-pagedots.css +31 -0
- package/DS1/2-core/styles/ds-text.css +29 -0
- package/DS1/2-core/styles/ds-tooltip.css +49 -0
- package/DS1/3-unit/ds-accordion.ts +95 -0
- package/DS1/3-unit/ds-form.ts +304 -0
- package/DS1/3-unit/ds-list.ts +5 -14
- package/DS1/3-unit/ds-row.ts +3 -19
- package/DS1/3-unit/ds-table.ts +3 -86
- package/DS1/3-unit/styles/ds-accordion.css +46 -0
- package/DS1/3-unit/styles/ds-list.css +9 -0
- package/DS1/3-unit/styles/ds-row.css +19 -0
- package/DS1/3-unit/styles/ds-table.css +80 -0
- package/DS1/4-page/ds-container.ts +28 -0
- package/DS1/4-page/ds-grid.ts +37 -50
- package/DS1/4-page/ds-layout.ts +652 -163
- package/DS1/4-page/styles/ds-container.css +35 -0
- package/DS1/4-page/styles/ds-grid.css +56 -0
- package/DS1/4-page/styles/ds-layout.css +246 -0
- package/DS1/index.ts +9 -1
- package/DS1/vite-env.d.ts +13 -0
- package/DS1/x-icon/2x.svg +4 -0
- package/DS1/x-icon/2xdots.svg +18 -0
- package/DS1/x-icon/2xgrid.svg +6 -0
- package/DS1/x-icon/2xlines.svg +6 -0
- package/DS1/x-icon/4x4.svg +18 -0
- package/DS1/x-icon/apple.svg +4 -0
- package/DS1/x-icon/avatar.svg +4 -0
- package/DS1/x-icon/big.svg +4 -0
- package/DS1/x-icon/blank.svg +3 -0
- package/DS1/x-icon/check.svg +3 -0
- package/DS1/x-icon/close.svg +3 -0
- package/DS1/x-icon/collapse.svg +3 -0
- package/DS1/x-icon/color.svg +4 -0
- package/DS1/x-icon/column.svg +5 -0
- package/DS1/x-icon/default.svg +3 -0
- package/DS1/x-icon/delete.svg +5 -0
- package/DS1/x-icon/dictate.svg +6 -0
- package/DS1/x-icon/do.svg +3 -0
- package/DS1/x-icon/down.svg +3 -0
- package/DS1/x-icon/duplicate.svg +4 -0
- package/DS1/x-icon/gallery.svg +5 -0
- package/DS1/x-icon/google.svg +6 -0
- package/DS1/x-icon/head.svg +5 -0
- package/DS1/x-icon/home.svg +3 -0
- package/DS1/x-icon/icon.svg +4 -0
- package/DS1/x-icon/in.svg +4 -0
- package/DS1/x-icon/lock.svg +5 -0
- package/DS1/x-icon/loop.svg +5 -0
- package/DS1/x-icon/mic.svg +5 -0
- package/DS1/x-icon/minimize.svg +3 -0
- package/DS1/x-icon/more.svg +5 -0
- package/DS1/x-icon/neutral.svg +6 -0
- package/DS1/x-icon/note.svg +6 -0
- package/DS1/x-icon/page.svg +4 -0
- package/DS1/x-icon/plus.svg +3 -0
- package/DS1/x-icon/rewind.svg +4 -0
- package/DS1/x-icon/row.svg +5 -0
- package/DS1/x-icon/sdown.svg +3 -0
- package/DS1/x-icon/search.svg +4 -0
- package/DS1/x-icon/see.svg +4 -0
- package/DS1/x-icon/ship.svg +5 -0
- package/DS1/x-icon/star.svg +3 -0
- package/DS1/x-icon/status.svg +4 -0
- package/DS1/x-icon/sup.svg +3 -0
- package/DS1/x-icon/title.svg +3 -0
- package/DS1/x-icon/undo.svg +3 -0
- package/DS1/x-icon/ungroup.svg +4 -0
- package/DS1/x-icon/unhead.svg +3 -0
- package/DS1/x-icon/unicon.svg +3 -0
- package/DS1/x-icon/unlock.svg +5 -0
- package/DS1/x-icon/unmic.svg +6 -0
- package/DS1/x-icon/unsee.svg +5 -0
- package/DS1/x-icon/unstar.svg +3 -0
- package/DS1/x-icon/untitle.svg +3 -0
- package/DS1/x-icon/up.svg +3 -0
- package/LICENSE +1 -1
- package/README.md +4 -4
- package/dist/0-face/device.d.ts +5 -0
- package/dist/0-face/device.d.ts.map +1 -1
- package/dist/0-face/device.js +111 -0
- package/dist/0-face/scaling.d.ts +48 -0
- package/dist/0-face/scaling.d.ts.map +1 -0
- package/dist/0-face/scaling.js +114 -0
- package/dist/2-core/ds-banner.d.ts +67 -0
- package/dist/2-core/ds-banner.d.ts.map +1 -1
- package/dist/2-core/ds-banner.js +97 -1
- package/dist/2-core/ds-button.d.ts +4 -15
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +14 -86
- package/dist/2-core/ds-card.d.ts +39 -0
- package/dist/2-core/ds-card.d.ts.map +1 -0
- package/dist/2-core/ds-card.js +119 -0
- package/dist/2-core/ds-cycle.d.ts +1 -5
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +74 -163
- package/dist/2-core/ds-date.d.ts.map +1 -1
- package/dist/2-core/ds-date.js +3 -9
- package/dist/2-core/ds-gap.d.ts +28 -0
- package/dist/2-core/ds-gap.d.ts.map +1 -0
- package/dist/2-core/ds-gap.js +25 -0
- package/dist/2-core/ds-icon.d.ts.map +1 -1
- package/dist/2-core/ds-icon.js +6 -35
- package/dist/2-core/ds-input.d.ts +127 -0
- package/dist/2-core/ds-input.d.ts.map +1 -1
- package/dist/2-core/ds-input.js +252 -1
- package/dist/2-core/ds-pagedots.d.ts +32 -0
- package/dist/2-core/ds-pagedots.d.ts.map +1 -0
- package/dist/2-core/ds-pagedots.js +36 -0
- package/dist/2-core/ds-text.d.ts +5 -3
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +49 -27
- package/dist/2-core/ds-tooltip.d.ts +2 -2
- package/dist/2-core/ds-tooltip.d.ts.map +1 -1
- package/dist/2-core/ds-tooltip.js +11 -57
- package/dist/2-core/styles/ds-banner.css +77 -0
- package/dist/2-core/styles/ds-button.css +67 -0
- package/dist/2-core/styles/ds-cycle.css +21 -0
- package/dist/2-core/styles/ds-date.css +9 -0
- package/dist/2-core/styles/ds-gap.css +93 -0
- package/dist/2-core/styles/ds-icon.css +30 -0
- package/dist/2-core/styles/ds-input.css +46 -0
- package/dist/2-core/styles/ds-pagedots.css +26 -0
- package/dist/2-core/styles/ds-text.css +29 -0
- package/dist/2-core/styles/ds-tooltip.css +49 -0
- package/dist/3-unit/ds-accordion.d.ts +47 -0
- package/dist/3-unit/ds-accordion.d.ts.map +1 -0
- package/dist/3-unit/ds-accordion.js +75 -0
- package/dist/3-unit/ds-form.d.ts +70 -0
- package/dist/3-unit/ds-form.d.ts.map +1 -0
- package/dist/3-unit/ds-form.js +232 -0
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +5 -11
- package/dist/3-unit/ds-row.d.ts.map +1 -1
- package/dist/3-unit/ds-row.js +3 -19
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +3 -86
- package/dist/3-unit/styles/ds-accordion.css +46 -0
- package/dist/3-unit/styles/ds-list.css +9 -0
- package/dist/3-unit/styles/ds-row.css +19 -0
- package/dist/3-unit/styles/ds-table.css +80 -0
- package/dist/{3-unit/row-v1.d.ts → 4-page/ds-container.d.ts} +3 -11
- package/dist/4-page/ds-container.d.ts.map +1 -0
- package/dist/4-page/ds-container.js +11 -0
- package/dist/4-page/ds-grid.d.ts +5 -0
- package/dist/4-page/ds-grid.d.ts.map +1 -1
- package/dist/4-page/ds-grid.js +38 -56
- package/dist/4-page/ds-layout.d.ts +3 -3
- package/dist/4-page/ds-layout.d.ts.map +1 -1
- package/dist/4-page/ds-layout.js +651 -162
- package/dist/4-page/styles/ds-container.css +35 -0
- package/dist/4-page/styles/ds-grid.css +56 -0
- package/dist/4-page/styles/ds-layout.css +251 -0
- package/dist/ds-one.bundle.css +700 -0
- package/dist/ds-one.bundle.css.map +7 -0
- package/dist/ds-one.bundle.js +2642 -1469
- package/dist/ds-one.bundle.js.map +1 -7
- package/dist/ds-one.bundle.min.css +2 -0
- package/dist/ds-one.bundle.min.css.map +7 -0
- package/dist/ds-one.bundle.min.js +3850 -550
- package/dist/ds-one.bundle.min.js.map +1 -7
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/package.json +4 -2
- package/dist/3-unit/doublenav-v1.d.ts +0 -51
- package/dist/3-unit/doublenav-v1.d.ts.map +0 -1
- package/dist/3-unit/doublenav-v1.js +0 -88
- package/dist/3-unit/ds-portfolio-doublenav.d.ts +0 -51
- package/dist/3-unit/ds-portfolio-doublenav.d.ts.map +0 -1
- package/dist/3-unit/ds-portfolio-doublenav.js +0 -88
- package/dist/3-unit/ds-portfolio-panel.d.ts +0 -11
- package/dist/3-unit/ds-portfolio-panel.d.ts.map +0 -1
- package/dist/3-unit/ds-portfolio-panel.js +0 -16
- package/dist/3-unit/ds-portfolio-singlenav.d.ts +0 -32
- package/dist/3-unit/ds-portfolio-singlenav.d.ts.map +0 -1
- package/dist/3-unit/ds-portfolio-singlenav.js +0 -62
- package/dist/3-unit/list-v1.d.ts +0 -11
- package/dist/3-unit/list-v1.d.ts.map +0 -1
- package/dist/3-unit/list-v1.js +0 -15
- package/dist/3-unit/panel-v1.d.ts +0 -11
- package/dist/3-unit/panel-v1.d.ts.map +0 -1
- package/dist/3-unit/panel-v1.js +0 -16
- package/dist/3-unit/row-v1.d.ts.map +0 -1
- package/dist/3-unit/row-v1.js +0 -32
- package/dist/3-unit/singlenav-v1.d.ts +0 -32
- package/dist/3-unit/singlenav-v1.d.ts.map +0 -1
- package/dist/3-unit/singlenav-v1.js +0 -62
package/DS1/2-core/ds-banner.ts
CHANGED
|
@@ -1,3 +1,122 @@
|
|
|
1
1
|
// ds-banner.ts
|
|
2
|
-
//
|
|
2
|
+
// Fixed banner component for notifications/alerts
|
|
3
3
|
|
|
4
|
+
import { LitElement, html, unsafeCSS } from "lit";
|
|
5
|
+
import { getText } from "../0-face/i18n.js";
|
|
6
|
+
import "./ds-text.js";
|
|
7
|
+
import "./ds-button.js";
|
|
8
|
+
import styles from "./styles/ds-banner.css?inline";
|
|
9
|
+
|
|
10
|
+
declare global {
|
|
11
|
+
interface CustomElementRegistry {
|
|
12
|
+
define(name: string, constructor: typeof LitElement): void;
|
|
13
|
+
}
|
|
14
|
+
var customElements: CustomElementRegistry;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class Banner extends LitElement {
|
|
18
|
+
static properties = {
|
|
19
|
+
text: { type: String },
|
|
20
|
+
action: { type: String },
|
|
21
|
+
href: { type: String },
|
|
22
|
+
mailto: { type: String },
|
|
23
|
+
subject: { type: String },
|
|
24
|
+
describe: { type: String },
|
|
25
|
+
appVersion: { type: String, attribute: "app-version" },
|
|
26
|
+
variant: { type: String },
|
|
27
|
+
version: { type: String },
|
|
28
|
+
_showVersion: { type: Boolean, state: true },
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
text: string = "";
|
|
32
|
+
action: string = "";
|
|
33
|
+
href: string = "";
|
|
34
|
+
mailto: string = "";
|
|
35
|
+
subject: string = "";
|
|
36
|
+
describe: string = "";
|
|
37
|
+
appVersion: string = "";
|
|
38
|
+
variant: string = "warning"; // warning, info, success, error
|
|
39
|
+
version: string = "";
|
|
40
|
+
_showVersion: boolean = false;
|
|
41
|
+
|
|
42
|
+
private _boundUpdate = () => this.requestUpdate();
|
|
43
|
+
|
|
44
|
+
connectedCallback() {
|
|
45
|
+
super.connectedCallback();
|
|
46
|
+
// Listen for translations and language changes to rebuild mailto URL
|
|
47
|
+
window.addEventListener("translations-loaded", this._boundUpdate);
|
|
48
|
+
window.addEventListener("language-changed", this._boundUpdate);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
disconnectedCallback() {
|
|
52
|
+
super.disconnectedCallback();
|
|
53
|
+
window.removeEventListener("translations-loaded", this._boundUpdate);
|
|
54
|
+
window.removeEventListener("language-changed", this._boundUpdate);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static styles = unsafeCSS(styles);
|
|
58
|
+
|
|
59
|
+
private _toggleVersion() {
|
|
60
|
+
if (this.version) {
|
|
61
|
+
this._showVersion = !this._showVersion;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private _getMailtoHref(): string {
|
|
66
|
+
// If a direct href is provided, use it
|
|
67
|
+
if (this.href && this.href !== "#") return this.href;
|
|
68
|
+
|
|
69
|
+
// If mailto is provided, build internationalized URL
|
|
70
|
+
if (this.mailto) {
|
|
71
|
+
try {
|
|
72
|
+
const subject = this.subject
|
|
73
|
+
? getText(this.subject) || this.subject
|
|
74
|
+
: "Issue report";
|
|
75
|
+
const describe = this.describe
|
|
76
|
+
? getText(this.describe) || this.describe
|
|
77
|
+
: "Describe the issue:";
|
|
78
|
+
const appVersionLabel = this.appVersion
|
|
79
|
+
? getText(this.appVersion) || this.appVersion
|
|
80
|
+
: "App version:";
|
|
81
|
+
|
|
82
|
+
const body = `${describe}\n\n\n${appVersionLabel} ${this.version || ""}`;
|
|
83
|
+
|
|
84
|
+
return `mailto:${this.mailto}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
// Fallback if translations fail
|
|
87
|
+
return `mailto:${this.mailto}?subject=Issue%20report&body=Describe%20the%20issue%3A%0A%0A%0AApp%20version%3A%20${this.version || ""}`;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return "#";
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
render() {
|
|
95
|
+
const mailtoHref = this._getMailtoHref();
|
|
96
|
+
|
|
97
|
+
return html`
|
|
98
|
+
<div class="text-wrapper" @click=${this._toggleVersion}>
|
|
99
|
+
${this._showVersion && this.version
|
|
100
|
+
? html`<ds-text default-value=${this.version}></ds-text>`
|
|
101
|
+
: html`<ds-text text=${this.text}><slot></slot></ds-text>`}
|
|
102
|
+
</div>
|
|
103
|
+
${this.action
|
|
104
|
+
? html`
|
|
105
|
+
<div class="action-wrapper">
|
|
106
|
+
<a href=${mailtoHref}>
|
|
107
|
+
<ds-text text=${this.action}></ds-text>
|
|
108
|
+
</a>
|
|
109
|
+
</div>
|
|
110
|
+
`
|
|
111
|
+
: ""}
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
customElements.define("ds-banner", Banner);
|
|
117
|
+
|
|
118
|
+
declare global {
|
|
119
|
+
interface HTMLElementTagNameMap {
|
|
120
|
+
"ds-banner": Banner;
|
|
121
|
+
}
|
|
122
|
+
}
|
package/DS1/2-core/ds-button.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// ds-button.ts
|
|
2
2
|
// Core button component
|
|
3
3
|
|
|
4
|
-
import { LitElement, html,
|
|
5
|
-
import
|
|
4
|
+
import { LitElement, html, unsafeCSS } from "lit";
|
|
5
|
+
import "./ds-text";
|
|
6
|
+
import styles from "./styles/ds-button.css?inline";
|
|
6
7
|
|
|
7
8
|
export class Button extends LitElement {
|
|
8
9
|
static properties = {
|
|
@@ -15,13 +16,12 @@ export class Button extends LitElement {
|
|
|
15
16
|
attribute: "no-background",
|
|
16
17
|
},
|
|
17
18
|
blank: { type: Boolean, reflect: true },
|
|
18
|
-
|
|
19
|
+
text: { type: String },
|
|
19
20
|
fallback: { type: String },
|
|
20
21
|
language: { type: String },
|
|
21
22
|
defaultText: { type: String, attribute: "default-text" },
|
|
22
23
|
href: { type: String },
|
|
23
24
|
_loading: { type: Boolean, state: true },
|
|
24
|
-
_text: { type: String, state: true },
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
// Public properties
|
|
@@ -30,7 +30,7 @@ export class Button extends LitElement {
|
|
|
30
30
|
declare bold: boolean;
|
|
31
31
|
declare "no-background": boolean;
|
|
32
32
|
declare blank: boolean;
|
|
33
|
-
declare
|
|
33
|
+
declare text: string;
|
|
34
34
|
declare fallback: string;
|
|
35
35
|
declare language: string;
|
|
36
36
|
declare defaultText: string;
|
|
@@ -38,7 +38,6 @@ export class Button extends LitElement {
|
|
|
38
38
|
|
|
39
39
|
// Private state
|
|
40
40
|
declare _loading: boolean;
|
|
41
|
-
declare _text: string | null;
|
|
42
41
|
|
|
43
42
|
constructor() {
|
|
44
43
|
super();
|
|
@@ -47,105 +46,23 @@ export class Button extends LitElement {
|
|
|
47
46
|
this.bold = false;
|
|
48
47
|
this["no-background"] = false;
|
|
49
48
|
this.blank = false;
|
|
50
|
-
this.
|
|
49
|
+
this.text = "";
|
|
51
50
|
this.fallback = "";
|
|
52
51
|
this.language = "en-US";
|
|
53
52
|
this.defaultText = "";
|
|
54
53
|
this.href = "";
|
|
55
54
|
this._loading = false;
|
|
56
|
-
this._text = null;
|
|
57
55
|
}
|
|
58
56
|
|
|
59
|
-
static styles =
|
|
60
|
-
button {
|
|
61
|
-
max-height: calc(var(--08) * var(--scaling-factor));
|
|
62
|
-
border: none;
|
|
63
|
-
cursor: pointer;
|
|
64
|
-
font-size: calc(var(--type-size-default) * var(--scaling-factor));
|
|
65
|
-
padding: 0 calc(1px * var(--scaling-factor));
|
|
66
|
-
color: var(--button-text-color);
|
|
67
|
-
font-family: var(--typeface);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
button.title {
|
|
71
|
-
background-color: var(--button-background-color-secondary);
|
|
72
|
-
color: var(--button-text-color);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
button.primary {
|
|
76
|
-
background-color: var(--accent-color);
|
|
77
|
-
color: var(--button-text-color);
|
|
78
|
-
text-decoration-line: none;
|
|
79
|
-
font-family: var(--typeface);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
button.secondary {
|
|
83
|
-
background-color: var(--button-background-color-secondary);
|
|
84
|
-
color: var(--button-text-color);
|
|
85
|
-
font-family: var(--typeface);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
button[bold] {
|
|
89
|
-
font-weight: var(--type-weight-bold);
|
|
90
|
-
font-family: var(--typeface-medium);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
button[no-background] {
|
|
94
|
-
background-color: transparent;
|
|
95
|
-
max-height: var(--1);
|
|
96
|
-
padding: 0;
|
|
97
|
-
color: var(--button-color, var(--button-text-color-secondary));
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
button[no-background][bold] {
|
|
101
|
-
font-weight: var(--type-weight-bold);
|
|
102
|
-
font-family: var(--typeface-medium);
|
|
103
|
-
color: var(--button-color, var(--button-text-color-secondary));
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.loading {
|
|
107
|
-
opacity: 0.7;
|
|
108
|
-
}
|
|
109
|
-
`;
|
|
57
|
+
static styles = unsafeCSS(styles);
|
|
110
58
|
|
|
111
59
|
connectedCallback() {
|
|
112
60
|
super.connectedCallback();
|
|
113
|
-
this._updateText();
|
|
114
|
-
|
|
115
|
-
// Listen for language changes
|
|
116
|
-
window.addEventListener("language-changed", this._handleLanguageChange);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
disconnectedCallback() {
|
|
120
|
-
super.disconnectedCallback();
|
|
121
|
-
window.removeEventListener("language-changed", this._handleLanguageChange);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
_handleLanguageChange = () => {
|
|
125
|
-
this._updateText();
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
updated(changedProps: PropertyValues) {
|
|
129
|
-
super.updated(changedProps);
|
|
130
|
-
|
|
131
|
-
if (changedProps.has("key") || changedProps.has("defaultText")) {
|
|
132
|
-
this._updateText();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Update text from translations (synchronous like Portfolio)
|
|
138
|
-
*/
|
|
139
|
-
private _updateText() {
|
|
140
|
-
if (this.key) {
|
|
141
|
-
this._text = getText(this.key);
|
|
142
|
-
} else {
|
|
143
|
-
this._text = this.defaultText || this.fallback || null;
|
|
144
|
-
}
|
|
145
|
-
this.requestUpdate();
|
|
146
61
|
}
|
|
147
62
|
|
|
148
63
|
render() {
|
|
64
|
+
const hasTextProps = this.text || this.defaultText || this.fallback;
|
|
65
|
+
|
|
149
66
|
return html`
|
|
150
67
|
<button
|
|
151
68
|
class=${this.variant}
|
|
@@ -154,7 +71,13 @@ export class Button extends LitElement {
|
|
|
154
71
|
?no-background=${this["no-background"]}
|
|
155
72
|
@click=${this._handleClick}
|
|
156
73
|
>
|
|
157
|
-
${
|
|
74
|
+
${hasTextProps
|
|
75
|
+
? html`<ds-text
|
|
76
|
+
.text=${this.text}
|
|
77
|
+
.defaultValue=${this.defaultText}
|
|
78
|
+
.fallback=${this.fallback}
|
|
79
|
+
></ds-text>`
|
|
80
|
+
: html`<slot></slot>`}
|
|
158
81
|
</button>
|
|
159
82
|
`;
|
|
160
83
|
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// ds-card.ts
|
|
2
|
+
// Card component for displaying content in a contained box
|
|
3
|
+
|
|
4
|
+
import { LitElement, html, css } from "lit";
|
|
5
|
+
|
|
6
|
+
export class Card extends LitElement {
|
|
7
|
+
static properties = {
|
|
8
|
+
variant: { type: String, reflect: true },
|
|
9
|
+
elevation: { type: Number, reflect: true },
|
|
10
|
+
interactive: { type: Boolean, reflect: true },
|
|
11
|
+
disabled: { type: Boolean, reflect: true },
|
|
12
|
+
padding: { type: String, reflect: true },
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
declare variant: "default" | "outlined" | "elevated" | "filled";
|
|
16
|
+
declare elevation: number;
|
|
17
|
+
declare interactive: boolean;
|
|
18
|
+
declare disabled: boolean;
|
|
19
|
+
declare padding: "none" | "small" | "medium" | "large";
|
|
20
|
+
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
this.variant = "default";
|
|
24
|
+
this.elevation = 1;
|
|
25
|
+
this.interactive = false;
|
|
26
|
+
this.disabled = false;
|
|
27
|
+
this.padding = "medium";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static styles = css`
|
|
31
|
+
:host {
|
|
32
|
+
display: block;
|
|
33
|
+
box-sizing: border-box;
|
|
34
|
+
border-radius: calc(var(--025) * var(--sf, 1));
|
|
35
|
+
background-color: var(--card-background, var(--surface-color, #fff));
|
|
36
|
+
color: var(--text-color-primary);
|
|
37
|
+
transition:
|
|
38
|
+
box-shadow 0.2s ease,
|
|
39
|
+
transform 0.2s ease;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
:host([variant="default"]) {
|
|
43
|
+
background-color: var(--card-background, var(--surface-color, #fff));
|
|
44
|
+
border: 1px solid var(--border-color, rgba(0, 0, 0, 0.1));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:host([variant="outlined"]) {
|
|
48
|
+
background-color: transparent;
|
|
49
|
+
border: 1px solid var(--border-color, rgba(0, 0, 0, 0.2));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:host([variant="elevated"]) {
|
|
53
|
+
background-color: var(--card-background, var(--surface-color, #fff));
|
|
54
|
+
border: none;
|
|
55
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:host([variant="filled"]) {
|
|
59
|
+
background-color: var(
|
|
60
|
+
--card-background-filled,
|
|
61
|
+
var(--surface-color-secondary, #f5f5f5)
|
|
62
|
+
);
|
|
63
|
+
border: none;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
:host([elevation="0"]) {
|
|
67
|
+
box-shadow: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
:host([elevation="1"]) {
|
|
71
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:host([elevation="2"]) {
|
|
75
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
:host([elevation="3"]) {
|
|
79
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:host([interactive]) {
|
|
83
|
+
cursor: pointer;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:host([interactive]:hover:not([disabled])) {
|
|
87
|
+
transform: translateY(-2px);
|
|
88
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
:host([interactive]:active:not([disabled])) {
|
|
92
|
+
transform: translateY(0);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
:host([disabled]) {
|
|
96
|
+
opacity: 0.5;
|
|
97
|
+
pointer-events: none;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:host([padding="none"]) {
|
|
101
|
+
padding: 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
:host([padding="small"]) {
|
|
105
|
+
padding: calc(var(--025) * var(--sf, 1));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
:host([padding="medium"]) {
|
|
109
|
+
padding: calc(var(--05) * var(--sf, 1));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
:host([padding="large"]) {
|
|
113
|
+
padding: calc(var(--1) * var(--sf, 1));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.card-content {
|
|
117
|
+
width: 100%;
|
|
118
|
+
height: 100%;
|
|
119
|
+
}
|
|
120
|
+
`;
|
|
121
|
+
|
|
122
|
+
render() {
|
|
123
|
+
return html`
|
|
124
|
+
<div class="card-content" part="content">
|
|
125
|
+
<slot></slot>
|
|
126
|
+
</div>
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
customElements.define("ds-card", Card);
|
|
132
|
+
|
|
133
|
+
declare global {
|
|
134
|
+
interface HTMLElementTagNameMap {
|
|
135
|
+
"ds-card": Card;
|
|
136
|
+
}
|
|
137
|
+
}
|