ds-one 0.2.5-alpha.1 → 0.2.5-alpha.11
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 +10 -6
- package/DS1/0-face/i18n.ts +39 -90
- package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
- package/DS1/1-root/one.css +76 -107
- package/DS1/2-core/ds-banner.ts +3 -0
- package/DS1/2-core/ds-button.ts +12 -15
- package/DS1/2-core/ds-cycle.ts +67 -21
- package/DS1/2-core/ds-date.ts +1 -2
- package/DS1/2-core/ds-icon.ts +4 -4
- package/DS1/2-core/ds-text.ts +27 -3
- package/DS1/2-core/ds-tooltip.ts +6 -12
- package/DS1/3-unit/ds-list.ts +7 -0
- package/DS1/3-unit/ds-row.ts +4 -5
- package/DS1/3-unit/ds-table.ts +5 -6
- package/DS1/4-page/ds-grid.ts +9 -59
- package/DS1/4-page/ds-layout.ts +123 -18
- package/LICENSE +1 -1
- package/README.md +43 -133
- package/dist/0-face/device.d.ts.map +1 -1
- package/dist/0-face/device.js +7 -3
- package/dist/0-face/i18n.d.ts +0 -2
- package/dist/0-face/i18n.d.ts.map +1 -1
- package/dist/0-face/i18n.js +37 -74
- package/dist/2-core/ds-banner.d.ts +1 -0
- package/dist/2-core/ds-banner.d.ts.map +1 -0
- package/dist/2-core/ds-banner.js +2 -0
- package/dist/2-core/ds-button.d.ts +2 -7
- package/dist/2-core/ds-button.d.ts.map +1 -1
- package/dist/2-core/ds-button.js +11 -13
- package/dist/2-core/ds-cycle.d.ts +2 -0
- package/dist/2-core/ds-cycle.d.ts.map +1 -1
- package/dist/2-core/ds-cycle.js +65 -19
- package/dist/2-core/ds-date.js +1 -1
- package/dist/2-core/ds-icon.js +4 -4
- package/dist/2-core/ds-text.d.ts +2 -0
- package/dist/2-core/ds-text.d.ts.map +1 -1
- package/dist/2-core/ds-text.js +26 -3
- package/dist/2-core/ds-tooltip.d.ts +1 -1
- package/dist/2-core/ds-tooltip.d.ts.map +1 -1
- package/dist/2-core/ds-tooltip.js +6 -12
- package/dist/3-unit/ds-list.d.ts.map +1 -1
- package/dist/3-unit/ds-list.js +3 -0
- package/dist/3-unit/ds-portfolio-panel.d.ts.map +1 -1
- package/dist/3-unit/ds-portfolio-singlenav.js +3 -3
- package/dist/3-unit/ds-row.js +4 -4
- package/dist/3-unit/ds-table.d.ts.map +1 -1
- package/dist/3-unit/ds-table.js +5 -6
- package/dist/4-page/ds-grid.d.ts +0 -7
- package/dist/4-page/ds-grid.d.ts.map +1 -1
- package/dist/4-page/ds-grid.js +9 -54
- package/dist/4-page/ds-layout.d.ts +1 -1
- package/dist/4-page/ds-layout.d.ts.map +1 -1
- package/dist/4-page/ds-layout.js +126 -17
- package/dist/ds-one.bundle.js +347 -265
- package/dist/ds-one.bundle.js.map +4 -4
- package/dist/ds-one.bundle.min.js +204 -80
- package/dist/ds-one.bundle.min.js.map +4 -4
- package/package.json +7 -8
- package/DS1/3-unit/doublenav-v1.ts +0 -105
- package/DS1/3-unit/ds-portfolio-doublenav.ts +0 -105
- package/DS1/3-unit/ds-portfolio-panel.ts +0 -27
- package/DS1/3-unit/ds-portfolio-singlenav.ts +0 -79
- package/DS1/3-unit/list-v1.ts +0 -24
- package/DS1/3-unit/panel-v1.ts +0 -26
- package/DS1/3-unit/row-v1.ts +0 -52
- package/DS1/3-unit/singlenav-v1.ts +0 -78
- /package/DS1/x-icon/{row..svg → row.svg} +0 -0
package/DS1/2-core/ds-cycle.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { ThemeType } from "../0-face/theme";
|
|
|
12
12
|
import { savePreferences } from "../0-face/preferences";
|
|
13
13
|
import "./ds-button";
|
|
14
14
|
import "./ds-icon";
|
|
15
|
+
import "./ds-text";
|
|
15
16
|
|
|
16
17
|
// Accent color utilities
|
|
17
18
|
const saveAccentColor = (color: string) => {
|
|
@@ -19,7 +20,7 @@ const saveAccentColor = (color: string) => {
|
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
const getAccentColor = (): string => {
|
|
22
|
-
return localStorage.getItem("accentColor") || "--blue"; // Default color if none set
|
|
23
|
+
return localStorage.getItem("accentColor") || "--sharp-blue"; // Default color if none set
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
const applyAccentColor = () => {
|
|
@@ -169,12 +170,12 @@ export class Cycle extends LitElement {
|
|
|
169
170
|
} else if (this.type === "accent-color") {
|
|
170
171
|
// Set up accent color cycling
|
|
171
172
|
this.values = [
|
|
172
|
-
"--
|
|
173
|
-
"--green",
|
|
174
|
-
"--
|
|
175
|
-
"--blue",
|
|
173
|
+
"--apple-green",
|
|
174
|
+
"--every-green",
|
|
175
|
+
"--zenith-blue",
|
|
176
|
+
"--sharp-blue",
|
|
176
177
|
"--pink",
|
|
177
|
-
"--red",
|
|
178
|
+
"--tuned-red",
|
|
178
179
|
"--orange",
|
|
179
180
|
"--yellow",
|
|
180
181
|
];
|
|
@@ -185,9 +186,6 @@ export class Cycle extends LitElement {
|
|
|
185
186
|
|
|
186
187
|
// Apply the accent color to ensure it's active
|
|
187
188
|
applyAccentColor();
|
|
188
|
-
|
|
189
|
-
// Set label
|
|
190
|
-
this.label = this.getLabel();
|
|
191
189
|
} else if (this.type === "notes-style-medium") {
|
|
192
190
|
// Set up notes style medium cycling
|
|
193
191
|
this.values = ["default", "big", "gallery"];
|
|
@@ -271,9 +269,6 @@ export class Cycle extends LitElement {
|
|
|
271
269
|
|
|
272
270
|
// Apply the accent color to ensure it's active
|
|
273
271
|
applyAccentColor();
|
|
274
|
-
|
|
275
|
-
// Update label
|
|
276
|
-
this.label = this.getLabel();
|
|
277
272
|
} else if (this.type === "notes-style-medium") {
|
|
278
273
|
// Get current notes style medium
|
|
279
274
|
const currentNotesStyle = getNotesStyleMedium();
|
|
@@ -494,8 +489,8 @@ export class Cycle extends LitElement {
|
|
|
494
489
|
} else if (this.type === "theme") {
|
|
495
490
|
// Try to get translated theme name
|
|
496
491
|
if (this.translationsReady) {
|
|
497
|
-
const translatedName = translate(
|
|
498
|
-
if (translatedName && translatedName !==
|
|
492
|
+
const translatedName = translate(value);
|
|
493
|
+
if (translatedName && translatedName !== value) {
|
|
499
494
|
return translatedName;
|
|
500
495
|
}
|
|
501
496
|
}
|
|
@@ -533,16 +528,32 @@ export class Cycle extends LitElement {
|
|
|
533
528
|
return value;
|
|
534
529
|
}
|
|
535
530
|
|
|
531
|
+
getColorKey(colorVar: string): string {
|
|
532
|
+
// Map CSS variables to language keys
|
|
533
|
+
const colorMap: { [key: string]: string } = {
|
|
534
|
+
"--tuned-red": "red",
|
|
535
|
+
"--orange": "orange",
|
|
536
|
+
"--yellow": "yellow",
|
|
537
|
+
"--apple-green": "appleGreen",
|
|
538
|
+
"--every-green": "green",
|
|
539
|
+
"--zenith-blue": "lightBlue",
|
|
540
|
+
"--sharp-blue": "blue",
|
|
541
|
+
"--pink": "pink",
|
|
542
|
+
};
|
|
543
|
+
|
|
544
|
+
return colorMap[colorVar] || colorVar.replace("--", "").replace("-", " ");
|
|
545
|
+
}
|
|
546
|
+
|
|
536
547
|
getColorName(colorVar: string): string {
|
|
537
548
|
// Map CSS variables to language keys
|
|
538
549
|
const colorMap: { [key: string]: string } = {
|
|
539
|
-
"--red": "red",
|
|
550
|
+
"--tuned-red": "red",
|
|
540
551
|
"--orange": "orange",
|
|
541
552
|
"--yellow": "yellow",
|
|
542
|
-
"--
|
|
543
|
-
"--green": "green",
|
|
544
|
-
"--
|
|
545
|
-
"--blue": "blue",
|
|
553
|
+
"--apple-green": "appleGreen",
|
|
554
|
+
"--every-green": "green",
|
|
555
|
+
"--zenith-blue": "lightBlue",
|
|
556
|
+
"--sharp-blue": "blue",
|
|
546
557
|
"--pink": "pink",
|
|
547
558
|
};
|
|
548
559
|
|
|
@@ -641,7 +652,25 @@ export class Cycle extends LitElement {
|
|
|
641
652
|
return html`
|
|
642
653
|
<div class="cycle-container">
|
|
643
654
|
${this.type !== "icon-only"
|
|
644
|
-
? html
|
|
655
|
+
? html`${this.type === "language"
|
|
656
|
+
? html`<ds-text
|
|
657
|
+
key="language"
|
|
658
|
+
default-value="Language"
|
|
659
|
+
class="cycle-label"
|
|
660
|
+
></ds-text>`
|
|
661
|
+
: this.type === "theme"
|
|
662
|
+
? html`<ds-text
|
|
663
|
+
key="theme"
|
|
664
|
+
default-value="Theme"
|
|
665
|
+
class="cycle-label"
|
|
666
|
+
></ds-text>`
|
|
667
|
+
: this.type === "accent-color"
|
|
668
|
+
? html`<ds-text
|
|
669
|
+
key="accentColor"
|
|
670
|
+
default-value="Accent color"
|
|
671
|
+
class="cycle-label"
|
|
672
|
+
></ds-text>`
|
|
673
|
+
: html`<span class="cycle-label">${this.label}</span>`}`
|
|
645
674
|
: ""}
|
|
646
675
|
<div
|
|
647
676
|
style="display: flex; align-items: center; ${this.type === "icon-only"
|
|
@@ -661,7 +690,24 @@ export class Cycle extends LitElement {
|
|
|
661
690
|
style="display: inline-flex; align-items: center; gap: var(--025)"
|
|
662
691
|
>${this.getValueDisplay(this.currentValue)}</span
|
|
663
692
|
>`
|
|
664
|
-
:
|
|
693
|
+
: this.type === "theme"
|
|
694
|
+
? html`<ds-text
|
|
695
|
+
key=${this.currentValue}
|
|
696
|
+
default-value=${this.currentValue}
|
|
697
|
+
></ds-text>`
|
|
698
|
+
: this.type === "accent-color"
|
|
699
|
+
? html`<ds-text
|
|
700
|
+
key=${this.getColorKey(this.currentValue)}
|
|
701
|
+
default-value=${this.getColorName(this.currentValue)}
|
|
702
|
+
></ds-text>`
|
|
703
|
+
: this.type === "page-style"
|
|
704
|
+
? html`<ds-text
|
|
705
|
+
key=${this.currentValue}
|
|
706
|
+
default-value=${this.currentValue}
|
|
707
|
+
></ds-text>`
|
|
708
|
+
: html`<ds-text
|
|
709
|
+
default-value=${this.getValueDisplay(this.currentValue)}
|
|
710
|
+
></ds-text>`}
|
|
665
711
|
</ds-button>
|
|
666
712
|
${this.type === "accent-color"
|
|
667
713
|
? html`
|
package/DS1/2-core/ds-date.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class DateComponent extends LitElement {
|
|
|
9
9
|
static styles = css`
|
|
10
10
|
:host {
|
|
11
11
|
display: inline;
|
|
12
|
-
font-family: var(--typeface, var(--typeface-regular));
|
|
12
|
+
font-family: var(--typeface-regular, var(--typeface-regular-regular));
|
|
13
13
|
font-size: inherit;
|
|
14
14
|
color: inherit;
|
|
15
15
|
}
|
|
@@ -28,4 +28,3 @@ declare global {
|
|
|
28
28
|
"ds-date": DateComponent;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
|
package/DS1/2-core/ds-icon.ts
CHANGED
|
@@ -26,8 +26,8 @@ export class Icon extends LitElement {
|
|
|
26
26
|
display: inline-flex;
|
|
27
27
|
justify-content: center;
|
|
28
28
|
align-items: center;
|
|
29
|
-
width: calc(16px * var(--
|
|
30
|
-
height: calc(16px * var(--
|
|
29
|
+
width: calc(16px * var(--sf));
|
|
30
|
+
height: calc(16px * var(--sf));
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
svg {
|
|
@@ -44,8 +44,8 @@ export class Icon extends LitElement {
|
|
|
44
44
|
display: flex;
|
|
45
45
|
justify-content: center;
|
|
46
46
|
align-items: center;
|
|
47
|
-
width: calc(16px * var(--
|
|
48
|
-
height: calc(16px * var(--
|
|
47
|
+
width: calc(16px * var(--sf));
|
|
48
|
+
height: calc(16px * var(--sf));
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/* Notes style color variable for future implementation */
|
package/DS1/2-core/ds-text.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
|
-
import { getText } from "../0-face/i18n";
|
|
2
|
+
import { getText, currentLanguage } from "../0-face/i18n";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A component for displaying text from translations
|
|
@@ -23,6 +23,7 @@ export class Text extends LitElement {
|
|
|
23
23
|
declare defaultValue: string;
|
|
24
24
|
declare fallback: string;
|
|
25
25
|
declare _text: string;
|
|
26
|
+
declare _currentLanguage: string;
|
|
26
27
|
private boundHandlers: { languageChanged: EventListener };
|
|
27
28
|
|
|
28
29
|
constructor() {
|
|
@@ -31,12 +32,15 @@ export class Text extends LitElement {
|
|
|
31
32
|
this.defaultValue = "";
|
|
32
33
|
this.fallback = "";
|
|
33
34
|
this._text = "";
|
|
35
|
+
this._currentLanguage = currentLanguage.value;
|
|
34
36
|
|
|
35
37
|
// Create bound event handlers for proper cleanup
|
|
36
38
|
this.boundHandlers = {
|
|
37
39
|
languageChanged: (() => {
|
|
38
40
|
console.log("Language changed event received in ds-text");
|
|
41
|
+
this._currentLanguage = currentLanguage.value;
|
|
39
42
|
this._loadText();
|
|
43
|
+
this.requestUpdate();
|
|
40
44
|
}) as EventListener,
|
|
41
45
|
};
|
|
42
46
|
}
|
|
@@ -44,15 +48,25 @@ export class Text extends LitElement {
|
|
|
44
48
|
static styles = css`
|
|
45
49
|
:host {
|
|
46
50
|
display: inline;
|
|
51
|
+
font-family: var(--typeface-regular);
|
|
52
|
+
font-size: calc(var(--type-size-default) * var(--sf));
|
|
53
|
+
font-weight: var(--type-weight-default);
|
|
54
|
+
line-height: calc(var(--type-lineheight-default) * var(--sf));
|
|
55
|
+
letter-spacing: calc(var(--type-letterspacing-default) * var(--sf));
|
|
56
|
+
text-align: var(--text-align-default);
|
|
57
|
+
text-transform: var(--text-transform-default);
|
|
58
|
+
text-decoration: var(--text-decoration-default);
|
|
47
59
|
}
|
|
48
60
|
|
|
49
|
-
|
|
50
|
-
|
|
61
|
+
:host([data-language="ja"]) {
|
|
62
|
+
font-family: var(--typeface-regular-jp);
|
|
51
63
|
}
|
|
52
64
|
`;
|
|
53
65
|
|
|
54
66
|
connectedCallback() {
|
|
55
67
|
super.connectedCallback();
|
|
68
|
+
this._currentLanguage = currentLanguage.value;
|
|
69
|
+
this._updateLanguageAttribute();
|
|
56
70
|
this._loadText();
|
|
57
71
|
|
|
58
72
|
// Listen for language changes
|
|
@@ -91,6 +105,15 @@ export class Text extends LitElement {
|
|
|
91
105
|
}
|
|
92
106
|
}
|
|
93
107
|
|
|
108
|
+
_updateLanguageAttribute() {
|
|
109
|
+
const lang = this._currentLanguage || currentLanguage.value;
|
|
110
|
+
if (lang === "ja") {
|
|
111
|
+
this.setAttribute("data-language", "ja");
|
|
112
|
+
} else {
|
|
113
|
+
this.removeAttribute("data-language");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
94
117
|
_loadText() {
|
|
95
118
|
if (!this.key) {
|
|
96
119
|
this._text = this.defaultValue || this.fallback || "";
|
|
@@ -104,6 +127,7 @@ export class Text extends LitElement {
|
|
|
104
127
|
console.error("Error loading text for key:", this.key, error);
|
|
105
128
|
this._text = this.defaultValue || this.fallback || this.key;
|
|
106
129
|
}
|
|
130
|
+
this._updateLanguageAttribute();
|
|
107
131
|
this.requestUpdate();
|
|
108
132
|
}
|
|
109
133
|
|
package/DS1/2-core/ds-tooltip.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
|
-
import { translate
|
|
2
|
+
import { translate } from "../0-face/i18n";
|
|
3
3
|
|
|
4
4
|
export class Tooltip extends LitElement {
|
|
5
5
|
static properties = {
|
|
@@ -79,10 +79,10 @@ export class Tooltip extends LitElement {
|
|
|
79
79
|
position: absolute;
|
|
80
80
|
left: 50%;
|
|
81
81
|
bottom: 100%;
|
|
82
|
-
transform: translate(-50%, calc(-2px * var(--
|
|
82
|
+
transform: translate(-50%, calc(-2px * var(--sf)));
|
|
83
83
|
z-index: 1000;
|
|
84
84
|
pointer-events: none;
|
|
85
|
-
height: calc(var(--08) * var(--
|
|
85
|
+
height: calc(var(--08) * var(--sf));
|
|
86
86
|
opacity: 0;
|
|
87
87
|
transition:
|
|
88
88
|
opacity 120ms ease,
|
|
@@ -91,9 +91,9 @@ export class Tooltip extends LitElement {
|
|
|
91
91
|
color: light-dark(var(--white), var(--black));
|
|
92
92
|
border-radius: 0;
|
|
93
93
|
font-size: var(--type-size-default);
|
|
94
|
-
padding: 0px calc(1px * var(--
|
|
94
|
+
padding: 0px calc(1px * var(--sf));
|
|
95
95
|
font-family: var(
|
|
96
|
-
--typeface,
|
|
96
|
+
--typeface-regular,
|
|
97
97
|
-apple-system,
|
|
98
98
|
BlinkMacSystemFont,
|
|
99
99
|
"Segoe UI",
|
|
@@ -152,7 +152,7 @@ export class Tooltip extends LitElement {
|
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
_loadText(): void {
|
|
156
156
|
if (!this.key) {
|
|
157
157
|
this._text = this.defaultValue || "";
|
|
158
158
|
this.requestUpdate();
|
|
@@ -160,12 +160,6 @@ export class Tooltip extends LitElement {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
try {
|
|
163
|
-
const notionText = await getNotionText(this.key);
|
|
164
|
-
if (notionText) {
|
|
165
|
-
this._text = notionText;
|
|
166
|
-
this.requestUpdate();
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
163
|
const t = translate(this.key);
|
|
170
164
|
this._text = t && t !== this.key ? t : this.defaultValue || this.key;
|
|
171
165
|
} catch (err) {
|
package/DS1/3-unit/ds-list.ts
CHANGED
package/DS1/3-unit/ds-row.ts
CHANGED
|
@@ -23,18 +23,18 @@ export class Row extends LitElement {
|
|
|
23
23
|
:host {
|
|
24
24
|
display: flex;
|
|
25
25
|
align-items: end;
|
|
26
|
-
width: calc(240px * var(--
|
|
26
|
+
width: calc(240px * var(--sf));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
:host([type="fill"]) {
|
|
30
30
|
justify-content: space-between;
|
|
31
|
-
height: calc(var(--1) * var(--
|
|
31
|
+
height: calc(var(--1) * var(--sf));
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
:host([type="centered"]) {
|
|
35
35
|
justify-content: center;
|
|
36
|
-
height: calc(var(--1) * var(--
|
|
37
|
-
gap: calc(var(--025) * var(--
|
|
36
|
+
height: calc(var(--1) * var(--sf));
|
|
37
|
+
gap: calc(var(--025) * var(--sf));
|
|
38
38
|
}
|
|
39
39
|
`;
|
|
40
40
|
|
|
@@ -50,4 +50,3 @@ declare global {
|
|
|
50
50
|
"ds-row": Row;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
|
package/DS1/3-unit/ds-table.ts
CHANGED
|
@@ -59,8 +59,8 @@ export class DsTable extends LitElement {
|
|
|
59
59
|
display: flex;
|
|
60
60
|
align-items: center;
|
|
61
61
|
justify-content: left;
|
|
62
|
-
padding:
|
|
63
|
-
font-family: var(--typeface);
|
|
62
|
+
padding: 0 2px;
|
|
63
|
+
font-family: var(--typeface-regular);
|
|
64
64
|
font-size: var(--type-size-default);
|
|
65
65
|
font-weight: var(--type-weight-default);
|
|
66
66
|
line-height: var(--type-lineheight-default);
|
|
@@ -74,10 +74,10 @@ export class DsTable extends LitElement {
|
|
|
74
74
|
display: flex;
|
|
75
75
|
align-items: center;
|
|
76
76
|
justify-content: left;
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
outline: 1px solid var(--black);
|
|
79
79
|
|
|
80
|
-
font-family: var(--typeface);
|
|
80
|
+
font-family: var(--typeface-regular);
|
|
81
81
|
font-size: var(--type-size-default);
|
|
82
82
|
font-weight: var(--type-weight-default);
|
|
83
83
|
line-height: var(--type-lineheight-default);
|
|
@@ -86,7 +86,7 @@ export class DsTable extends LitElement {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
.status-cell {
|
|
89
|
-
background-color: var(--
|
|
89
|
+
background-color: var(--apple-green);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
.product-cell {
|
|
@@ -117,7 +117,6 @@ export class DsTable extends LitElement {
|
|
|
117
117
|
return html`
|
|
118
118
|
<div class="table-container">
|
|
119
119
|
<div class="table-header">
|
|
120
|
-
|
|
121
120
|
<div class="header-cell product-cell">Product</div>
|
|
122
121
|
<div class="header-cell users-cell">Users</div>
|
|
123
122
|
<div class="header-cell retention-cell">Retention</div>
|
package/DS1/4-page/ds-grid.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// Simple grid layout component
|
|
3
3
|
|
|
4
4
|
import { LitElement, html, css } from "lit";
|
|
5
|
-
import { detectMobileDevice } from "../0-face/device";
|
|
6
5
|
|
|
7
6
|
declare global {
|
|
8
7
|
interface CustomElementRegistry {
|
|
@@ -14,44 +13,9 @@ declare global {
|
|
|
14
13
|
export class Grid extends LitElement {
|
|
15
14
|
static properties = {
|
|
16
15
|
align: { type: String },
|
|
17
|
-
_isMobile: { type: Boolean, state: true },
|
|
18
16
|
};
|
|
19
17
|
|
|
20
18
|
align?: string;
|
|
21
|
-
_isMobile: boolean = false;
|
|
22
|
-
|
|
23
|
-
connectedCallback() {
|
|
24
|
-
super.connectedCallback();
|
|
25
|
-
this._isMobile = detectMobileDevice();
|
|
26
|
-
console.log(`[ds-grid] Mobile device: ${this._isMobile}`);
|
|
27
|
-
|
|
28
|
-
// Apply mobile class immediately
|
|
29
|
-
if (this._isMobile) {
|
|
30
|
-
this.classList.add("mobile");
|
|
31
|
-
console.log(`[ds-grid] Mobile class added`);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Calculate mobile grid dimensions to fit screen
|
|
35
|
-
if (this._isMobile && typeof window !== "undefined") {
|
|
36
|
-
const screenWidth = window.innerWidth;
|
|
37
|
-
const columns = 14;
|
|
38
|
-
const gap = 0.5;
|
|
39
|
-
|
|
40
|
-
// Calculate column size accounting for gaps between columns
|
|
41
|
-
// Total width = (columns * columnSize) + ((columns - 1) * gap)
|
|
42
|
-
// Therefore: columnSize = (screenWidth - ((columns - 1) * gap)) / columns
|
|
43
|
-
const totalGapWidth = (columns - 1) * gap;
|
|
44
|
-
const columnSize = (screenWidth - totalGapWidth) / columns;
|
|
45
|
-
|
|
46
|
-
console.log(
|
|
47
|
-
`[ds-grid] Mobile grid: ${columns} columns × ${columnSize.toFixed(2)}px + ${totalGapWidth}px gaps = ${screenWidth}px`
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
// Set custom property for this grid instance
|
|
51
|
-
this.style.setProperty("--mobile-column-size", `${columnSize}px`);
|
|
52
|
-
this.style.setProperty("--mobile-gap", `${gap}px`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
19
|
|
|
56
20
|
static styles = css`
|
|
57
21
|
:host {
|
|
@@ -59,17 +23,13 @@ export class Grid extends LitElement {
|
|
|
59
23
|
margin-left: 0.5px !important;
|
|
60
24
|
display: grid;
|
|
61
25
|
width: 1440px;
|
|
62
|
-
height:
|
|
26
|
+
height: 360px;
|
|
63
27
|
grid-template-columns: repeat(auto-fill, 19px);
|
|
64
28
|
grid-template-rows: repeat(auto-fill, 19px);
|
|
65
29
|
gap: 1px;
|
|
66
|
-
row-rule: calc(1px * var(--
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
light-dark(rgb(147, 147, 147), rgb(147, 147, 147));
|
|
70
|
-
outline:
|
|
71
|
-
1px solid light-dark(rgb(147, 147, 147)),
|
|
72
|
-
rgb(147, 147, 147);
|
|
30
|
+
row-rule: calc(1px * var(--sf)) solid var(--grid-color);
|
|
31
|
+
column-rule: calc(1px * var(--sf)) solid var(--grid-color);
|
|
32
|
+
outline: 1px solid black;
|
|
73
33
|
position: fixed;
|
|
74
34
|
top: 0;
|
|
75
35
|
left: 50%;
|
|
@@ -80,21 +40,20 @@ export class Grid extends LitElement {
|
|
|
80
40
|
|
|
81
41
|
/* DO NOT CHANGE THIS GRID CODE FOR MOBILE. ITS PERFECT FOR MOBILE. */
|
|
82
42
|
:host(.mobile) {
|
|
83
|
-
|
|
84
|
-
width: calc(100% - calc(1px * var(--scaling-factor)));
|
|
43
|
+
width: calc(100% - calc(1px * var(--sf)));
|
|
85
44
|
max-width: 100vw;
|
|
86
45
|
margin-left: 0 !important;
|
|
87
46
|
margin-top: 0 !important;
|
|
88
47
|
box-sizing: border-box;
|
|
89
48
|
position: fixed;
|
|
90
|
-
top: calc(0.5px * var(--
|
|
49
|
+
top: calc(0.5px * var(--sf));
|
|
91
50
|
left: 50%;
|
|
92
51
|
transform: translateX(-50%);
|
|
93
52
|
pointer-events: none;
|
|
94
53
|
z-index: 300;
|
|
95
|
-
gap: calc(1px * var(--
|
|
96
|
-
grid-template-columns: repeat(14, calc(19px * var(--
|
|
97
|
-
grid-template-rows: repeat(auto-fill, calc(19px * var(--
|
|
54
|
+
gap: calc(1px * var(--sf));
|
|
55
|
+
grid-template-columns: repeat(14, calc(19px * var(--sf)));
|
|
56
|
+
grid-template-rows: repeat(auto-fill, calc(19px * var(--sf)));
|
|
98
57
|
}
|
|
99
58
|
|
|
100
59
|
:host([align="left"]) {
|
|
@@ -114,15 +73,6 @@ export class Grid extends LitElement {
|
|
|
114
73
|
}
|
|
115
74
|
`;
|
|
116
75
|
|
|
117
|
-
updated() {
|
|
118
|
-
// Apply mobile class if detected as mobile device
|
|
119
|
-
if (this._isMobile) {
|
|
120
|
-
this.classList.add("mobile");
|
|
121
|
-
} else {
|
|
122
|
-
this.classList.remove("mobile");
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
76
|
render() {
|
|
127
77
|
return html``;
|
|
128
78
|
}
|