ds-one 0.2.5-alpha.12 → 0.2.5-alpha.14

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.
@@ -40,11 +40,15 @@ function initDeviceDetection() {
40
40
  const scalingFactor = actualWidth / designWidth;
41
41
  document.documentElement.style.setProperty("--sf", scalingFactor.toFixed(3));
42
42
  document.documentElement.style.setProperty("--sf", scalingFactor.toFixed(3));
43
+ document.documentElement.classList.add("mobile");
44
+ document.documentElement.classList.remove("desktop");
43
45
  console.log(`[DS one] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${scalingFactor.toFixed(2)}`);
44
46
  } else {
45
47
  if (typeof document !== "undefined") {
46
48
  document.documentElement.style.setProperty("--sf", "1");
47
49
  document.documentElement.style.setProperty("--sf", "1");
50
+ document.documentElement.classList.add("desktop");
51
+ document.documentElement.classList.remove("mobile");
48
52
  }
49
53
  console.log(`[DS one] Desktop device detected (${deviceInfo.screenWidth}x${deviceInfo.screenHeight})`);
50
54
  }
@@ -1888,7 +1892,7 @@ Text.styles = i4`
1888
1892
  :host {
1889
1893
  display: inline;
1890
1894
  font-family: var(--typeface-regular);
1891
- font-size: calc(var(--type-size-default) * var(--sf));
1895
+ font-size: var(--type-size-default);
1892
1896
  font-weight: var(--type-weight-default);
1893
1897
  line-height: calc(var(--type-lineheight-default) * var(--sf));
1894
1898
  letter-spacing: calc(var(--type-letterspacing-default) * var(--sf));
@@ -1978,10 +1982,11 @@ Button.properties = {
1978
1982
  Button.styles = i4`
1979
1983
  button {
1980
1984
  max-height: calc(var(--08) * var(--sf));
1981
- border: none;
1985
+ display: inline-flex;
1986
+ align-items: center;
1987
+ justify-content: center;
1982
1988
  cursor: pointer;
1983
- font-size: calc(var(--type-size-default) * var(--sf));
1984
- padding: 0 calc(1px * var(--sf));
1989
+ padding: 0 calc(0.5px * var(--sf));
1985
1990
  color: var(--button-text-color);
1986
1991
  font-family: var(--typeface-regular);
1987
1992
  }
