ds-one 0.2.5-alpha.2 → 0.2.5-alpha.4

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 (50) hide show
  1. package/DS1/0-face/device.ts +10 -6
  2. package/DS1/0-face/i18n.ts +3 -1
  3. package/DS1/1-root/one.css +52 -67
  4. package/DS1/2-core/ds-banner.ts +3 -0
  5. package/DS1/2-core/ds-cycle.ts +14 -1
  6. package/DS1/2-core/ds-icon.ts +4 -4
  7. package/DS1/2-core/ds-text.ts +10 -4
  8. package/DS1/2-core/ds-tooltip.ts +3 -3
  9. package/DS1/3-unit/ds-list.ts +7 -0
  10. package/DS1/3-unit/{singlenav-v1.ts → ds-portfolio-singlenav.ts} +8 -8
  11. package/DS1/3-unit/ds-row.ts +4 -5
  12. package/DS1/4-page/ds-grid.ts +9 -59
  13. package/DS1/4-page/ds-layout.ts +122 -17
  14. package/README.md +3 -3
  15. package/dist/0-face/device.d.ts.map +1 -1
  16. package/dist/0-face/device.js +7 -3
  17. package/dist/0-face/i18n.d.ts.map +1 -1
  18. package/dist/0-face/i18n.js +1 -1
  19. package/dist/2-core/ds-banner.d.ts +1 -0
  20. package/dist/2-core/ds-banner.d.ts.map +1 -0
  21. package/dist/2-core/ds-banner.js +2 -0
  22. package/dist/2-core/ds-cycle.d.ts +1 -0
  23. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  24. package/dist/2-core/ds-cycle.js +14 -1
  25. package/dist/2-core/ds-icon.js +4 -4
  26. package/dist/2-core/ds-text.d.ts.map +1 -1
  27. package/dist/2-core/ds-text.js +10 -4
  28. package/dist/2-core/ds-tooltip.js +3 -3
  29. package/dist/3-unit/ds-list.d.ts.map +1 -1
  30. package/dist/3-unit/ds-list.js +3 -0
  31. package/dist/3-unit/ds-portfolio-singlenav.js +3 -3
  32. package/dist/3-unit/ds-row.js +4 -4
  33. package/dist/4-page/ds-grid.d.ts +0 -7
  34. package/dist/4-page/ds-grid.d.ts.map +1 -1
  35. package/dist/4-page/ds-grid.js +9 -54
  36. package/dist/4-page/ds-layout.d.ts +1 -1
  37. package/dist/4-page/ds-layout.d.ts.map +1 -1
  38. package/dist/4-page/ds-layout.js +125 -16
  39. package/dist/ds-one.bundle.js +232 -147
  40. package/dist/ds-one.bundle.js.map +4 -4
  41. package/dist/ds-one.bundle.min.js +171 -63
  42. package/dist/ds-one.bundle.min.js.map +4 -4
  43. package/package.json +7 -6
  44. package/DS1/3-unit/doublenav-v1.ts +0 -105
  45. package/DS1/3-unit/ds-portfolio-doublenav.ts +0 -105
  46. package/DS1/3-unit/ds-portfolio-panel.ts +0 -25
  47. package/DS1/3-unit/list-v1.ts +0 -24
  48. package/DS1/3-unit/panel-v1.ts +0 -26
  49. package/DS1/3-unit/row-v1.ts +0 -52
  50. /package/DS1/x-icon/{row..svg → row.svg} +0 -0
