@polyxd/react 0.2.2 → 0.3.0
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/NOTICE +13 -0
- package/README.md +15 -2
- package/dist/components/avatar.js +5 -36
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/chart.js +4 -87
- package/dist/components/chart.js.map +1 -1
- package/dist/components/content.d.ts +0 -8
- package/dist/components/content.js +27 -349
- package/dist/components/content.js.map +1 -1
- package/dist/components/filter.js +1 -1
- package/dist/components/filter.js.map +1 -1
- package/dist/components/flow.js +11 -85
- package/dist/components/flow.js.map +1 -1
- package/dist/components/index.js +6 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/inputs.d.ts +2 -12
- package/dist/components/inputs.js +5 -47
- package/dist/components/inputs.js.map +1 -1
- package/dist/components/marks.js +5 -20
- package/dist/components/marks.js.map +1 -1
- package/dist/components/navigation.d.ts +2 -0
- package/dist/components/navigation.js +31 -19
- package/dist/components/navigation.js.map +1 -1
- package/dist/components/pickers.js +12 -160
- package/dist/components/pickers.js.map +1 -1
- package/dist/components/shell.d.ts +41 -0
- package/dist/components/shell.js +190 -0
- package/dist/components/shell.js.map +1 -0
- package/dist/components/split.d.ts +11 -0
- package/dist/components/split.js +85 -0
- package/dist/components/split.js.map +1 -0
- package/dist/components/structure.d.ts +8 -0
- package/dist/components/structure.js +12 -1
- package/dist/components/structure.js.map +1 -1
- package/dist/components/table.js +10 -17
- package/dist/components/table.js.map +1 -1
- package/dist/components/tree.js +6 -57
- package/dist/components/tree.js.map +1 -1
- package/dist/context.d.ts +34 -46
- package/dist/context.js +10 -7
- package/dist/context.js.map +1 -1
- package/dist/data.d.ts +2 -26
- package/dist/data.js +2 -51
- package/dist/data.js.map +1 -1
- package/dist/format.d.ts +2 -14
- package/dist/format.js +2 -69
- package/dist/format.js.map +1 -1
- package/dist/frame.d.ts +19 -0
- package/dist/frame.js +21 -0
- package/dist/frame.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/skeleton.d.ts +2 -1
- package/dist/skeleton.js +9 -25
- package/dist/skeleton.js.map +1 -1
- package/dist/surface.d.ts +7 -3
- package/dist/surface.js +15 -13
- package/dist/surface.js.map +1 -1
- package/package.json +11 -6
- package/preview/polyxd.css +2 -0
- package/preview/polyxd.js +63 -0
- package/src/styles.css +611 -8
- package/themes/brutalist.css +300 -0
- package/themes/civic.css +300 -0
- package/themes/editorial.css +300 -0
- package/themes/finance.css +300 -0
- package/themes/glass.css +300 -0
- package/themes/health.css +300 -0
- package/themes/mono.css +300 -0
- package/themes/neon.css +300 -0
- package/themes/pastel.css +300 -0
- package/themes/sketch.css +356 -0
- package/themes/terminal.css +300 -0
- package/themes/wireframe.css +328 -0
package/src/styles.css
CHANGED
|
@@ -545,7 +545,7 @@
|
|
|
545
545
|
flex: none;
|
|
546
546
|
width: var(--pxd-size-icon-default);
|
|
547
547
|
height: var(--pxd-size-icon-default);
|
|
548
|
-
border-radius:
|
|
548
|
+
border-radius: var(--pxd-radius-full);
|
|
549
549
|
border: 3px solid var(--pxd-color-border-default);
|
|
550
550
|
border-top-color: var(--pxd-color-action-primary-background);
|
|
551
551
|
animation: pxd-spin 800ms linear infinite;
|
|
@@ -687,7 +687,7 @@ textarea.pxd-input {
|
|
|
687
687
|
cursor: pointer;
|
|
688
688
|
}
|
|
689
689
|
.pxd-radio {
|
|
690
|
-
border-radius:
|
|
690
|
+
border-radius: var(--pxd-radius-full);
|
|
691
691
|
}
|
|
692
692
|
.pxd-checkbox {
|
|
693
693
|
border-radius: var(--pxd-radius-small);
|
|
@@ -709,7 +709,7 @@ textarea.pxd-input {
|
|
|
709
709
|
display: block;
|
|
710
710
|
width: 12px;
|
|
711
711
|
height: 12px;
|
|
712
|
-
border-radius:
|
|
712
|
+
border-radius: var(--pxd-radius-full);
|
|
713
713
|
background: var(--pxd-color-action-primary-background);
|
|
714
714
|
}
|
|
715
715
|
.pxd-segmented {
|
|
@@ -779,7 +779,7 @@ textarea.pxd-input {
|
|
|
779
779
|
display: block;
|
|
780
780
|
width: 16px;
|
|
781
781
|
height: 16px;
|
|
782
|
-
border-radius:
|
|
782
|
+
border-radius: var(--pxd-radius-full);
|
|
783
783
|
background: var(--pxd-color-border-strong);
|
|
784
784
|
transform: translateX(2px);
|
|
785
785
|
transition: transform var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
|
|
@@ -824,7 +824,7 @@ textarea.pxd-input {
|
|
|
824
824
|
display: block;
|
|
825
825
|
width: 20px;
|
|
826
826
|
height: 20px;
|
|
827
|
-
border-radius:
|
|
827
|
+
border-radius: var(--pxd-radius-full);
|
|
828
828
|
background: var(--pxd-color-action-primary-background);
|
|
829
829
|
box-shadow: var(--pxd-shadow-raised);
|
|
830
830
|
cursor: grab;
|
|
@@ -943,6 +943,25 @@ textarea.pxd-input {
|
|
|
943
943
|
.pxd-portal {
|
|
944
944
|
display: contents;
|
|
945
945
|
}
|
|
946
|
+
/* The Web renderer's overlays are native <dialog> elements: the browser's own dialog box steps
|
|
947
|
+
aside (zero specificity, so every .pxd-* rule above and below still wins) and the scrim is the
|
|
948
|
+
surface's .pxd-overlay, not the backdrop. */
|
|
949
|
+
:where(.pxd-portal > dialog) {
|
|
950
|
+
border: 0;
|
|
951
|
+
margin: 0;
|
|
952
|
+
padding: 0;
|
|
953
|
+
inset: auto;
|
|
954
|
+
width: auto;
|
|
955
|
+
height: auto;
|
|
956
|
+
max-width: none;
|
|
957
|
+
max-height: none;
|
|
958
|
+
color: inherit;
|
|
959
|
+
background: transparent;
|
|
960
|
+
overflow: visible;
|
|
961
|
+
}
|
|
962
|
+
:where(.pxd-portal > dialog)::backdrop {
|
|
963
|
+
background: transparent;
|
|
964
|
+
}
|
|
946
965
|
.pxd-overlay {
|
|
947
966
|
position: fixed;
|
|
948
967
|
inset: 0;
|
|
@@ -1169,7 +1188,7 @@ textarea.pxd-input {
|
|
|
1169
1188
|
display: inline-flex;
|
|
1170
1189
|
align-items: center;
|
|
1171
1190
|
justify-content: center;
|
|
1172
|
-
border-radius:
|
|
1191
|
+
border-radius: var(--pxd-radius-full);
|
|
1173
1192
|
object-fit: cover;
|
|
1174
1193
|
font-weight: 600;
|
|
1175
1194
|
}
|
|
@@ -1223,7 +1242,7 @@ textarea.pxd-input {
|
|
|
1223
1242
|
justify-content: center;
|
|
1224
1243
|
width: 22px;
|
|
1225
1244
|
height: 22px;
|
|
1226
|
-
border-radius:
|
|
1245
|
+
border-radius: var(--pxd-radius-full);
|
|
1227
1246
|
border: 2px solid var(--pxd-color-surface-default);
|
|
1228
1247
|
background: var(--pxd-color-action-primary-background);
|
|
1229
1248
|
color: var(--pxd-color-action-primary-foreground);
|
|
@@ -2128,7 +2147,7 @@ textarea.pxd-input {
|
|
|
2128
2147
|
top: 10px;
|
|
2129
2148
|
width: 8px;
|
|
2130
2149
|
height: 8px;
|
|
2131
|
-
border-radius:
|
|
2150
|
+
border-radius: var(--pxd-radius-full);
|
|
2132
2151
|
background: var(--pxd-color-border-strong);
|
|
2133
2152
|
}
|
|
2134
2153
|
.pxd-status-notice {
|
|
@@ -2257,8 +2276,16 @@ textarea.pxd-input {
|
|
|
2257
2276
|
.pxd-detail-row-action {
|
|
2258
2277
|
text-align: end;
|
|
2259
2278
|
}
|
|
2279
|
+
/* A link-styled button still needs a full-size target; padding keeps the text on the baseline. */
|
|
2260
2280
|
.pxd-detail-change {
|
|
2261
2281
|
white-space: nowrap;
|
|
2282
|
+
display: inline-flex;
|
|
2283
|
+
align-items: center;
|
|
2284
|
+
min-height: var(--pxd-size-target-min);
|
|
2285
|
+
margin: calc((var(--pxd-size-target-min) - 1.5em) / -2) 0;
|
|
2286
|
+
}
|
|
2287
|
+
.pxd-detail-actions .pxd-detail-row {
|
|
2288
|
+
align-items: center;
|
|
2262
2289
|
}
|
|
2263
2290
|
|
|
2264
2291
|
/* Collection: carousel */
|
|
@@ -4407,3 +4434,579 @@ video.pxd-media {
|
|
|
4407
4434
|
opacity: var(--pxd-opacity-state-disabled);
|
|
4408
4435
|
cursor: not-allowed;
|
|
4409
4436
|
}
|
|
4437
|
+
|
|
4438
|
+
/* ==== The shell (spec 0.3): Frame, AppBar, Navigation placements, Outlet, Footer, Custom ==== */
|
|
4439
|
+
|
|
4440
|
+
/* ---- Frame ---- */
|
|
4441
|
+
/* A shell is the product around its screens, so the surface's own padding and stack go: the
|
|
4442
|
+
Frame lays out its regions on its own width (data-pxd-layout) and the screens keep theirs.
|
|
4443
|
+
The frame fills the viewport unless the host says otherwise. */
|
|
4444
|
+
.pxd-surface-shell {
|
|
4445
|
+
display: flex;
|
|
4446
|
+
flex-direction: column;
|
|
4447
|
+
min-height: 100dvh;
|
|
4448
|
+
padding: 0;
|
|
4449
|
+
gap: 0;
|
|
4450
|
+
}
|
|
4451
|
+
.pxd-frame {
|
|
4452
|
+
/* How much of the top a sticky AppBar keeps, so a sticky navigation starts below it. */
|
|
4453
|
+
--polyxd-appbar-height: 0px;
|
|
4454
|
+
position: relative;
|
|
4455
|
+
flex: 1 1 auto;
|
|
4456
|
+
display: flex;
|
|
4457
|
+
flex-direction: column;
|
|
4458
|
+
min-width: 0;
|
|
4459
|
+
}
|
|
4460
|
+
.pxd-frame[data-pxd-appbar="standard"],
|
|
4461
|
+
.pxd-frame[data-pxd-appbar="large"] {
|
|
4462
|
+
--polyxd-appbar-height: 64px;
|
|
4463
|
+
}
|
|
4464
|
+
.pxd-frame[data-pxd-appbar="compact"] {
|
|
4465
|
+
--polyxd-appbar-height: 48px;
|
|
4466
|
+
}
|
|
4467
|
+
.pxd-frame:not([data-pxd-layout="compact"])[data-pxd-appbar="large"] {
|
|
4468
|
+
--polyxd-appbar-height: 120px;
|
|
4469
|
+
}
|
|
4470
|
+
/* The first focusable thing: off the top until it has focus, then a button over the header. */
|
|
4471
|
+
.pxd-skip-link {
|
|
4472
|
+
position: absolute;
|
|
4473
|
+
top: var(--pxd-space-inset-compact);
|
|
4474
|
+
inset-inline-start: var(--pxd-space-inset-compact);
|
|
4475
|
+
z-index: 8;
|
|
4476
|
+
display: inline-flex;
|
|
4477
|
+
align-items: center;
|
|
4478
|
+
min-height: var(--pxd-size-target-min);
|
|
4479
|
+
padding: 0 var(--pxd-space-inset-default);
|
|
4480
|
+
border-radius: var(--pxd-radius-control);
|
|
4481
|
+
background: var(--pxd-color-action-primary-background);
|
|
4482
|
+
color: var(--pxd-color-action-primary-foreground);
|
|
4483
|
+
font-family: var(--pxd-type-label-default-family);
|
|
4484
|
+
font-size: var(--pxd-type-label-default-size);
|
|
4485
|
+
font-weight: var(--pxd-type-label-default-weight);
|
|
4486
|
+
text-decoration: none;
|
|
4487
|
+
white-space: nowrap;
|
|
4488
|
+
transform: translateY(calc(-100% - var(--pxd-space-inset-comfortable) * 2));
|
|
4489
|
+
}
|
|
4490
|
+
.pxd-skip-link:focus-visible {
|
|
4491
|
+
transform: none;
|
|
4492
|
+
}
|
|
4493
|
+
.pxd-frame-banner .pxd-status {
|
|
4494
|
+
border-radius: 0;
|
|
4495
|
+
}
|
|
4496
|
+
/* Regions: navigation at the start, main beside it, an aside after; the footer below all.
|
|
4497
|
+
Wide keeps the three in one row; medium stacks the aside under main; compact stacks
|
|
4498
|
+
everything, with the navigation last on screen (a bottom bar) but still before main in
|
|
4499
|
+
reading order. */
|
|
4500
|
+
.pxd-frame-body {
|
|
4501
|
+
flex: 1 1 auto;
|
|
4502
|
+
display: grid;
|
|
4503
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
4504
|
+
grid-template-rows: minmax(0, 1fr);
|
|
4505
|
+
grid-template-areas: "nav main";
|
|
4506
|
+
align-items: stretch;
|
|
4507
|
+
}
|
|
4508
|
+
.pxd-frame-body:has(> .pxd-frame-aside) {
|
|
4509
|
+
grid-template-columns: auto minmax(0, 1fr) minmax(16rem, 20rem);
|
|
4510
|
+
grid-template-areas: "nav main aside";
|
|
4511
|
+
}
|
|
4512
|
+
.pxd-frame[data-pxd-layout="medium"] .pxd-frame-body:has(> .pxd-frame-aside) {
|
|
4513
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
4514
|
+
grid-template-rows: minmax(0, 1fr) auto;
|
|
4515
|
+
grid-template-areas: "nav main" "nav aside";
|
|
4516
|
+
}
|
|
4517
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-frame-body,
|
|
4518
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-frame-body:has(> .pxd-frame-aside) {
|
|
4519
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4520
|
+
grid-template-rows: minmax(0, 1fr) auto auto;
|
|
4521
|
+
grid-template-areas: "main" "aside" "nav";
|
|
4522
|
+
}
|
|
4523
|
+
.pxd-frame-nav {
|
|
4524
|
+
grid-area: nav;
|
|
4525
|
+
min-width: 0;
|
|
4526
|
+
background: var(--pxd-color-surface-subtle);
|
|
4527
|
+
border-inline-end: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4528
|
+
}
|
|
4529
|
+
/* A drawer lives in the portal; its slot takes no room (an empty slot is a closed drawer). */
|
|
4530
|
+
.pxd-frame[data-pxd-nav="drawer"] .pxd-frame-nav {
|
|
4531
|
+
border: 0;
|
|
4532
|
+
background: transparent;
|
|
4533
|
+
}
|
|
4534
|
+
.pxd-frame[data-pxd-nav="drawer"] .pxd-frame-nav:empty {
|
|
4535
|
+
display: none;
|
|
4536
|
+
}
|
|
4537
|
+
.pxd-frame-main {
|
|
4538
|
+
grid-area: main;
|
|
4539
|
+
min-width: 0;
|
|
4540
|
+
width: 100%;
|
|
4541
|
+
background: var(--pxd-color-surface-default);
|
|
4542
|
+
}
|
|
4543
|
+
/* 'contained' centres main at measure.max × 1.6 (about 104 characters); 'full' uses everything. */
|
|
4544
|
+
.pxd-frame-width-contained .pxd-frame-main {
|
|
4545
|
+
max-width: calc(var(--pxd-measure-max) * 1.6ch);
|
|
4546
|
+
justify-self: center;
|
|
4547
|
+
}
|
|
4548
|
+
.pxd-frame-aside {
|
|
4549
|
+
grid-area: aside;
|
|
4550
|
+
min-width: 0;
|
|
4551
|
+
padding: var(--pxd-space-inset-comfortable);
|
|
4552
|
+
border-inline-start: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4553
|
+
background: var(--pxd-color-surface-subtle);
|
|
4554
|
+
}
|
|
4555
|
+
.pxd-frame[data-pxd-layout="medium"] .pxd-frame-aside,
|
|
4556
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-frame-aside {
|
|
4557
|
+
border-inline-start: 0;
|
|
4558
|
+
border-top: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4559
|
+
}
|
|
4560
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-frame-aside {
|
|
4561
|
+
padding: var(--pxd-space-inset-default);
|
|
4562
|
+
}
|
|
4563
|
+
|
|
4564
|
+
/* ---- Navigation placements ---- */
|
|
4565
|
+
/* Side (240px) and rail (80px) stay in view while the screen scrolls, below a sticky AppBar. */
|
|
4566
|
+
.pxd-nav-side,
|
|
4567
|
+
.pxd-nav-rail {
|
|
4568
|
+
position: sticky;
|
|
4569
|
+
top: var(--polyxd-appbar-height);
|
|
4570
|
+
max-height: calc(100dvh - var(--polyxd-appbar-height));
|
|
4571
|
+
overflow-y: auto;
|
|
4572
|
+
}
|
|
4573
|
+
.pxd-nav-side {
|
|
4574
|
+
width: 240px;
|
|
4575
|
+
padding: var(--pxd-space-inset-default) var(--pxd-space-inset-compact);
|
|
4576
|
+
}
|
|
4577
|
+
.pxd-nav-rail {
|
|
4578
|
+
width: 80px;
|
|
4579
|
+
padding: var(--pxd-space-stack-loose) 0;
|
|
4580
|
+
}
|
|
4581
|
+
.pxd-nav-rail ul {
|
|
4582
|
+
display: flex;
|
|
4583
|
+
flex-direction: column;
|
|
4584
|
+
gap: var(--pxd-space-stack-tight);
|
|
4585
|
+
}
|
|
4586
|
+
.pxd-nav-rail-item,
|
|
4587
|
+
.pxd-nav-bar-item {
|
|
4588
|
+
display: flex;
|
|
4589
|
+
flex-direction: column;
|
|
4590
|
+
align-items: center;
|
|
4591
|
+
justify-content: center;
|
|
4592
|
+
gap: var(--pxd-space-stack-tight);
|
|
4593
|
+
width: 100%;
|
|
4594
|
+
min-height: 56px;
|
|
4595
|
+
padding: var(--pxd-space-stack-tight) 0;
|
|
4596
|
+
border: 0;
|
|
4597
|
+
background: transparent;
|
|
4598
|
+
color: var(--pxd-color-text-muted);
|
|
4599
|
+
font-family: var(--pxd-type-label-small-family);
|
|
4600
|
+
font-size: var(--pxd-type-label-small-size);
|
|
4601
|
+
font-weight: var(--pxd-type-label-small-weight);
|
|
4602
|
+
line-height: var(--pxd-type-label-small-line-height);
|
|
4603
|
+
letter-spacing: var(--pxd-type-label-small-letter-spacing);
|
|
4604
|
+
cursor: pointer;
|
|
4605
|
+
}
|
|
4606
|
+
.pxd-nav-rail-icon,
|
|
4607
|
+
.pxd-nav-bar-icon {
|
|
4608
|
+
position: relative;
|
|
4609
|
+
display: inline-flex;
|
|
4610
|
+
align-items: center;
|
|
4611
|
+
justify-content: center;
|
|
4612
|
+
width: 56px;
|
|
4613
|
+
height: 32px;
|
|
4614
|
+
border-radius: var(--pxd-radius-full);
|
|
4615
|
+
transition: background var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
|
|
4616
|
+
}
|
|
4617
|
+
.pxd-nav-rail-item:hover .pxd-nav-rail-icon,
|
|
4618
|
+
.pxd-nav-bar-item:hover .pxd-nav-bar-icon {
|
|
4619
|
+
background: color-mix(in srgb, var(--pxd-color-text-default) calc(var(--pxd-opacity-state-hover) * 100%), transparent);
|
|
4620
|
+
}
|
|
4621
|
+
/* The current item: the icon in a selection pill, the label in the default text colour. */
|
|
4622
|
+
.pxd-nav-rail-item.pxd-nav-current,
|
|
4623
|
+
.pxd-nav-bar-item.pxd-nav-current {
|
|
4624
|
+
background: transparent;
|
|
4625
|
+
color: var(--pxd-color-text-default);
|
|
4626
|
+
font-weight: var(--pxd-type-label-small-weight);
|
|
4627
|
+
}
|
|
4628
|
+
.pxd-nav-rail-item.pxd-nav-current .pxd-nav-rail-icon,
|
|
4629
|
+
.pxd-nav-bar-item.pxd-nav-current .pxd-nav-bar-icon {
|
|
4630
|
+
background: var(--pxd-color-selection-background);
|
|
4631
|
+
color: var(--pxd-color-selection-foreground);
|
|
4632
|
+
}
|
|
4633
|
+
.pxd-nav-rail .pxd-nav-label,
|
|
4634
|
+
.pxd-nav-bar .pxd-nav-label {
|
|
4635
|
+
flex: none;
|
|
4636
|
+
max-width: 100%;
|
|
4637
|
+
overflow: hidden;
|
|
4638
|
+
text-overflow: ellipsis;
|
|
4639
|
+
white-space: nowrap;
|
|
4640
|
+
text-align: center;
|
|
4641
|
+
}
|
|
4642
|
+
.pxd-nav-glyph {
|
|
4643
|
+
font-family: var(--pxd-type-label-default-family);
|
|
4644
|
+
font-size: var(--pxd-type-label-default-size);
|
|
4645
|
+
font-weight: var(--pxd-type-label-default-weight);
|
|
4646
|
+
}
|
|
4647
|
+
.pxd-nav-rail-icon .pxd-nav-badge,
|
|
4648
|
+
.pxd-nav-bar-icon .pxd-nav-badge {
|
|
4649
|
+
position: absolute;
|
|
4650
|
+
top: 0;
|
|
4651
|
+
inset-inline-start: calc(50% + 4px);
|
|
4652
|
+
min-width: 16px;
|
|
4653
|
+
height: 16px;
|
|
4654
|
+
padding: 0 var(--pxd-space-inline-tight);
|
|
4655
|
+
line-height: 16px;
|
|
4656
|
+
}
|
|
4657
|
+
/* Bar: 80px along the bottom, above the safe area; the slot sticks to the bottom of the view. */
|
|
4658
|
+
.pxd-frame[data-pxd-nav="bar"] .pxd-frame-nav {
|
|
4659
|
+
position: sticky;
|
|
4660
|
+
bottom: 0;
|
|
4661
|
+
z-index: 5;
|
|
4662
|
+
border-inline-end: 0;
|
|
4663
|
+
border-top: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4664
|
+
}
|
|
4665
|
+
.pxd-nav-bar {
|
|
4666
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
4667
|
+
}
|
|
4668
|
+
.pxd-nav-bar ul {
|
|
4669
|
+
display: flex;
|
|
4670
|
+
height: 80px;
|
|
4671
|
+
}
|
|
4672
|
+
.pxd-nav-bar li {
|
|
4673
|
+
flex: 1 1 0;
|
|
4674
|
+
min-width: 0;
|
|
4675
|
+
}
|
|
4676
|
+
.pxd-nav-bar-item {
|
|
4677
|
+
height: 100%;
|
|
4678
|
+
padding-inline: var(--pxd-space-inline-tight);
|
|
4679
|
+
}
|
|
4680
|
+
|
|
4681
|
+
/* ---- AppBar ---- */
|
|
4682
|
+
.pxd-appbar-sentinel {
|
|
4683
|
+
height: 0;
|
|
4684
|
+
}
|
|
4685
|
+
.pxd-appbar {
|
|
4686
|
+
display: flex;
|
|
4687
|
+
flex-direction: column;
|
|
4688
|
+
z-index: 6;
|
|
4689
|
+
background: var(--pxd-color-surface-default);
|
|
4690
|
+
border-bottom: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4691
|
+
transition: box-shadow var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
|
|
4692
|
+
}
|
|
4693
|
+
.pxd-appbar-sticky {
|
|
4694
|
+
position: sticky;
|
|
4695
|
+
top: 0;
|
|
4696
|
+
}
|
|
4697
|
+
.pxd-appbar[data-pxd-scrolled] {
|
|
4698
|
+
box-shadow: var(--pxd-shadow-raised);
|
|
4699
|
+
}
|
|
4700
|
+
.pxd-appbar-row {
|
|
4701
|
+
display: flex;
|
|
4702
|
+
align-items: center;
|
|
4703
|
+
gap: var(--pxd-space-inline-default);
|
|
4704
|
+
min-height: 64px;
|
|
4705
|
+
padding: 0 var(--pxd-space-inset-default);
|
|
4706
|
+
}
|
|
4707
|
+
.pxd-appbar-compact .pxd-appbar-row {
|
|
4708
|
+
min-height: 48px;
|
|
4709
|
+
}
|
|
4710
|
+
.pxd-appbar-headline {
|
|
4711
|
+
display: flex;
|
|
4712
|
+
align-items: flex-end;
|
|
4713
|
+
min-height: 56px;
|
|
4714
|
+
padding: 0 var(--pxd-space-inset-comfortable) var(--pxd-space-stack-default);
|
|
4715
|
+
font-family: var(--pxd-type-title-page-family);
|
|
4716
|
+
font-size: var(--pxd-type-title-page-size);
|
|
4717
|
+
font-weight: var(--pxd-type-title-page-weight);
|
|
4718
|
+
line-height: var(--pxd-type-title-page-line-height);
|
|
4719
|
+
letter-spacing: var(--pxd-type-title-page-letter-spacing);
|
|
4720
|
+
}
|
|
4721
|
+
.pxd-appbar-leading,
|
|
4722
|
+
.pxd-appbar-menu {
|
|
4723
|
+
flex: none;
|
|
4724
|
+
}
|
|
4725
|
+
.pxd-appbar-brand {
|
|
4726
|
+
display: flex;
|
|
4727
|
+
align-items: center;
|
|
4728
|
+
gap: var(--pxd-space-inline-default);
|
|
4729
|
+
min-width: 0;
|
|
4730
|
+
}
|
|
4731
|
+
.pxd-appbar-title {
|
|
4732
|
+
font-family: var(--pxd-type-title-section-family);
|
|
4733
|
+
font-size: var(--pxd-type-title-section-size);
|
|
4734
|
+
font-weight: var(--pxd-type-title-section-weight);
|
|
4735
|
+
line-height: var(--pxd-type-title-section-line-height);
|
|
4736
|
+
letter-spacing: var(--pxd-type-title-section-letter-spacing);
|
|
4737
|
+
white-space: nowrap;
|
|
4738
|
+
overflow: hidden;
|
|
4739
|
+
text-overflow: ellipsis;
|
|
4740
|
+
}
|
|
4741
|
+
.pxd-appbar-logo {
|
|
4742
|
+
display: block;
|
|
4743
|
+
height: 32px;
|
|
4744
|
+
width: auto;
|
|
4745
|
+
}
|
|
4746
|
+
.pxd-appbar-mark {
|
|
4747
|
+
display: inline-flex;
|
|
4748
|
+
align-items: center;
|
|
4749
|
+
justify-content: center;
|
|
4750
|
+
flex: none;
|
|
4751
|
+
width: 32px;
|
|
4752
|
+
height: 32px;
|
|
4753
|
+
border-radius: var(--pxd-radius-small);
|
|
4754
|
+
background: var(--pxd-color-action-primary-background);
|
|
4755
|
+
color: var(--pxd-color-action-primary-foreground);
|
|
4756
|
+
font-family: var(--pxd-type-label-small-family);
|
|
4757
|
+
font-size: var(--pxd-type-label-small-size);
|
|
4758
|
+
font-weight: var(--pxd-type-label-small-weight);
|
|
4759
|
+
}
|
|
4760
|
+
/* Search grows in the middle on wide layouts; on compact it opens from an icon on its own row. */
|
|
4761
|
+
.pxd-appbar-search {
|
|
4762
|
+
flex: 1 1 auto;
|
|
4763
|
+
min-width: 0;
|
|
4764
|
+
max-width: 40rem;
|
|
4765
|
+
margin-inline: auto;
|
|
4766
|
+
}
|
|
4767
|
+
.pxd-appbar-search .pxd-field-label,
|
|
4768
|
+
.pxd-appbar-search .pxd-label {
|
|
4769
|
+
position: absolute;
|
|
4770
|
+
width: 1px;
|
|
4771
|
+
height: 1px;
|
|
4772
|
+
overflow: hidden;
|
|
4773
|
+
clip: rect(0 0 0 0);
|
|
4774
|
+
white-space: nowrap;
|
|
4775
|
+
}
|
|
4776
|
+
.pxd-appbar-search-toggle {
|
|
4777
|
+
flex: none;
|
|
4778
|
+
margin-inline-start: auto;
|
|
4779
|
+
}
|
|
4780
|
+
.pxd-appbar-search-row {
|
|
4781
|
+
flex: none;
|
|
4782
|
+
width: 100%;
|
|
4783
|
+
max-width: none;
|
|
4784
|
+
padding: 0 var(--pxd-space-inset-default) var(--pxd-space-inset-compact);
|
|
4785
|
+
}
|
|
4786
|
+
.pxd-appbar-end {
|
|
4787
|
+
display: flex;
|
|
4788
|
+
align-items: center;
|
|
4789
|
+
gap: var(--pxd-space-inline-default);
|
|
4790
|
+
flex: none;
|
|
4791
|
+
margin-inline-start: auto;
|
|
4792
|
+
}
|
|
4793
|
+
.pxd-appbar-search + .pxd-appbar-end,
|
|
4794
|
+
.pxd-appbar-search-toggle + .pxd-appbar-end {
|
|
4795
|
+
margin-inline-start: 0;
|
|
4796
|
+
}
|
|
4797
|
+
/* The bar's actions stay in one row whatever the width; the ActionBar folds the rest away. */
|
|
4798
|
+
.pxd-appbar .pxd-action-bar {
|
|
4799
|
+
flex-direction: row-reverse;
|
|
4800
|
+
flex-wrap: nowrap;
|
|
4801
|
+
align-items: center;
|
|
4802
|
+
}
|
|
4803
|
+
.pxd-appbar-account {
|
|
4804
|
+
display: flex;
|
|
4805
|
+
align-items: center;
|
|
4806
|
+
}
|
|
4807
|
+
.pxd-appbar-account .pxd-identity-name,
|
|
4808
|
+
.pxd-appbar-account .pxd-identity-detail {
|
|
4809
|
+
display: none;
|
|
4810
|
+
}
|
|
4811
|
+
.pxd-appbar-account .pxd-identity-button {
|
|
4812
|
+
margin: 0;
|
|
4813
|
+
min-width: var(--pxd-size-target-min);
|
|
4814
|
+
justify-content: center;
|
|
4815
|
+
}
|
|
4816
|
+
|
|
4817
|
+
/* ---- Outlet ---- */
|
|
4818
|
+
.pxd-outlet {
|
|
4819
|
+
display: flex;
|
|
4820
|
+
flex-direction: column;
|
|
4821
|
+
gap: var(--pxd-space-stack-loose);
|
|
4822
|
+
min-width: 0;
|
|
4823
|
+
padding: var(--pxd-space-inset-comfortable);
|
|
4824
|
+
outline: none;
|
|
4825
|
+
}
|
|
4826
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-outlet {
|
|
4827
|
+
padding: var(--pxd-space-inset-default);
|
|
4828
|
+
}
|
|
4829
|
+
.pxd-outlet:focus-visible {
|
|
4830
|
+
outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
|
|
4831
|
+
outline-offset: calc(-1 * var(--pxd-focus-ring-width));
|
|
4832
|
+
}
|
|
4833
|
+
/* A screen document inside the outlet is a screen, not a second frame: no padding of its own. */
|
|
4834
|
+
.pxd-outlet > .pxd-surface {
|
|
4835
|
+
padding: 0;
|
|
4836
|
+
}
|
|
4837
|
+
.pxd-outlet-skeleton {
|
|
4838
|
+
padding: 0;
|
|
4839
|
+
}
|
|
4840
|
+
|
|
4841
|
+
/* ---- Footer ---- */
|
|
4842
|
+
.pxd-footer {
|
|
4843
|
+
display: flex;
|
|
4844
|
+
flex-direction: column;
|
|
4845
|
+
gap: var(--pxd-space-stack-loose);
|
|
4846
|
+
padding: var(--pxd-space-inset-comfortable);
|
|
4847
|
+
border-top: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4848
|
+
background: var(--pxd-color-surface-subtle);
|
|
4849
|
+
}
|
|
4850
|
+
.pxd-footer-groups {
|
|
4851
|
+
display: grid;
|
|
4852
|
+
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
|
|
4853
|
+
gap: var(--pxd-space-stack-loose) var(--pxd-space-inline-loose);
|
|
4854
|
+
}
|
|
4855
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-footer {
|
|
4856
|
+
padding: var(--pxd-space-inset-default);
|
|
4857
|
+
}
|
|
4858
|
+
.pxd-frame[data-pxd-layout="compact"] .pxd-footer-groups {
|
|
4859
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4860
|
+
}
|
|
4861
|
+
.pxd-footer-group ul {
|
|
4862
|
+
display: flex;
|
|
4863
|
+
flex-direction: column;
|
|
4864
|
+
}
|
|
4865
|
+
.pxd-footer-heading {
|
|
4866
|
+
margin: 0 0 var(--pxd-space-stack-default);
|
|
4867
|
+
font-family: var(--pxd-type-label-default-family);
|
|
4868
|
+
font-size: var(--pxd-type-label-default-size);
|
|
4869
|
+
font-weight: var(--pxd-type-label-default-weight);
|
|
4870
|
+
line-height: var(--pxd-type-label-default-line-height);
|
|
4871
|
+
letter-spacing: var(--pxd-type-label-default-letter-spacing);
|
|
4872
|
+
}
|
|
4873
|
+
/* Links in the default text colour: the link colour is only guaranteed on surface.default and the
|
|
4874
|
+
footer sits on surface.subtle. Each is a full target tall, so a thumb reaches one at a time. */
|
|
4875
|
+
.pxd-footer-link {
|
|
4876
|
+
display: inline-flex;
|
|
4877
|
+
align-items: center;
|
|
4878
|
+
justify-content: flex-start;
|
|
4879
|
+
min-width: var(--polyxd-control);
|
|
4880
|
+
min-height: var(--polyxd-control);
|
|
4881
|
+
color: var(--pxd-color-text-default);
|
|
4882
|
+
}
|
|
4883
|
+
.pxd-footer-legal {
|
|
4884
|
+
display: flex;
|
|
4885
|
+
flex-wrap: wrap;
|
|
4886
|
+
align-items: center;
|
|
4887
|
+
justify-content: space-between;
|
|
4888
|
+
gap: var(--pxd-space-stack-default) var(--pxd-space-inline-loose);
|
|
4889
|
+
color: var(--pxd-color-text-muted);
|
|
4890
|
+
font-family: var(--pxd-type-body-small-family);
|
|
4891
|
+
font-size: var(--pxd-type-body-small-size);
|
|
4892
|
+
line-height: var(--pxd-type-body-small-line-height);
|
|
4893
|
+
}
|
|
4894
|
+
.pxd-footer-legal-text {
|
|
4895
|
+
margin: 0;
|
|
4896
|
+
}
|
|
4897
|
+
.pxd-footer-aside {
|
|
4898
|
+
display: flex;
|
|
4899
|
+
align-items: center;
|
|
4900
|
+
gap: var(--pxd-space-inline-default);
|
|
4901
|
+
}
|
|
4902
|
+
|
|
4903
|
+
/* ---- Custom ---- */
|
|
4904
|
+
/* A named slot only wraps when it has a label to give; otherwise the host's element stands alone. */
|
|
4905
|
+
.pxd-custom {
|
|
4906
|
+
display: contents;
|
|
4907
|
+
}
|
|
4908
|
+
|
|
4909
|
+
/* ---- Columns ---- */
|
|
4910
|
+
/* Side-by-side on the surface's width, a stack below the collapse point; the children's order
|
|
4911
|
+
is the reading order either way. */
|
|
4912
|
+
.pxd-columns {
|
|
4913
|
+
display: grid;
|
|
4914
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
|
|
4915
|
+
gap: var(--pxd-space-stack-loose) var(--pxd-space-inline-loose);
|
|
4916
|
+
align-items: stretch;
|
|
4917
|
+
}
|
|
4918
|
+
.pxd-columns-one-third { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); }
|
|
4919
|
+
.pxd-columns-halves { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
4920
|
+
.pxd-columns-thirds { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
4921
|
+
.pxd-columns-sidebar-start { grid-template-columns: minmax(16rem, 18rem) minmax(0, 1fr); }
|
|
4922
|
+
.pxd-columns-sidebar-end { grid-template-columns: minmax(0, 1fr) minmax(16rem, 18rem); }
|
|
4923
|
+
.pxd-columns-align-start { align-items: start; }
|
|
4924
|
+
.pxd-columns-align-center { align-items: center; }
|
|
4925
|
+
.pxd-columns > * {
|
|
4926
|
+
min-width: 0;
|
|
4927
|
+
}
|
|
4928
|
+
@container pxd (width < 40rem) {
|
|
4929
|
+
.pxd-columns-collapse-compact {
|
|
4930
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4931
|
+
}
|
|
4932
|
+
}
|
|
4933
|
+
@container pxd (width < 64rem) {
|
|
4934
|
+
.pxd-columns-collapse-medium {
|
|
4935
|
+
grid-template-columns: minmax(0, 1fr);
|
|
4936
|
+
}
|
|
4937
|
+
}
|
|
4938
|
+
|
|
4939
|
+
/* ---- Split ---- */
|
|
4940
|
+
/* Two panes with a border between; the list scrolls on its own. The list's share follows the
|
|
4941
|
+
ratio, or the handle when the split is resizable. Compact shows one pane at a time. */
|
|
4942
|
+
.pxd-split {
|
|
4943
|
+
--polyxd-split-share: 33.333%;
|
|
4944
|
+
display: grid;
|
|
4945
|
+
grid-template-columns: minmax(16rem, 1fr) minmax(0, 2fr);
|
|
4946
|
+
align-items: stretch;
|
|
4947
|
+
min-height: 0;
|
|
4948
|
+
border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4949
|
+
border-radius: var(--pxd-radius-default);
|
|
4950
|
+
overflow: hidden;
|
|
4951
|
+
}
|
|
4952
|
+
.pxd-split-balanced { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
4953
|
+
.pxd-split-wide { grid-template-columns: minmax(0, 2fr) minmax(16rem, 1fr); }
|
|
4954
|
+
.pxd-split-resizable {
|
|
4955
|
+
grid-template-columns: var(--polyxd-split-share) var(--pxd-size-target-min) minmax(0, 1fr);
|
|
4956
|
+
}
|
|
4957
|
+
.pxd-split-primary {
|
|
4958
|
+
min-width: 0;
|
|
4959
|
+
max-height: 100%;
|
|
4960
|
+
overflow-y: auto;
|
|
4961
|
+
padding: var(--pxd-space-inset-default);
|
|
4962
|
+
border-inline-end: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
|
|
4963
|
+
}
|
|
4964
|
+
.pxd-split-resizable .pxd-split-primary {
|
|
4965
|
+
border-inline-end: 0;
|
|
4966
|
+
}
|
|
4967
|
+
.pxd-split-detail {
|
|
4968
|
+
display: flex;
|
|
4969
|
+
flex-direction: column;
|
|
4970
|
+
gap: var(--pxd-space-stack-loose);
|
|
4971
|
+
min-width: 0;
|
|
4972
|
+
padding: var(--pxd-space-inset-comfortable);
|
|
4973
|
+
outline: none;
|
|
4974
|
+
}
|
|
4975
|
+
.pxd-split-detail:focus-visible {
|
|
4976
|
+
outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
|
|
4977
|
+
outline-offset: calc(-1 * var(--pxd-focus-ring-width));
|
|
4978
|
+
}
|
|
4979
|
+
/* The handle is a full target wide, the line it draws is one border wide. */
|
|
4980
|
+
.pxd-split-handle {
|
|
4981
|
+
display: flex;
|
|
4982
|
+
align-items: stretch;
|
|
4983
|
+
justify-content: center;
|
|
4984
|
+
cursor: col-resize;
|
|
4985
|
+
touch-action: none;
|
|
4986
|
+
}
|
|
4987
|
+
.pxd-split-handle-line {
|
|
4988
|
+
width: var(--pxd-border-width-default);
|
|
4989
|
+
background: var(--pxd-color-border-default);
|
|
4990
|
+
transition: background var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
|
|
4991
|
+
}
|
|
4992
|
+
.pxd-split-handle:hover .pxd-split-handle-line {
|
|
4993
|
+
width: var(--pxd-border-width-strong);
|
|
4994
|
+
background: var(--pxd-color-border-strong);
|
|
4995
|
+
}
|
|
4996
|
+
.pxd-split-handle:focus-visible {
|
|
4997
|
+
outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
|
|
4998
|
+
outline-offset: calc(-1 * var(--pxd-focus-ring-width));
|
|
4999
|
+
}
|
|
5000
|
+
.pxd-split-compact {
|
|
5001
|
+
grid-template-columns: minmax(0, 1fr);
|
|
5002
|
+
}
|
|
5003
|
+
.pxd-split-compact .pxd-split-primary {
|
|
5004
|
+
border-inline-end: 0;
|
|
5005
|
+
max-height: none;
|
|
5006
|
+
}
|
|
5007
|
+
.pxd-split-compact .pxd-split-detail {
|
|
5008
|
+
padding: var(--pxd-space-inset-default);
|
|
5009
|
+
}
|
|
5010
|
+
.pxd-split-back {
|
|
5011
|
+
align-self: flex-start;
|
|
5012
|
+
}
|