@@ -2004,6 +2009,19 @@ Button.styles = i4`
2004
2009
  font-family: var(--typeface-regular);
2005
2010
  }
2006
2011
 
2012
+ button.text {
2013
+ background-color: transparent;
2014
+ color: var(--button-color, var(--button-text-color));
2015
+ font-family: var(--typeface-regular);
2016
+ padding: 0;
2017
+ text-decoration: none;
2018
+ }
2019
+
2020
+ button.text:hover {
2021
+ opacity: 0.8;
2022
+ text-decoration: none;
2023
+ }
2024
+
2007
2025
  button[bold] {
2008
2026
  font-weight: var(--type-weight-bold);
2009
2027
  font-family: var(--typeface-medium);
@@ -3136,8 +3154,82 @@ DsTable.styles = i4`
3136
3154
  `;
3137
3155
  customElements.define("ds-table", DsTable);
3138
3156
 
3157
+ // dist/4-page/ds-container.js
3158
+ var Container = class extends i6 {
3159
+ render() {
3160
+ return x`<slot></slot>`;
3161
+ }
3162
+ };
3163
+ Container.styles = i4`
3164
+ :host {
3165
+ display: flex;
3166
+ width: 100%;
3167
+ max-width: 100%;
3168
+ flex-direction: column;
3169
+ background-color: var(--background-color);
3170
+ box-sizing: border-box;
3171
+ }
3172
+
3173
+ /* Ensure children don't overflow */
3174
+ :host ::slotted(*) {
3175
+ max-width: 100%;
3176
+ box-sizing: border-box;
3177
+ }
3178
+
3179
+ /* Mobile: 100% width */
3180
+ @media (max-width: 820px) {
3181
+ :host {
3182
+ width: 100%;
3183
+ max-width: 100%;
3184
+ }
3185
+ }
3186
+
3187
+ /* Desktop: max-width 1000px, centered */
3188
+ @media (min-width: 821px) {
3189
+ :host {
3190
+ max-width: 1000px;
3191
+ margin-left: auto;
3192
+ margin-right: auto;
3193
+ width: 100%;
3194
+ }
3195
+ }
3196
+ `;
3197
+ customElements.define("ds-container", Container);
3198
+
3139
3199
  // dist/4-page/ds-grid.js
3140
3200
  var Grid = class extends i6 {
3201
+ connectedCallback() {
3202
+ super.connectedCallback();
3203
+ this.updateMobileClass();
3204
+ this.resizeObserver = () => {
3205
+ if (this.resizeTimeout) {
3206
+ clearTimeout(this.resizeTimeout);
3207
+ }
3208
+ this.resizeTimeout = setTimeout(() => {
3209
+ this.updateMobileClass();
3210
+ }, 100);
3211
+ };
3212
+ window.addEventListener("resize", this.resizeObserver);
3213
+ }
3214
+ disconnectedCallback() {
3215
+ super.disconnectedCallback();
3216
+ if (this.resizeObserver) {
3217
+ window.removeEventListener("resize", this.resizeObserver);
3218
+ }
3219
+ if (this.resizeTimeout) {
3220
+ clearTimeout(this.resizeTimeout);
3221
+ }
3222
+ }
3223
+ updateMobileClass() {
3224
+ const isMobile = detectMobileDevice();
3225
+ if (isMobile) {
3226
+ this.classList.add("mobile");
3227
+ this.classList.remove("desktop");
3228
+ } else {
3229
+ this.classList.add("desktop");
3230
+ this.classList.remove("mobile");
3231
+ }
3232
+ }
3141
3233
  render() {
3142
3234
  return x``;
3143
3235
  }
@@ -3151,13 +3243,13 @@ Grid.styles = i4`
3151
3243
  margin-left: 0.5px !important;
3152
3244
  display: grid;
3153
3245
  width: 1440px;
3154
- height: 360px;
3246
+ height: 1280px;
3155
3247
  grid-template-columns: repeat(auto-fill, 19px);
3156
3248
  grid-template-rows: repeat(auto-fill, 19px);
3157
3249
  gap: 1px;
3158
3250
  row-rule: calc(1px * var(--sf)) solid var(--grid-color);
3159
3251
  column-rule: calc(1px * var(--sf)) solid var(--grid-color);
3160
- outline: 1px solid black;
3252
+ outline: calc(1px * var(--sf)) solid var(--yellow);
3161
3253
  position: fixed;
3162
3254
  top: 0;
3163
3255
  left: 50%;
@@ -3170,7 +3262,7 @@ Grid.styles = i4`
3170
3262
  :host(.mobile) {
3171
3263
  width: calc(100% - calc(1px * var(--sf)));
3172
3264
  max-width: 100vw;
3173
- margin-left: 0 !important;
3265
+ margin-left: 0.5px !important;
3174
3266
  margin-top: 0 !important;
3175
3267
  box-sizing: border-box;
3176
3268
  position: fixed;
@@ -3209,58 +3301,58 @@ var Layout = class extends i6 {
3209
3301
  this.mode = "portfolio";
3210
3302
  }
3211
3303
  render() {
3212
- const isDebug = this.debug || this.mode === "debug";
3304
+ const isView = this.view || this.mode === "view";
3213
3305
  const isPortfolio = this.mode === "portfolio";
3214
3306
  const isCompany = this.mode === "company";
3215
3307
  const isApp = this.mode === "app";
3216
3308
  return x`
3217
3309
  <slot></slot>