@@ -38,11 +38,13 @@ function initDeviceDetection() {
38
38
  const designWidth = 280;
39
39
  const actualWidth = deviceInfo.screenWidth;
40
40
  const scalingFactor = actualWidth / designWidth;
41
- document.documentElement.style.setProperty("--scaling-factor-mobile", scalingFactor.toFixed(3));
41
+ document.documentElement.style.setProperty("--sf", scalingFactor.toFixed(3));
42
+ document.documentElement.style.setProperty("--sf", scalingFactor.toFixed(3));
42
43
  console.log(`[DS one] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${scalingFactor.toFixed(2)}`);
43
44
  } else {
44
45
  if (typeof document !== "undefined") {
45
- document.documentElement.style.setProperty("--scaling-factor-mobile", "1");
46
+ document.documentElement.style.setProperty("--sf", "1");
47
+ document.documentElement.style.setProperty("--sf", "1");
46
48
  }
47
49
  console.log(`[DS one] Desktop device detected (${deviceInfo.screenWidth}x${deviceInfo.screenHeight})`);
48
50
  }
@@ -452,7 +454,7 @@ function translate(key) {
452
454
  if (lang !== defaultLanguage && translationData?.[defaultLanguage]?.[key]) {
453
455
  return translationData[defaultLanguage][key];
454
456
  }
455
- console.warn(`[translate] No translation found for key "${key}"`);
457
+ console.warn(`[DS one (Internationalization)] No translation found for key "${key}"`);
456
458
  return key;
457
459
  }
458
460
  function hasTranslation(key, language = currentLanguage.value) {
@@ -2247,8 +2249,8 @@ Icon.styles = i4`
2247
2249
  display: inline-flex;
2248
2250
  justify-content: center;
2249
2251
  align-items: center;
2250
- width: calc(16px * var(--scaling-factor));
2251
- height: calc(16px * var(--scaling-factor));
2252
+ width: calc(16px * var(--sf));
2253
+ height: calc(16px * var(--sf));
2252
2254
  }
2253
2255
 
2254
2256
  svg {
@@ -2265,8 +2267,8 @@ Icon.styles = i4`
2265
2267
  display: flex;
2266
2268
  justify-content: center;
2267
2269
  align-items: center;
2268
- width: calc(16px * var(--scaling-factor));
2269
- height: calc(16px * var(--scaling-factor));
2270
+ width: calc(16px * var(--sf));
2271
+ height: calc(16px * var(--sf));
2270
2272
  }
2271
2273
 
2272
2274
  /* Notes style color variable for future implementation */
@@ -2297,6 +2299,82 @@ Icon.iconNameToSvgMap = (() => {
2297
2299
  customElements.define("ds-icon", Icon);
2298
2300
  console.log("Icon component registered with custom elements registry");
2299
2301
 
2302
+ // dist/2-core/ds-text.js
2303
+ var Text = class extends i6 {
2304
+ static get properties() {
2305
+ return {
2306
+ key: { type: String, reflect: true },
2307
+ defaultValue: { type: String, reflect: true, attribute: "default-value" },
2308
+ fallback: { type: String, reflect: true },
2309
+ // Kept for backward compatibility
2310
+ _text: { type: String, state: true }
2311
+ };
2312
+ }
2313
+ constructor() {
2314
+ super();
2315
+ this.key = "";
2316
+ this.defaultValue = "";
2317
+ this.fallback = "";
2318
+ this._text = "";
2319
+ this.boundHandlers = {
2320
+ languageChanged: (() => {
2321
+ console.log("Language changed event received in ds-text");
2322
+ this._loadText();
2323
+ })
2324
+ };
2325
+ }
2326
+ connectedCallback() {
2327
+ super.connectedCallback();
2328
+ this._loadText();
2329
+ window.addEventListener("language-changed", this.boundHandlers.languageChanged);
2330
+ window.addEventListener("translations-loaded", this.boundHandlers.languageChanged);
2331
+ }
2332
+ disconnectedCallback() {
2333
+ super.disconnectedCallback();
2334
+ window.removeEventListener("language-changed", this.boundHandlers.languageChanged);
2335
+ window.removeEventListener("translations-loaded", this.boundHandlers.languageChanged);
2336
+ }
2337
+ updated(changedProperties) {
2338
+ super.updated(changedProperties);
2339
+ if (changedProperties.has("key") || changedProperties.has("defaultValue")) {
2340
+ this._loadText();
2341
+ }
2342
+ }
2343
+ _loadText() {
2344
+ if (!this.key) {
2345
+ this._text = this.defaultValue || this.fallback || "";
2346
+ return;
2347
+ }
2348
+ try {
2349
+ const text = getText(this.key);
2350
+ this._text = text || this.defaultValue || this.fallback || this.key;
2351
+ } catch (error) {
2352
+ console.error("Error loading text for key:", this.key, error);
2353
+ this._text = this.defaultValue || this.fallback || this.key;
2354
+ }
2355
+ this.requestUpdate();
2356
+ }
2357
+ render() {
2358
+ return x`<span>${this._text || this.defaultValue || this.key}</span>`;
2359
+ }
2360
+ };
2361
+ Text.styles = i4`
2362
+ :host {
2363
+ display: inline;
2364
+ font-family: var(--typeface);
2365
+ font-size: calc(var(--type-size-default) * var(--scaling-factor));
2366
+ font-weight: var(--type-weight-default);
2367
+ line-height: calc(var(--type-lineheight-default) * var(--scaling-factor));
2368
+ letter-spacing: calc(
2369
+ var(--type-letterspacing-default) * var(--scaling-factor)
2370
+ );
2371
+ text-align: var(--text-align-default);
2372
+ text-transform: var(--text-transform-default);
2373
+ text-decoration: var(--text-decoration-default);
2374
+ }
2375
+ `;
2376
+ customElements.define("ds-text", Text);
2377
+
2300
2378
  // dist/2-core/ds-cycle.js
2301
2379
  var saveAccentColor = (color) => {
2302
2380
  localStorage.setItem("accentColor", color);
@@ -2657,7 +2735,15 @@ var Cycle = class extends i6 {
2657
2735
  render() {
2658
2736
  return x`
2659
2737
  <div class="cycle-container">
2660
- ${this.type !== "icon-only" ? x`<span class="cycle-label">${this.label}</span>` : ""}
2738
+ ${this.type !== "icon-only" ? x`${this.type === "language" ? x`<ds-text
2739
+ key="language"
2740
+ default-value="Language"
2741
+ class="cycle-label"
2742
+ ></ds-text>` : this.type === "theme" ? x`<ds-text
2743
+ key="theme"
2744
+ default-value="Theme"
2745
+ class="cycle-label"
2746
+ ></ds-text>` : x`<span class="cycle-label">${this.label}</span>`}` : ""}
2661
2747
  <div
2662
2748
  style="display: flex; align-items: center; ${this.type === "icon-only" ? "justify-content: center;" : ""}"
2663
2749
  >
@@ -2735,76 +2821,6 @@ Cycle.styles = i4`
2735
2821
  `;
2736
2822
  customElements.define("ds-cycle", Cycle);
2737
2823
 
2738
- // dist/2-core/ds-text.js
2739
- var Text = class extends i6 {
2740
- static get properties() {
2741
- return {
2742
- key: { type: String, reflect: true },
2743
- defaultValue: { type: String, reflect: true, attribute: "default-value" },
2744
- fallback: { type: String, reflect: true },
2745
- // Kept for backward compatibility
2746
- _text: { type: String, state: true }
2747
- };
2748
- }
2749
- constructor() {
2750
- super();
2751
- this.key = "";
2752
- this.defaultValue = "";
2753
- this.fallback = "";
2754
- this._text = "";
2755
- this.boundHandlers = {
2756
- languageChanged: (() => {
2757
- console.log("Language changed event received in ds-text");
2758
- this._loadText();
2759
- })
2760
- };
2761
- }
2762
- connectedCallback() {
2763
- super.connectedCallback();
2764
- this._loadText();
2765
- window.addEventListener("language-changed", this.boundHandlers.languageChanged);
2766
- window.addEventListener("translations-loaded", this.boundHandlers.languageChanged);
2767
- }
2768
- disconnectedCallback() {
2769
- super.disconnectedCallback();
2770
- window.removeEventListener("language-changed", this.boundHandlers.languageChanged);
2771
- window.removeEventListener("translations-loaded", this.boundHandlers.languageChanged);
2772
- }
2773
- updated(changedProperties) {
2774
- super.updated(changedProperties);
2775
- if (changedProperties.has("key") || changedProperties.has("defaultValue")) {
2776
- this._loadText();
2777
- }
2778
- }
2779
- _loadText() {
2780
- if (!this.key) {
2781
- this._text = this.defaultValue || this.fallback || "";
2782
- return;
2783
- }
2784
- try {
2785
- const text = getText(this.key);
2786
- this._text = text || this.defaultValue || this.fallback || this.key;
2787
- } catch (error) {
2788
- console.error("Error loading text for key:", this.key, error);
2789
- this._text = this.defaultValue || this.fallback || this.key;
2790
- }
2791
- this.requestUpdate();
2792
- }
2793
- render() {
2794
- return x`<span>${this._text || this.defaultValue || this.key}</span>`;
2795
- }
2796
- };
2797
- Text.styles = i4`
2798
- :host {
2799
- display: inline;
2800
- }
2801
-
2802
- .loading {
2803
- opacity: 0.6;
2804
- }
2805
- `;
2806
- customElements.define("ds-text", Text);
2807
-
2808
2824
  // dist/2-core/ds-tooltip.js
2809
2825
  var Tooltip = class extends i6 {
2810
2826
  constructor() {
@@ -2917,10 +2933,10 @@ Tooltip.styles = i4`
2917
2933
  position: absolute;
2918
2934
  left: 50%;
2919
2935
  bottom: 100%;
2920
- transform: translate(-50%, calc(-2px * var(--scaling-factor)));
2936
+ transform: translate(-50%, calc(-2px * var(--sf)));
2921
2937
  z-index: 1000;
2922
2938
  pointer-events: none;
2923
- height: calc(var(--08) * var(--scaling-factor));
2939
+ height: calc(var(--08) * var(--sf));
2924
2940
  opacity: 0;
2925
2941
  transition:
2926
2942
  opacity 120ms ease,
@@ -2929,7 +2945,7 @@ Tooltip.styles = i4`
2929
2945
  color: light-dark(var(--white), var(--black));
2930
2946
  border-radius: 0;
2931
2947
  font-size: var(--type-size-default);
2932
- padding: 0px calc(1px * var(--scaling-factor));
2948
+ padding: 0px calc(1px * var(--sf));
2933
2949
  font-family: var(
2934
2950
  --typeface,
2935
2951
  -apple-system,
@@ -2999,18 +3015,18 @@ Row.styles = i4`
2999
3015
  :host {
3000
3016
  display: flex;
3001
3017
  align-items: end;
3002
- width: calc(240px * var(--scaling-factor));
3018
+ width: calc(240px * var(--sf));
3003
3019
  }
3004
3020
 
3005
3021
  :host([type="fill"]) {
3006
3022
  justify-content: space-between;
3007
- height: calc(var(--1) * var(--scaling-factor));
3023
+ height: calc(var(--1) * var(--sf));
3008
3024
  }
3009
3025
 
3010
3026
  :host([type="centered"]) {
3011
3027
  justify-content: center;
3012
- height: calc(var(--1) * var(--scaling-factor));
3013
- gap: calc(var(--025) * var(--scaling-factor));
3028
+ height: calc(var(--1) * var(--sf));
3029
+ gap: calc(var(--025) * var(--sf));
3014
3030
  }
3015
3031
  `;
3016
3032
  customElements.define("ds-row", Row);
@@ -3140,43 +3156,12 @@ customElements.define("ds-table", DsTable);
3140
3156
 
3141
3157
  // dist/4-page/ds-grid.js
3142
3158
  var Grid = class extends i6 {
3143
- constructor() {
3144
- super(...arguments);
3145
- this._isMobile = false;
3146
- }
3147
- connectedCallback() {
3148
- super.connectedCallback();
3149
- this._isMobile = detectMobileDevice();
3150
- console.log(`[ds-grid] Mobile device: ${this._isMobile}`);
3151
- if (this._isMobile) {
3152
- this.classList.add("mobile");
3153
- console.log(`[ds-grid] Mobile class added`);
3154
- }
3155
- if (this._isMobile && typeof window !== "undefined") {
3156
- const screenWidth = window.innerWidth;
3157
- const columns = 14;
3158
- const gap = 0.5;
3159
- const totalGapWidth = (columns - 1) * gap;
3160
- const columnSize = (screenWidth - totalGapWidth) / columns;
3161
- console.log(`[ds-grid] Mobile grid: ${columns} columns \xD7 ${columnSize.toFixed(2)}px + ${totalGapWidth}px gaps = ${screenWidth}px`);
3162
- this.style.setProperty("--mobile-column-size", `${columnSize}px`);
3163
- this.style.setProperty("--mobile-gap", `${gap}px`);
3164
- }
3165
- }
3166
- updated() {
3167
- if (this._isMobile) {
3168
- this.classList.add("mobile");
3169
- } else {
3170
- this.classList.remove("mobile");
3171
- }
3172
- }
3173
3159
  render() {
3174
3160
  return x``;
3175
3161
  }
3176
3162
  };
3177
3163
  Grid.properties = {
3178
- align: { type: String },
3179
- _isMobile: { type: Boolean, state: true }
3164
+ align: { type: String }
3180
3165
  };
3181
3166
  Grid.styles = i4`
3182
3167
  :host {
@@ -3184,17 +3169,13 @@ Grid.styles = i4`
3184
3169
  margin-left: 0.5px !important;
3185
3170
  display: grid;
3186
3171
  width: 1440px;
3187
- height: 100%;
3172
+ height: 360px;
3188
3173
  grid-template-columns: repeat(auto-fill, 19px);
3189
3174
  grid-template-rows: repeat(auto-fill, 19px);
3190
3175
  gap: 1px;
3191
- row-rule: calc(1px * var(--scaling-factor)) solid
3192
- light-dark(rgb(147, 147, 147), rgb(147, 147, 147));
3193
- column-rule: calc(1px * var(--scaling-factor)) solid
3194
- light-dark(rgb(147, 147, 147), rgb(147, 147, 147));
3195
- outline:
3196
- 1px solid light-dark(rgb(147, 147, 147)),
3197
- rgb(147, 147, 147);
3176
+ row-rule: calc(1px * var(--sf)) solid var(--grid-color);
3177
+ column-rule: calc(1px * var(--sf)) solid var(--grid-color);
3178
+ outline: 1px solid black;
3198
3179
  position: fixed;
3199
3180
  top: 0;
3200
3181
  left: 50%;
@@ -3205,21 +3186,20 @@ Grid.styles = i4`
3205
3186
 
3206
3187
  /* DO NOT CHANGE THIS GRID CODE FOR MOBILE. ITS PERFECT FOR MOBILE. */
3207
3188
  :host(.mobile) {
3208
- outline: calc(2px * var(--scaling-factor)) solid rgba(251, 255, 0, 0.9);
3209
- width: calc(100% - calc(1px * var(--scaling-factor)));
3189
+ width: calc(100% - calc(1px * var(--sf)));
3210
3190
  max-width: 100vw;
3211
3191
  margin-left: 0 !important;
3212
3192
  margin-top: 0 !important;
3213
3193
  box-sizing: border-box;
3214
3194
  position: fixed;
3215
- top: calc(0.5px * var(--scaling-factor));
3195
+ top: calc(0.5px * var(--sf));
3216
3196
  left: 50%;
3217
3197
  transform: translateX(-50%);
3218
3198
  pointer-events: none;
3219
3199
  z-index: 300;
3220
- gap: calc(1px * var(--scaling-factor));
3221
- grid-template-columns: repeat(14, calc(19px * var(--scaling-factor)));
3222
- grid-template-rows: repeat(auto-fill, calc(19px * var(--scaling-factor)));
3200
+ gap: calc(1px * var(--sf));
3201
+ grid-template-columns: repeat(14, calc(19px * var(--sf)));
3202
+ grid-template-rows: repeat(auto-fill, calc(19px * var(--sf)));
3223
3203
  }
3224
3204
 
3225
3205
  :host([align="left"]) {
@@ -3242,26 +3222,66 @@ customElements.define("ds-grid", Grid);
3242
3222
 
3243
3223
  // dist/4-page/ds-layout.js
3244
3224
  var Layout = class extends i6 {
3225
+ constructor() {
3226
+ super(...arguments);
3227
+ this.mode = "portfolio";
3228
+ }
3245
3229
  render() {
3246
3230
  const isDebug = this.debug || this.mode === "debug";
3231
+ const isPortfolio = this.mode === "portfolio";
3247
3232
  const isCompany = this.mode === "company";
3233
+ const isApp = this.mode === "app";
3248
3234
  return x`
3249
3235
  <slot></slot>
3250
3236
  ${isDebug ? x`
3251
3237
  <div class="debug-overlay">
3252
- ${isCompany ? x`
3253
- <div class="debug-area debug-header">header</div>
3254
- <div class="debug-area debug-content">content</div>
3255
- <div class="debug-area debug-footer">footer</div>
3256
- ` : x`
3257
- <div class="debug-area debug-square">square</div>
3258
- <div class="debug-area debug-title">title</div>
3259
- <div class="debug-area debug-header">header</div>
3260
- <div class="debug-area debug-projects">projects</div>
3261
- <div class="debug-area debug-bio">bio</div>
3262
- <div class="debug-area debug-nav">nav</div>
3263
- <div class="debug-area debug-footer">footer</div>
3264
- `}
3238
+ ${isApp ? x`
3239
+ <div class="debug-area debug-banner">
3240
+ <ds-text key="banner">banner</ds-text>
3241
+ </div>
3242
+ <div class="debug-area debug-header">
3243
+ <ds-text key="header">header</ds-text>
3244
+ </div>
3245
+
3246
+ <div class="debug-area debug-main">
3247
+ <ds-text key="main">main</ds-text>
3248
+ </div>
3249
+ <div class="debug-area debug-footer-app">
3250
+ <ds-text key="footer">footer</ds-text>
3251
+ </div>
3252
+ ` : isCompany ? x`
3253
+ <div class="debug-area debug-header">
3254
+ <ds-text key="header">header</ds-text>
3255
+ </div>
3256
+ <div class="debug-area debug-content">
3257
+ <ds-text key="content">content</ds-text>
3258
+ </div>
3259
+ <div class="debug-area debug-footer">
3260
+ <ds-text key="footer">footer</ds-text>
3261
+ </div>
3262
+ ` : isPortfolio ? x`
3263
+ <div class="debug-area debug-square">
3264
+ <ds-text key="square">square</ds-text>
3265
+ </div>
3266
+ <div class="debug-area debug-title">
3267
+ <ds-text key="title">title</ds-text>
3268
+ </div>
3269
+ <div class="debug-area debug-header">
3270
+ <ds-text key="header">header</ds-text>
3271
+ </div>
3272
+ <div class="debug-area debug-projects">
3273
+ <ds-text key="projects">projects</ds-text>
3274
+ </div>
3275
+ <div class="debug-area debug-bio">
3276
+ <ds-text key="bio">bio</ds-text>
3277
+ </div>
3278
+ <div class="debug-area debug-nav">
3279
+ <ds-text key="nav">nav</ds-text>
3280
+ </div>
3281
+ <div class="debug-area debug-footer">
3282
+ <ds-text key="footer">footer</ds-text>
3283
+ </div>
3284
+ ` : ""}
3265
3285
  </div>
3266
3286
  ` : ""}
3267
3287
  `;
@@ -3275,6 +3295,11 @@ Layout.properties = {
3275
3295
  Layout.styles = i4`
3276
3296
  :host {
3277
3297
  display: grid;
3298
+ position: relative;
3299
+ width: 100%;
3300
+ }
3301
+
3302
+ :host([mode="portfolio"]) {
3278
3303
  grid-template-columns: 120px 480px 40px;
3279
3304
  grid-template-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
3280
3305
  grid-template-areas:
@@ -3291,8 +3316,6 @@ Layout.styles = i4`
3291
3316
  ". . .";
3292
3317
  min-height: 600px;
3293
3318
  background-color: rgba(165, 165, 165, 0.03);
3294
- position: relative;
3295
- width: 100%;
3296
3319
  max-width: 640px;
3297
3320
  margin: 0 auto;
3298
3321
  }
@@ -3326,6 +3349,29 @@ Layout.styles = i4`
3326
3349
  justify-self: end;
3327
3350
  }
3328
3351
 
3352
+ /* App mode - Base */
3353
+ :host([mode="app"]) {
3354
+ grid-template-columns: 1fr;
3355
+ grid-template-rows: calc(var(--1) * var(--sf)) 20px 1fr auto;
3356
+ grid-template-areas:
3357
+ "banner"
3358
+ "main"
3359
+ "footer";
3360
+ min-height: 100vh;
3361
+ background-color: transparent;
3362
+ width: 100%;
3363
+ margin: 0 auto;
3364
+ gap: 0;
3365
+ }
3366
+
3367
+ /* App mode - with scaling factor */
3368
+ :host([mode="app"]) {
3369
+ max-width: calc(400px * var(--sf, 1));
3370
+ padding: calc(60px * var(--sf, 1)) calc(28px * var(--sf, 1))
3371
+ calc(9.751px * var(--sf, 1));
3372
+ gap: calc(28px * var(--sf, 1));
3373
+ }
3374
+
3329
3375
  .debug-overlay {
3330
3376
  position: absolute;
3331
3377
  margin-left: -1px;
@@ -3338,6 +3384,9 @@ Layout.styles = i4`
3338
3384
  display: grid;
3339
3385
  font-size: 18px;
3340
3386
  font-weight: bold;
3387
+ }
3388
+
3389
+ :host([mode="portfolio"]) .debug-overlay {
3341
3390
  grid-template-columns: 120px 480px;
3342
3391
  grid-template-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
3343
3392
  grid-template-areas:
@@ -3409,13 +3458,49 @@ Layout.styles = i4`
3409
3458
 
3410
3459
  .debug-footer {
3411
3460
  grid-area: footer;
3412
- border-color: #ffa500;
3461
+ border-color: rgb(24, 147, 73);
3462
+ background-color: rgba(127, 123, 11, 0.1);
3413
3463
  }
3414
3464
 
3415
3465
  .debug-content {
3416
3466
  grid-area: content;
3417
3467
  border-color: rgba(71, 231, 71, 0.63);
3418
3468
  }
3469
+
3470
+ :host([mode="app"]) .debug-overlay {
3471
+ grid-template-columns: 1fr;
3472
+ grid-template-rows:
3473
+ calc(var(--1) * var(--sf))
3474
+ calc(var(--2) * var(--sf))
3475
+ calc(var(--4) * var(--sf))
3476
+ calc(var(--1) * var(--sf));
3477
+ grid-template-areas:
3478
+ "banner"
3479
+ "header"
3480
+ "main"
3481
+ "footer";
3482
+ }
3483
+
3484
+ .debug-banner {
3485
+ grid-area: banner;
3486
+ border-color: #daed09;
3487
+ }
3488
+
3489
+ .debug-header {
3490
+ grid-area: header;
3491
+ border-color: #0000ff;
3492
+ background-color: rgba(127, 123, 11, 0.5);
3493
+ }
3494
+
3495
+ .debug-main {
3496
+ grid-area: main;
3497
+ border-color: #0000ff;
3498
+ }
3499
+
3500
+ .debug-footer-app {
3501
+ grid-area: footer;
3502
+ border-color: #ffa500;
3503
+ }
3419
3504
  `;
3420
3505
  customElements.define("ds-layout", Layout);
3421
3506
  export {