3218
- ${isDebug ? x`
3219
- <div class="debug-overlay">
3310
+ ${isView ? x`
3311
+ <div class="view-overlay">
3220
3312
  ${isApp ? x`
3221
- <div class="debug-area debug-banner">
3313
+ <div class="view-area view-banner">
3222
3314
  <ds-text key="banner">banner</ds-text>
3223
3315
  </div>
3224
- <div class="debug-area debug-header">
3316
+ <div class="view-area view-header">
3225
3317
  <ds-text key="header">header</ds-text>
3226
3318
  </div>
3227
3319
 
3228
- <div class="debug-area debug-main">
3320
+ <div class="view-area view-main">
3229
3321
  <ds-text key="main">main</ds-text>
3230
3322
  </div>
3231
- <div class="debug-area debug-footer-app">
3323
+ <div class="view-area view-footer">
3232
3324
  <ds-text key="footer">footer</ds-text>
3233
3325
  </div>
3234
3326
  ` : isCompany ? x`
3235
- <div class="debug-area debug-header">
3327
+ <div class="view-area view-header">
3236
3328
  <ds-text key="header">header</ds-text>
3237
3329
  </div>
3238
- <div class="debug-area debug-content">
3330
+ <div class="view-area view-content">
3239
3331
  <ds-text key="content">content</ds-text>
3240
3332
  </div>
3241
- <div class="debug-area debug-footer">
3333
+ <div class="view-area view-footer">
3242
3334
  <ds-text key="footer">footer</ds-text>
3243
3335
  </div>
3244
3336
  ` : isPortfolio ? x`
3245
- <div class="debug-area debug-square">
3337
+ <div class="view-area view-square">
3246
3338
  <ds-text key="square">square</ds-text>
3247
3339
  </div>
3248
- <div class="debug-area debug-title">
3340
+ <div class="view-area view-title">
3249
3341
  <ds-text key="title">title</ds-text>
3250
3342
  </div>
3251
- <div class="debug-area debug-header">
3343
+ <div class="view-area view-header">
3252
3344
  <ds-text key="header">header</ds-text>
3253
3345
  </div>
3254
- <div class="debug-area debug-projects">
3346
+ <div class="view-area view-projects">
3255
3347
  <ds-text key="projects">projects</ds-text>
3256
3348
  </div>
3257
- <div class="debug-area debug-bio">
3349
+ <div class="view-area view-bio">
3258
3350
  <ds-text key="bio">bio</ds-text>
3259
3351
  </div>
3260
- <div class="debug-area debug-nav">
3352
+ <div class="view-area view-nav">
3261
3353
  <ds-text key="nav">nav</ds-text>
3262
3354
  </div>
3263
- <div class="debug-area debug-footer">
3355
+ <div class="view-area view-footer">
3264
3356
  <ds-text key="footer">footer</ds-text>
3265
3357
  </div>
3266
3358
  ` : ""}
@@ -3272,7 +3364,7 @@ var Layout = class extends i6 {
3272
3364
  Layout.properties = {
3273
3365
  mode: { type: String },
3274
3366
  align: { type: String },
3275
- debug: { type: Boolean }
3367
+ view: { type: Boolean }
3276
3368
  };
3277
3369
  Layout.styles = i4`
3278
3370
  :host {
@@ -3281,80 +3373,106 @@ Layout.styles = i4`
3281
3373
  width: 100%;
3282
3374
  }
3283
3375
 
3376
+ slot {
3377
+ display: contents;
3378
+ }
3379
+
3284
3380
  :host([mode="portfolio"]) {
3285
- grid-template-columns: 120px 480px 40px;
3286
- grid-template-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
3287
- grid-template-areas:
3288
- "square . ."
3289
- ". title ."
3290
- ". header ."
3291
- ". projects ."
3292
- ". . ."
3293
- ". bio ."
3294
- ". . ."
3295
- ". nav ."
3296
- ". . ."
3297
- ". footer ."
3298
- ". . .";
3381
+ --portfolio-cols: 120px 480px 40px;
3382
+ --portfolio-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
3383
+ --portfolio-areas: "square . ." ". title ." ". header ." ". projects ."
3384
+ ". . ." ". bio ." ". . ." ". nav ." ". . ." ". footer ." ". . .";
3385
+ --portfolio-overlay-cols: 120px 480px;
3386
+ --portfolio-overlay-areas: "square ." ". title" ". header" ". projects"
3387
+ ". ." ". bio" ". ." ". nav" ". ." ". footer" ". .";
3388
+ grid-template-columns: var(--portfolio-cols);
3389
+ grid-template-rows: var(--portfolio-rows);
3390
+ grid-template-areas: var(--portfolio-areas);
3299
3391
  min-height: 600px;
3300
3392
  background-color: rgba(165, 165, 165, 0.03);
3301
3393
  max-width: 640px;
3302
- margin: 0 auto;
3394
+ margin: 0;
3395
+ }
3396
+
3397
+ :host([mode="portfolio"]) .view-overlay {
3398
+ grid-template-columns: var(--portfolio-overlay-cols);
3399
+ grid-template-rows: var(--portfolio-rows);
3400
+ grid-template-areas: var(--portfolio-overlay-areas);
3303
3401
  }
3304
3402
 
3305
3403
  :host([mode="company"]) {
3306
- grid-template-columns: auto 400px auto;
3307
- grid-template-rows: 80px 20px 20px 120px 20px 120px;
3308
- grid-template-areas:
3309
- ". . ."
3310
- ". header ."
3311
- ". . ."
3312
- ". content ."
3313
- ". . ."
3404
+ --company-cols: auto 400px auto;
3405
+ --company-rows: 80px 20px 20px 120px 20px 120px;
3406
+ --company-areas: ". . ." ". header ." ". . ." ". content ." ". . ."
3314
3407
  ". footer .";
3408
+ grid-template-columns: var(--company-cols);
3409
+ grid-template-rows: var(--company-rows);
3410
+ grid-template-areas: var(--company-areas);
3315
3411
  gap: 0;
3316
3412
  max-width: 100%;
3317
3413
  }
3318
3414
 
3319
- :host([align="left"]) {
3415
+ :host([mode="company"]) .view-overlay {
3416
+ grid-template-columns: var(--company-cols);
3417
+ grid-template-rows: var(--company-rows);
3418
+ grid-template-areas: var(--company-areas);
3419
+ gap: 0;
3420
+ }
3421
+
3422
+ :host([align="left"]),
3423
+ :host([mode="portfolio"][align="left"]),
3424
+ :host([mode="company"][align="left"]),
3425
+ :host([mode="app"][align="left"]) {
3320
3426
  margin: 0;
3321
3427
  justify-self: start;
3322
3428
  }
3323
3429
 
3324
- :host([align="center"]) {
3430
+ :host([align="center"]),
3431
+ :host([mode="portfolio"][align="center"]),
3432
+ :host([mode="company"][align="center"]),
3433
+ :host([mode="app"][align="center"]) {
3325
3434
  margin: 0 auto;
3326
3435
  justify-self: center;
3327
3436
  }
3328
3437
 
3329
- :host([align="right"]) {
3438
+ :host([align="right"]),
3439
+ :host([mode="portfolio"][align="right"]),
3440
+ :host([mode="company"][align="right"]),
3441
+ :host([mode="app"][align="right"]) {
3330
3442
  margin: 0 0 0 auto;
3331
3443
  justify-self: end;
3332
3444
  }
3333
3445
 
3334
3446
  /* App mode - Base */
3335
3447
  :host([mode="app"]) {
3336
- grid-template-columns: 1fr;
3337
- grid-template-rows: calc(var(--1) * var(--sf)) 20px 1fr auto;
3338
- grid-template-areas:
3339
- "banner"
3340
- "main"
3341
- "footer";
3448
+ --app-cols: 100%;
3449
+ --app-rows: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
3450
+ calc(var(--unit) * var(--sf)) calc(var(--dozen) * var(--sf))
3451
+ calc(var(--quad) * var(--sf)) calc(var(--unit) * var(--sf));
3452
+ --app-areas: "banner" "." "header" "." "main" "." "footer";
3453
+ --app-overlay-cols: 100%;
3454
+ --app-overlay-rows: calc(var(--unit) * var(--sf))
3455
+ calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
3456
+ calc(var(--unit) * var(--sf)) calc(var(--dozen) * var(--sf))
3457
+ calc(var(--quad) * var(--sf)) calc(var(--unit) * var(--sf));
3458
+ --app-overlay-areas: "banner" "." "header" "." "main" "." "footer";
3459
+ grid-template-columns: var(--app-cols);
3460
+ grid-template-rows: var(--app-rows);
3461
+ grid-template-areas: var(--app-areas);
3342
3462
  min-height: 100vh;
3343
3463
  background-color: transparent;
3344
- width: 100%;
3464
+ width: calc(240px * var(--sf, 1));
3465
+ max-width: calc(240px * var(--sf, 1));
3345
3466
  margin: 0 auto;
3346
- gap: 0;
3347
3467
  }
3348
3468
 
3349
- /* App mode - with scaling factor */
3350
- :host([mode="app"]) {
3351
- max-width: calc(400px * var(--sf, 1));
3352
- padding: calc(60px * var(--sf, 1)) calc(28px * var(--sf, 1))
3353
- calc(9.751px * var(--sf, 1));
3354
- gap: calc(28px * var(--sf, 1));
3469
+ :host([mode="app"]) .view-overlay {
3470
+ grid-template-columns: var(--app-overlay-cols);
3471
+ grid-template-rows: var(--app-overlay-rows);
3472
+ grid-template-areas: var(--app-overlay-areas);
3355
3473
  }
3356
3474
 
3357
- .debug-overlay {
3475
+ .view-overlay {
3358
3476
  position: absolute;
3359
3477
  margin-left: -1px;
3360
3478
  top: 0;
@@ -3364,129 +3482,114 @@ Layout.styles = i4`
3364
3482
  pointer-events: none;
3365
3483
  z-index: 1000;
3366
3484
  display: grid;
3367
- font-size: 18px;
3368
- font-weight: bold;
3369
- }
3370
-
3371
- :host([mode="portfolio"]) .debug-overlay {
3372
- grid-template-columns: 120px 480px;
3373
- grid-template-rows: 120px 120px 60px 180px 60px 120px 60px 20px 120px 120px;
3374
- grid-template-areas:
3375
- "square ."
3376
- ". title"
3377
- ". header"
3378
- ". projects"
3379
- ". ."
3380
- ". bio"
3381
- ". ."
3382
- ". nav"
3383
- ". ."
3384
- ". footer"
3385
- ". .";
3386
- }
3387
-
3388
- :host([mode="company"]) .debug-overlay {
3389
- grid-template-columns: auto 400px auto;
3390
- grid-template-rows: 80px 20px 20px 120px 20px 120px;
3391
- grid-template-areas:
3392
- ". . ."
3393
- ". header ."
3394
- ". . ."
3395
- ". content ."
3396
- ". . ."
3397
- ". footer .";
3398
- gap: 0;
3399
3485
  }
3400
3486
 
3401
- .debug-area {
3487
+ .view-area {
3402
3488
  display: flex;
3489
+ width: calc(240px * var(--sf, 1));
3490
+ height: 100%;
3403
3491
  align-items: center;
3404
3492
  justify-content: center;
3405
- font-size: 10px;
3406
- font-weight: var(--type-weight-default);
3407
3493
  font-family: var(--typeface-regular);
3408
- color: var(--black);
3409
- border: 1px solid red;
3494
+ font-size: calc(var(--type-size-default) * var(--05));
3495
+ color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3496
+ background-color: color-mix(
3497
+ in srgb,
3498
+ var(--accent-color) 25%,
3499
+ transparent
3500
+ );
3410
3501
  opacity: 1;
3411
3502
  }
3412
3503
 
3413
- .debug-square {
3504
+ :host([mode="portfolio"]) .view-area:nth-of-type(1) {
3505
+ background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3506
+ }
3507
+ :host([mode="portfolio"]) .view-area:nth-of-type(2) {
3508
+ border-color: var(--sharp-blue);
3509
+ }
3510
+ :host([mode="portfolio"]) .view-area:nth-of-type(3) {
3511
+ border-color: var(--yellow);
3512
+ }
3513
+ :host([mode="portfolio"]) .view-area:nth-of-type(4) {
3514
+ border-color: var(--apple-green);
3515
+ }
3516
+ :host([mode="portfolio"]) .view-area:nth-of-type(5) {
3517
+ border-color: var(--pink);
3518
+ }
3519
+ :host([mode="portfolio"]) .view-area:nth-of-type(6) {
3520
+ border-color: var(--orange);
3521
+ }
3522
+ :host([mode="portfolio"]) .view-area:nth-of-type(7) {
3523
+ border-color: var(--zenith-blue);
3524
+ }
3525
+
3526
+ :host([mode="company"]) .view-area:nth-of-type(1) {
3527
+ border-color: var(--tuned-red);
3528
+ }
3529
+ :host([mode="company"]) .view-area:nth-of-type(2) {
3530
+ border-color: var(--sharp-blue);
3531
+ }
3532
+ :host([mode="company"]) .view-area:nth-of-type(3) {
3533
+ border-color: var(--yellow);
3534
+ }
3535
+
3536
+ :host([mode="app"]) .view-area:nth-of-type(1) {
3537
+ background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3538
+ }
3539
+ :host([mode="app"]) .view-area:nth-of-type(2) {
3540
+ background-color: color-mix(in srgb, var(--sharp-blue) 25%, transparent);
3541
+ }
3542
+ :host([mode="app"]) .view-area:nth-of-type(3) {
3543
+ background-color: color-mix(in srgb, var(--yellow) 25%, transparent);
3544
+ }
3545
+ :host([mode="app"]) .view-area:nth-of-type(4) {
3546
+ background-color: color-mix(in srgb, var(--apple-green) 25%, transparent);
3547
+ }
3548
+
3549
+ .view-square {
3414
3550
  grid-area: square;
3415
3551
  }
3416
3552
 
3417
- .debug-title {
3553
+ .view-title {
3418
3554
  grid-area: title;
3419
3555
  }
3420
3556
 
3421
- .debug-header {
3557
+ .view-header {
3422
3558
  grid-area: header;
3423
- border-color: #0000ff;
3424
3559
  }
3425
3560
 
3426
- .debug-projects {
3561
+ .view-projects {
3427
3562
  grid-area: projects;
3428
- border-color: #ffff00;
3429
3563
  }
3430
3564
 
3431
- .debug-bio {
3565
+ .view-bio {
3432
3566
  grid-area: bio;
3433
- border-color: #ff00ff;
3434
3567
  }
3435
3568
 
3436
- .debug-nav {
3569
+ .view-nav {
3437
3570
  grid-area: nav;
3438
- border-color: #00ffff;
3439
3571
  }
3440
3572
 
3441
- .debug-footer {
3573
+ .view-footer {
3442
3574
  grid-area: footer;
3443
- border-color: rgb(24, 147, 73);
3444
- background-color: rgba(127, 123, 11, 0.1);
3445
3575
  }
3446
3576
 
3447
- .debug-content {
3577
+ .view-content {
3448
3578
  grid-area: content;
3449
- border-color: rgba(71, 231, 71, 0.63);
3450
- }
3451
-
3452
- :host([mode="app"]) .debug-overlay {
3453
- grid-template-columns: 1fr;
3454
- grid-template-rows:
3455
- calc(var(--1) * var(--sf))
3456
- calc(var(--2) * var(--sf))
3457
- calc(var(--4) * var(--sf))
3458
- calc(var(--1) * var(--sf));
3459
- grid-template-areas:
3460
- "banner"
3461
- "header"
3462
- "main"
3463
- "footer";
3464
3579
  }
3465
3580
 
3466
- .debug-banner {
3581
+ .view-banner {
3467
3582
  grid-area: banner;
3468
- border-color: #daed09;
3469
3583
  }
3470
3584
 
3471
- .debug-header {
3472
- grid-area: header;
3473
- border-color: #0000ff;
3474
- background-color: rgba(127, 123, 11, 0.5);
3475
- }
3476
-
3477
- .debug-main {
3585
+ .view-main {
3478
3586
  grid-area: main;
3479
- border-color: #0000ff;
3480
- }
3481
-
3482
- .debug-footer-app {
3483
- grid-area: footer;
3484
- border-color: #ffa500;
3485
3587
  }
3486
3588
  `;
3487
3589
  customElements.define("ds-layout", Layout);
3488
3590
  export {
3489
3591
  Button,
3592
+ Container,
3490
3593
  Cycle,
3491
3594
  DateComponent,
3492
3595
  DsTable,