@capillaryjs/capillary-ui 1.0.0-alpha.1 → 1.1.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.
Files changed (59) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +88 -18
  3. package/dist/Components/Placeholder.d.ts.map +1 -1
  4. package/dist/Components/component.d.ts +6 -0
  5. package/dist/Components/component.d.ts.map +1 -1
  6. package/dist/Components/data/listview/listview.d.ts +4 -3
  7. package/dist/Components/data/listview/listview.d.ts.map +1 -1
  8. package/dist/Components/data/selectionhandler.d.ts +1 -0
  9. package/dist/Components/data/selectionhandler.d.ts.map +1 -1
  10. package/dist/Components/data/table/DataTable.d.ts +1 -0
  11. package/dist/Components/data/table/DataTable.d.ts.map +1 -1
  12. package/dist/Components/data/table/TableHeader.d.ts.map +1 -1
  13. package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -1
  14. package/dist/Components/data/table/tableDataSource.d.ts +7 -1
  15. package/dist/Components/data/table/tableDataSource.d.ts.map +1 -1
  16. package/dist/Components/data/treeview/treeview.d.ts +3 -2
  17. package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
  18. package/dist/Components/layout/groupBox.d.ts +4 -0
  19. package/dist/Components/layout/groupBox.d.ts.map +1 -1
  20. package/dist/Components/layout/header.d.ts.map +1 -1
  21. package/dist/Components/layout/panel.d.ts.map +1 -1
  22. package/dist/Components/layout/sidebar.d.ts +1 -1
  23. package/dist/Components/layout/sidebar.d.ts.map +1 -1
  24. package/dist/Components/lineinputs/LabeledInputControl.d.ts.map +1 -1
  25. package/dist/Components/lineinputs/SelectControl.d.ts.map +1 -1
  26. package/dist/Components/lineinputs/datetime/DatePicker.d.ts +19 -57
  27. package/dist/Components/lineinputs/datetime/DatePicker.d.ts.map +1 -1
  28. package/dist/Components/lineinputs/datetime/DateTimePicker.d.ts +20 -48
  29. package/dist/Components/lineinputs/datetime/DateTimePicker.d.ts.map +1 -1
  30. package/dist/Components/lineinputs/datetime/TemporalInput.d.ts +59 -0
  31. package/dist/Components/lineinputs/datetime/TemporalInput.d.ts.map +1 -0
  32. package/dist/Components/lineinputs/datetime/TimePicker.d.ts +18 -41
  33. package/dist/Components/lineinputs/datetime/TimePicker.d.ts.map +1 -1
  34. package/dist/Components/lineinputs/datetime/localDateTime.d.ts +49 -0
  35. package/dist/Components/lineinputs/datetime/localDateTime.d.ts.map +1 -0
  36. package/dist/Components/lineinputs/datetime/timeString.d.ts +5 -1
  37. package/dist/Components/lineinputs/datetime/timeString.d.ts.map +1 -1
  38. package/dist/Components/lineinputs/textbox.d.ts.map +1 -1
  39. package/dist/Components/lineinputs/toggle.d.ts.map +1 -1
  40. package/dist/Components/menu/button.d.ts.map +1 -1
  41. package/dist/index.d.ts +3 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +2311 -2714
  44. package/dist/index.js.map +1 -1
  45. package/dist/{jsx-dev-runtime-BAF7C1E1.js → jsx-dev-runtime-D3UnwrKT.js} +141 -147
  46. package/dist/jsx-dev-runtime-D3UnwrKT.js.map +1 -0
  47. package/dist/jsx-dev-runtime.js +1 -1
  48. package/dist/jsx-runtime.js +1 -1
  49. package/dist/localization.d.ts +0 -8
  50. package/dist/localization.d.ts.map +1 -1
  51. package/docs/application-composition-guide.md +2 -1
  52. package/package.json +3 -3
  53. package/styles/structural.css +393 -356
  54. package/themes/base.css +5 -3
  55. package/themes/minimal/theme.css +3 -2
  56. package/themes/shiny/theme.css +14 -18
  57. package/dist/Components/lineinputs/datetime/Calendar.d.ts +0 -23
  58. package/dist/Components/lineinputs/datetime/Calendar.d.ts.map +0 -1
  59. package/dist/jsx-dev-runtime-BAF7C1E1.js.map +0 -1
@@ -145,8 +145,12 @@ cap-breadcrumb {
145
145
  }
146
146
 
147
147
  cap-button > button {
148
- min-height: var(--control-min-height, 2rem);
149
- padding: var(--space-xs) var(--space-sm);
148
+ display: inline-flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ min-height: var(--control-min-height, 2em);
152
+ margin: 0;
153
+ padding: 0 5px;
150
154
  color: var(--button-color);
151
155
  background: var(--button-background);
152
156
  border: var(--button-border);
@@ -154,9 +158,7 @@ cap-button > button {
154
158
  box-shadow: var(--button-shadow);
155
159
  box-sizing: border-box;
156
160
  cursor: default;
157
- font-family: inherit;
158
- font-size: var(--ui-font-size);
159
- line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
161
+ font: inherit;
160
162
  user-select: none;
161
163
  white-space: nowrap;
162
164
  }
@@ -165,6 +167,11 @@ cap-button > button {
165
167
  display: inline-flex;
166
168
  position: relative;
167
169
  flex-flow: row wrap;
170
+ align-items: center;
171
+ align-content: center;
172
+ font-family: inherit;
173
+ font-size: var(--ui-font-size);
174
+ line-height: 1.2;
168
175
  }
169
176
 
170
177
  cap-button > button:hover:not(:disabled, [aria-disabled="true"]) {
@@ -187,7 +194,7 @@ cap-button > button {
187
194
  cap-button > button[aria-disabled="true"] {
188
195
  color: var(--input-color-disabled);
189
196
  background: var(--button-background-disabled);
190
- border: var(--button-border-disabled);
197
+ border-color: var(--button-border-disabled);
191
198
  cursor: not-allowed;
192
199
  pointer-events: none;
193
200
  }
@@ -310,7 +317,11 @@ cap-tricheckbox {
310
317
  display: inline-flex;
311
318
  position: relative;
312
319
  flex-flow: row wrap;
313
- line-height: 1;
320
+ align-items: center;
321
+ align-content: center;
322
+ font-family: inherit;
323
+ font-size: var(--ui-font-size);
324
+ line-height: 1.2;
314
325
  }
315
326
 
316
327
  cap-checkbox > label,
@@ -320,17 +331,13 @@ cap-tricheckbox {
320
331
  display: flex;
321
332
  flex-flow: row nowrap;
322
333
  position: relative;
323
- line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
324
- font-size: var(--ui-font-size);
325
- height: calc(var(--ui-font-size) + var(--ui-padding-h) + var(--ui-padding-h));
334
+ min-height: 1.2em;
335
+ margin: 0;
326
336
  color: var(--ui-text-color);
327
337
  border-radius: var(--ui-border-radius);
328
338
  box-sizing: border-box;
329
339
  align-items: center;
330
340
  gap: .3em;
331
- align-content: center;
332
- justify-content: center;
333
- justify-items: center;
334
341
  cursor: pointer;
335
342
  user-select: none;
336
343
  }
@@ -371,7 +378,7 @@ cap-tricheckbox {
371
378
  flex: 0 0 1em;
372
379
  box-sizing: border-box;
373
380
  text-align: center;
374
- line-height: 120%;
381
+ line-height: 1;
375
382
  color: var(--input-color, var(--ui-text-color, currentColor));
376
383
  background: var(--checkbox-box-background, var(--ui-input-bg, transparent));
377
384
  border: var(--checkbox-box-border, var(--cbx-o-border, 1px solid currentColor));
@@ -471,66 +478,76 @@ cap-tricheckbox > label > input[value="require"] + cap-checkshell {
471
478
 
472
479
  cap-dropdown,
473
480
  cap-datepicker,
474
- cap-timepicker,
481
+ cap-datetimepicker,
475
482
  cap-textbox,
483
+ cap-timepicker,
476
484
  cap-toggle {
477
485
  display: flex;
478
486
  flex-flow: row nowrap;
479
487
  position: relative;
480
488
  align-items: center;
481
489
  gap: .5em;
482
- min-height: var(--control-min-height, 2rem);
490
+ min-height: var(--control-min-height, 2em);
483
491
  color: var(--ui-text-color);
492
+ font-family: inherit;
484
493
  font-size: var(--ui-font-size);
485
- line-height: normal;
494
+ line-height: 1.2;
486
495
  box-sizing: border-box;
487
496
  user-select: none;
488
497
  }
489
498
 
490
499
  cap-groupbox > cap-content > cap-layout > cap-dropdown,
491
500
  cap-groupbox > cap-content > cap-layout > cap-datepicker,
492
- cap-groupbox > cap-content > cap-layout > cap-timepicker,
501
+ cap-groupbox > cap-content > cap-layout > cap-datetimepicker,
493
502
  cap-groupbox > cap-content > cap-layout > cap-textbox,
503
+ cap-groupbox > cap-content > cap-layout > cap-timepicker,
494
504
  cap-groupbox > cap-content > cap-layout > cap-toggle {
495
505
  align-self: stretch;
496
506
  }
497
507
 
498
508
  cap-dropdown > label,
499
509
  cap-datepicker > label,
500
- cap-timepicker > label,
510
+ cap-datetimepicker > label,
501
511
  cap-textbox > label,
512
+ cap-timepicker > label,
502
513
  cap-toggle > label {
503
514
  align-self: center;
504
515
  user-select: none;
505
516
  white-space: nowrap;
506
517
  }
507
518
 
508
- cap-dropdown,
509
- cap-timepicker {
519
+ cap-dropdown {
520
+ display: grid;
521
+ grid-template-columns: minmax(var(--input-min-width, 6rem), 1fr);
510
522
  min-width: 0;
511
523
  }
512
524
 
513
- cap-dropdown > cap-selectshell,
514
- cap-timepicker > cap-selectshell {
525
+ cap-dropdown:has(> label) {
526
+ grid-template-columns: max-content minmax(var(--input-min-width, 6rem), 1fr);
527
+ }
528
+
529
+ cap-dropdown > cap-selectshell {
515
530
  display: flex;
516
531
  flex-flow: row nowrap;
517
532
  position: relative;
518
533
  isolation: isolate;
519
- min-height: var(--control-min-height, 2rem);
520
- min-width: 0;
534
+ min-height: var(--control-min-height, 2em);
535
+ width: var(--input-width, 15rem);
536
+ max-width: 100%;
537
+ min-width: var(--input-min-width, 6rem);
521
538
  box-sizing: border-box;
522
539
  margin-left: auto;
523
540
  }
524
541
 
525
- cap-dropdown > cap-selectshell > select,
526
- cap-timepicker > cap-selectshell > select {
542
+ cap-dropdown > cap-selectshell > select {
527
543
  position: relative;
528
544
  z-index: 1;
529
- min-height: var(--control-min-height, 2rem);
545
+ min-height: var(--control-min-height, 2em);
530
546
  width: var(--input-width, 15rem);
531
547
  max-width: 100%;
532
548
  min-width: var(--input-min-width, 6rem);
533
- padding: var(--space-xs) var(--space-sm);
549
+ margin: 0;
550
+ padding: 0 5px;
534
551
  padding-inline-end: var(--dropdown-padding-inline-end);
535
552
  color: var(--input-color);
536
553
  background: var(--dropdown-select-background);
@@ -545,8 +562,7 @@ cap-timepicker {
545
562
  white-space: nowrap;
546
563
  }
547
564
 
548
- cap-dropdown > cap-selectshell::after,
549
- cap-timepicker > cap-selectshell::after {
565
+ cap-dropdown > cap-selectshell::after {
550
566
  content: var(--dropdown-underlay-content);
551
567
  position: absolute;
552
568
  z-index: 0;
@@ -561,8 +577,7 @@ cap-timepicker {
561
577
  pointer-events: none;
562
578
  }
563
579
 
564
- cap-dropdown > cap-selectshell::before,
565
- cap-timepicker > cap-selectshell::before {
580
+ cap-dropdown > cap-selectshell::before {
566
581
  content: var(--dropdown-trigger-content);
567
582
  position: absolute;
568
583
  z-index: 2;
@@ -582,42 +597,36 @@ cap-timepicker {
582
597
  pointer-events: none;
583
598
  }
584
599
 
585
- cap-dropdown > cap-selectshell:has(> select:hover:not(:disabled))::before,
586
- cap-timepicker > cap-selectshell:has(> select:hover:not(:disabled))::before {
600
+ cap-dropdown > cap-selectshell:has(> select:hover:not(:disabled))::before {
587
601
  background: var(--dropdown-trigger-background-hover);
588
602
  box-shadow: var(--dropdown-trigger-shadow-hover);
589
603
  }
590
604
 
591
- cap-dropdown > cap-selectshell:has(> select:disabled)::before,
592
- cap-timepicker > cap-selectshell:has(> select:disabled)::before {
605
+ cap-dropdown > cap-selectshell:has(> select:disabled)::before {
593
606
  color: var(--input-color-disabled);
594
607
  background: var(--dropdown-trigger-background-disabled);
595
608
  border: var(--dropdown-trigger-border-disabled);
596
609
  }
597
610
 
598
- cap-dropdown > cap-selectshell:has(> select:disabled)::after,
599
- cap-timepicker > cap-selectshell:has(> select:disabled)::after {
611
+ cap-dropdown > cap-selectshell:has(> select:disabled)::after {
600
612
  background: var(--dropdown-underlay-background-disabled);
601
613
  border: var(--dropdown-underlay-border-disabled);
602
614
  }
603
615
 
604
- cap-dropdown > cap-selectshell > select:focus-visible,
605
- cap-timepicker > cap-selectshell > select:focus-visible {
616
+ cap-dropdown > cap-selectshell > select:focus-visible {
606
617
  outline: 2px solid transparent;
607
618
  outline-offset: 1px;
608
619
  box-shadow: var(--focus-ring);
609
620
  }
610
621
 
611
- cap-dropdown > cap-selectshell:has(> select[aria-busy="true"]:not([aria-invalid="true"]))::after,
612
- cap-timepicker > cap-selectshell:has(> select[aria-busy="true"]:not([aria-invalid="true"]))::after {
622
+ cap-dropdown > cap-selectshell:has(> select[aria-busy="true"]:not([aria-invalid="true"]))::after {
613
623
  background: var(--working-background-image), var(--dropdown-underlay-background);
614
624
  background-repeat: repeat, no-repeat;
615
625
  background-size: 2rem 2rem, 100% 100%;
616
626
  animation: cap-working-progress .55s linear infinite;
617
627
  }
618
628
 
619
- cap-dropdown > cap-selectshell > select[aria-busy="true"]:not([aria-invalid="true"]),
620
- cap-timepicker > cap-selectshell > select[aria-busy="true"]:not([aria-invalid="true"]) {
629
+ cap-dropdown > cap-selectshell > select[aria-busy="true"]:not([aria-invalid="true"]) {
621
630
  background: var(--working-background-image), var(--dropdown-select-background);
622
631
  background-repeat: repeat, no-repeat;
623
632
  background-size: 2rem 2rem, 100% 100%;
@@ -625,39 +634,30 @@ cap-timepicker {
625
634
  }
626
635
 
627
636
  cap-dropdown > cap-selectshell:has(> select[aria-invalid="true"])::before,
628
- cap-timepicker > cap-selectshell:has(> select[aria-invalid="true"])::before,
629
637
  cap-dropdown > cap-selectshell:has(> select[aria-invalid="true"])::after,
630
- cap-timepicker > cap-selectshell:has(> select[aria-invalid="true"])::after,
631
- cap-dropdown > cap-selectshell > select[aria-invalid="true"],
632
- cap-timepicker > cap-selectshell > select[aria-invalid="true"] {
638
+ cap-dropdown > cap-selectshell > select[aria-invalid="true"] {
633
639
  border-color: var(--error-color);
634
640
  }
635
641
 
636
642
  @media (prefers-reduced-motion: reduce) {
637
643
  cap-dropdown > cap-selectshell:has(> select[aria-busy="true"])::after,
638
- cap-timepicker > cap-selectshell:has(> select[aria-busy="true"])::after,
639
- cap-dropdown > cap-selectshell > select[aria-busy="true"],
640
- cap-timepicker > cap-selectshell > select[aria-busy="true"] {
644
+ cap-dropdown > cap-selectshell > select[aria-busy="true"] {
641
645
  animation: none !important;
642
646
  }
643
647
  }
644
648
 
645
649
  @media (forced-colors: active) {
646
650
  cap-dropdown > cap-selectshell::before,
647
- cap-timepicker > cap-selectshell::before,
648
- cap-dropdown > cap-selectshell::after,
649
- cap-timepicker > cap-selectshell::after {
651
+ cap-dropdown > cap-selectshell::after {
650
652
  display: none;
651
653
  }
652
654
 
653
- cap-dropdown > cap-selectshell > select,
654
- cap-timepicker > cap-selectshell > select {
655
+ cap-dropdown > cap-selectshell > select {
655
656
  appearance: auto;
656
657
  padding-inline-end: var(--space-sm);
657
658
  }
658
659
 
659
- cap-dropdown > cap-selectshell > select[aria-invalid="true"],
660
- cap-timepicker > cap-selectshell > select[aria-invalid="true"] {
660
+ cap-dropdown > cap-selectshell > select[aria-invalid="true"] {
661
661
  outline: 2px solid Mark;
662
662
  outline-offset: 1px;
663
663
  }
@@ -666,6 +666,10 @@ cap-timepicker {
666
666
  cap-datatable {
667
667
  display: block;
668
668
  position: relative;
669
+ flex: 1 1 auto;
670
+ min-inline-size: 0;
671
+ min-block-size: 0;
672
+ max-block-size: 100%;
669
673
  overflow: auto;
670
674
  }
671
675
 
@@ -724,18 +728,6 @@ cap-datatable {
724
728
  height: var(--ui-font-size);
725
729
  }
726
730
 
727
- cap-datatable > table[aria-busy="true"] > tbody > tr[data-cap-selectable-row] > td::after {
728
- content: "";
729
- position: absolute;
730
- z-index: 1;
731
- inset: 0;
732
- background-image: var(--working-background-image);
733
- background-repeat: repeat;
734
- background-size: 2rem 2rem;
735
- animation: cap-working-progress .55s linear infinite;
736
- pointer-events: none;
737
- }
738
-
739
731
  cap-datatable:has(> cap-error) {
740
732
  outline: 1px solid var(--error-color);
741
733
  outline-offset: -1px;
@@ -745,12 +737,6 @@ cap-datatable {
745
737
  border-color: var(--error-color);
746
738
  }
747
739
 
748
- @media (prefers-reduced-motion: reduce) {
749
- cap-datatable > table[aria-busy="true"] > tbody > tr[data-cap-selectable-row] > td::after {
750
- animation: none !important;
751
- }
752
- }
753
-
754
740
  @media (forced-colors: active) {
755
741
  cap-datatable:has(> cap-error) {
756
742
  outline: 2px solid Mark;
@@ -789,12 +775,27 @@ cap-placeholder {
789
775
  }
790
776
  }
791
777
 
778
+ @media (forced-colors: active) {
779
+ cap-placeholder {
780
+ background: CanvasText;
781
+ forced-color-adjust: none;
782
+ }
783
+
784
+ cap-placeholder::after {
785
+ display: none;
786
+ }
787
+ }
788
+
792
789
  cap-datatable > table > thead {
793
790
  color: var(--table-header-color);
794
791
  background: var(--ui-gradient);
795
792
  }
796
793
 
797
794
  cap-datatable > table > thead > tr > th {
795
+ position: sticky;
796
+ inset-block-start: 0;
797
+ z-index: 2;
798
+ background: var(--ui-gradient);
798
799
  border: 2px groove #fff7;
799
800
  border-left: none;
800
801
  }
@@ -804,7 +805,8 @@ cap-datatable > table > thead {
804
805
  }
805
806
 
806
807
  cap-datatable > table > thead > tr > th[aria-sort] {
807
- position: relative;
808
+ position: sticky;
809
+ inset-block-start: 0;
808
810
  padding-right: 24px;
809
811
  user-select: var(--noselect-user-select);
810
812
  cursor: var(--noselect-cursor);
@@ -900,22 +902,31 @@ cap-filterpanel {
900
902
  }
901
903
  }
902
904
 
903
- cap-datepicker {
904
- display: flex;
905
- flex-flow: row nowrap;
905
+ cap-datepicker,
906
+ cap-datetimepicker,
907
+ cap-timepicker {
908
+ display: grid;
909
+ grid-template-columns: minmax(var(--input-min-width, 6rem), 1fr);
906
910
  align-items: center;
907
- gap: 0.5em;
908
- position: relative;
909
- min-height: var(--control-min-height, 2rem);
910
911
  min-width: 0;
911
912
  }
912
913
 
913
- cap-datepicker > input {
914
- min-height: var(--control-min-height, 2rem);
915
- width: var(--input-width, 10rem);
914
+ cap-datepicker:has(> label),
915
+ cap-datetimepicker:has(> label),
916
+ cap-timepicker:has(> label) {
917
+ grid-template-columns: max-content minmax(var(--input-min-width, 6rem), 1fr);
918
+ }
919
+
920
+ cap-datepicker > input,
921
+ cap-datetimepicker > input,
922
+ cap-timepicker > input {
923
+ min-height: var(--control-min-height, 2em);
924
+ width: var(--input-width, max-content);
916
925
  max-width: 100%;
917
926
  min-width: var(--input-min-width, 6rem);
918
- padding: var(--space-xs) var(--space-sm);
927
+ margin: 0;
928
+ margin-left: auto;
929
+ padding: 0 5px;
919
930
  color: var(--input-color);
920
931
  background: var(--input-background);
921
932
  border: var(--input-border);
@@ -923,207 +934,68 @@ cap-datepicker {
923
934
  box-shadow: var(--input-shadow);
924
935
  box-sizing: border-box;
925
936
  font: inherit;
926
- user-select: text;
927
- cursor: text;
928
937
  }
929
938
 
930
939
  cap-datepicker > input:disabled,
931
- cap-datepicker > input[readonly] {
940
+ cap-datetimepicker > input:disabled,
941
+ cap-timepicker > input:disabled,
942
+ cap-datepicker > input[readonly],
943
+ cap-datetimepicker > input[readonly],
944
+ cap-timepicker > input[readonly] {
932
945
  color: var(--input-color-disabled);
933
946
  background: var(--input-background-disabled);
934
947
  border-color: var(--ui-input-border-disabled);
935
948
  cursor: not-allowed;
936
949
  }
937
950
 
938
- cap-datepicker > input:focus-visible {
951
+ cap-datepicker > input:focus-visible,
952
+ cap-datetimepicker > input:focus-visible,
953
+ cap-timepicker > input:focus-visible {
939
954
  outline: 2px solid transparent;
940
955
  outline-offset: 1px;
941
956
  box-shadow: var(--focus-ring);
942
957
  }
943
958
 
944
- cap-datepicker > button {
945
- min-height: var(--control-min-height, 2rem);
946
- min-width: 2rem;
947
- padding: var(--space-xs) var(--space-sm);
948
- color: var(--button-color);
949
- background: var(--button-background);
950
- border: var(--button-border);
951
- border-radius: var(--radius-md);
952
- cursor: pointer;
953
- font: inherit;
954
- user-select: none;
955
- }
956
-
957
- cap-datepicker > button:disabled {
958
- color: var(--input-color-disabled);
959
- background: var(--input-background-disabled);
960
- cursor: not-allowed;
961
- }
962
-
963
- cap-datepicker > dialog {
964
- position: absolute;
965
- inset-block-start: 100%;
966
- inset-inline-start: 0;
967
- z-index: 1;
968
- margin: 0.25em 0 0;
969
- padding: 0.5em;
970
- min-width: 16rem;
971
- background: var(--island-background, var(--application-background));
972
- border: var(--island-border, var(--input-border));
973
- border-radius: var(--radius-md);
974
- box-shadow: var(--island-shadow, var(--input-shadow));
975
- color: var(--ui-color);
976
- }
977
-
978
- cap-datepicker > dialog::backdrop {
979
- display: none;
980
- }
981
-
982
- cap-datepicker > input[aria-busy="true"]:not([aria-invalid="true"]) {
959
+ cap-datepicker > input[aria-busy="true"]:not([aria-invalid="true"]),
960
+ cap-datetimepicker > input[aria-busy="true"]:not([aria-invalid="true"]),
961
+ cap-timepicker > input[aria-busy="true"]:not([aria-invalid="true"]) {
983
962
  background: var(--working-background-image), var(--input-background);
984
963
  background-repeat: repeat, no-repeat;
985
964
  background-size: 2rem 2rem, 100% 100%;
986
965
  animation: cap-working-progress .55s linear infinite;
987
966
  }
988
967
 
989
- cap-datepicker > input[aria-invalid="true"] {
990
- border-color: var(--error-color);
991
- }
992
-
993
- cap-datepicker > dialog .cap-calendar {
994
- display: inline-block;
995
- font: inherit;
996
- user-select: none;
997
- }
998
-
999
- cap-datepicker > dialog .cap-calendar .cap-calendar-header {
1000
- display: flex;
1001
- justify-content: space-between;
1002
- align-items: center;
1003
- gap: 0.5em;
1004
- padding: 0.25em 0.5em;
1005
- font: inherit;
1006
- text-align: center;
1007
- }
1008
-
1009
- cap-datepicker > dialog .cap-calendar .cap-calendar-header button {
1010
- min-inline-size: 2em;
1011
- min-block-size: 2em;
1012
- padding: 0.25em;
1013
- cursor: pointer;
1014
- }
1015
-
1016
- cap-datepicker > dialog .cap-calendar table[role="grid"] {
1017
- border-collapse: collapse;
1018
- width: 100%;
1019
- font: inherit;
1020
- }
1021
-
1022
- cap-datepicker > dialog .cap-calendar table[role="grid"] th,
1023
- cap-datepicker > dialog .cap-calendar table[role="grid"] td {
1024
- padding: 0.125em;
1025
- text-align: center;
1026
- }
1027
-
1028
- cap-datepicker > dialog .cap-calendar table[role="grid"] th {
1029
- font-weight: 600;
1030
- }
1031
-
1032
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button {
1033
- inline-size: 2em;
1034
- block-size: 2em;
1035
- padding: 0;
1036
- border: 1px solid transparent;
1037
- border-radius: var(--radius-sm, 0.25rem);
1038
- background: transparent;
1039
- color: inherit;
1040
- font: inherit;
1041
- cursor: pointer;
1042
- }
1043
-
1044
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button:focus-visible {
1045
- outline: 2px solid transparent;
1046
- outline-offset: 1px;
1047
- box-shadow: var(--focus-ring);
1048
- }
1049
-
1050
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button[data-today="true"] {
1051
- border-color: var(--palette-primary-500);
1052
- }
1053
-
1054
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button[data-selected="true"] {
1055
- background: var(--palette-primary-500);
1056
- color: var(--palette-primary-contrast);
968
+ cap-datepicker > input:disabled[aria-busy="true"]:not([aria-invalid="true"]),
969
+ cap-datetimepicker > input:disabled[aria-busy="true"]:not([aria-invalid="true"]),
970
+ cap-timepicker > input:disabled[aria-busy="true"]:not([aria-invalid="true"]) {
971
+ background: var(--working-background-image), var(--input-background-disabled);
972
+ background-repeat: repeat, no-repeat;
973
+ background-size: 2rem 2rem, 100% 100%;
1057
974
  }
1058
975
 
1059
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button:disabled,
1060
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button[aria-disabled="true"] {
1061
- color: var(--input-color-disabled);
1062
- cursor: not-allowed;
976
+ cap-datepicker > input[aria-invalid="true"],
977
+ cap-datetimepicker > input[aria-invalid="true"],
978
+ cap-timepicker > input[aria-invalid="true"] {
979
+ border-color: var(--error-color);
1063
980
  }
1064
981
 
1065
982
  @media (prefers-reduced-motion: reduce) {
1066
- cap-datepicker > input[aria-busy="true"] {
983
+ cap-datepicker > input[aria-busy="true"],
984
+ cap-datetimepicker > input[aria-busy="true"],
985
+ cap-timepicker > input[aria-busy="true"] {
1067
986
  animation: none !important;
1068
987
  }
1069
988
  }
1070
989
 
1071
990
  @media (forced-colors: active) {
1072
- cap-datepicker > input[aria-invalid="true"] {
1073
- outline: 2px solid Mark;
1074
- outline-offset: 1px;
1075
- }
1076
-
1077
- cap-datepicker > dialog .cap-calendar table[role="grid"] td button[data-selected="true"] {
1078
- outline: 2px solid ButtonText;
1079
- }
1080
- }
1081
-
1082
- cap-datetimepicker {
1083
- display: block;
1084
- position: relative;
1085
- min-width: 0;
1086
- }
1087
-
1088
- cap-datetimepicker > fieldset {
1089
- margin: 0;
1090
- padding: 0;
1091
- min-inline-size: 0;
1092
- border: 0;
1093
- display: flex;
1094
- flex-flow: row wrap;
1095
- align-items: flex-start;
1096
- gap: 0.5em;
1097
- width: 100%;
1098
- }
1099
-
1100
- cap-datetimepicker > fieldset > legend {
1101
- display: block;
1102
- width: 100%;
1103
- padding: 0;
1104
- margin: 0 0 0.25em;
1105
- font: inherit;
1106
- user-select: none;
1107
- }
1108
-
1109
- cap-datetimepicker > fieldset[aria-invalid="true"] cap-datepicker > input,
1110
- cap-datetimepicker > fieldset[aria-invalid="true"] cap-timepicker > cap-selectshell::before,
1111
- cap-datetimepicker > fieldset[aria-invalid="true"] cap-timepicker > cap-selectshell::after,
1112
- cap-datetimepicker > fieldset[aria-invalid="true"] cap-timepicker > cap-selectshell > select {
1113
- border-color: var(--error-color);
1114
- }
1115
-
1116
- @media (forced-colors: active) {
1117
- cap-datetimepicker > fieldset[aria-invalid="true"] {
991
+ cap-datepicker > input[aria-invalid="true"],
992
+ cap-datetimepicker > input[aria-invalid="true"],
993
+ cap-timepicker > input[aria-invalid="true"] {
1118
994
  outline: 2px solid Mark;
1119
995
  outline-offset: 1px;
1120
996
  }
1121
997
  }
1122
998
 
1123
- cap-timepicker > cap-selectshell > select {
1124
- min-width: 7rem;
1125
- }
1126
-
1127
999
  cap-descriptionlist {
1128
1000
  display: block;
1129
1001
  user-select: none;
@@ -1226,15 +1098,20 @@ cap-optionsbox {
1226
1098
  box-sizing: border-box;
1227
1099
  gap: var(--cap-groupbox-gap, 0 0.35rem);
1228
1100
  padding: var(--cap-groupbox-padding, 0.125rem 0.35rem 0.125rem 0.125rem);
1101
+ padding-top: var(--cap-groupbox-padding-top, .125rem);
1229
1102
  border: var(--cap-groupbox-border, 1px solid var(--ui-border-color));
1230
1103
  border-radius: var(--ui-border-radius);
1231
1104
  position: relative;
1232
1105
  min-width: 0;
1233
1106
  min-height: 0;
1107
+ flex: var(--cap-groupbox-flex, 0 1 auto);
1234
1108
  }
1235
1109
 
1236
1110
  cap-groupbox > cap-header,
1237
1111
  cap-optionsbox > cap-header {
1112
+ position: var(--cap-groupbox-header-position, static);
1113
+ left: var(--cap-groupbox-header-inset, auto);
1114
+ top: var(--cap-groupbox-header-inset, auto);
1238
1115
  display: grid;
1239
1116
  place-items: var(--cap-groupbox-header-align, center);
1240
1117
  box-sizing: border-box;
@@ -1258,12 +1135,11 @@ cap-optionsbox {
1258
1135
  min-width: 0;
1259
1136
  min-height: 0;
1260
1137
  margin-left: var(--cap-groupbox-content-margin, .25em);
1138
+ flex: 1 1 auto;
1261
1139
  }
1262
1140
 
1263
- .cap-layout-horizontal cap-groupbox > cap-content > cap-layout,
1264
- .cap-layout-horizontal cap-optionsbox > cap-content > cap-layout,
1265
- .cap-layout-vertical cap-groupbox > cap-content > cap-layout,
1266
- .cap-layout-vertical cap-optionsbox > cap-content > cap-layout {
1141
+ cap-groupbox > cap-content > cap-layout,
1142
+ cap-optionsbox > cap-content > cap-layout {
1267
1143
  gap: .5rem;
1268
1144
  justify-content: flex-start;
1269
1145
  align-content: flex-start;
@@ -1289,6 +1165,10 @@ cap-optionsbox {
1289
1165
  --cap-groupbox-header-writing: vertical-rl;
1290
1166
  --cap-groupbox-header-transform: rotate(180deg);
1291
1167
  --cap-groupbox-content-margin: .25em;
1168
+ --cap-groupbox-flex: 0 1 auto;
1169
+ --cap-groupbox-padding-top: .125rem;
1170
+ --cap-groupbox-header-position: static;
1171
+ --cap-groupbox-header-inset: auto;
1292
1172
  }
1293
1173
 
1294
1174
  [data-cap-context='form'] {
@@ -1298,45 +1178,191 @@ cap-optionsbox {
1298
1178
  --cap-groupbox-border: 1px solid var(--ui-border-color);
1299
1179
  --cap-groupbox-header-align: center start;
1300
1180
  --cap-groupbox-header-width: auto;
1301
- --cap-groupbox-header-padding: 0;
1181
+ --cap-groupbox-header-padding: 2px 5px;
1302
1182
  --cap-groupbox-header-color: var(--text-color);
1303
- --cap-groupbox-header-background: none;
1183
+ --cap-groupbox-header-background: var(--panel-background);
1304
1184
  --cap-groupbox-header-shadow: none;
1305
1185
  --cap-groupbox-header-writing: horizontal-tb;
1306
1186
  --cap-groupbox-header-transform: none;
1307
1187
  --cap-groupbox-content-margin: 0;
1188
+ --cap-groupbox-flex: 0 1 auto;
1189
+ --cap-groupbox-padding-top: 1em;
1190
+ --cap-groupbox-header-position: absolute;
1191
+ --cap-groupbox-header-inset: calc(0px - var(--ui-font-size) / 2);
1308
1192
  }
1309
1193
 
1310
- [data-cap-context='form'] cap-groupbox,
1311
- [data-cap-context='form'] cap-optionsbox {
1312
- flex: 1 1 auto;
1194
+ .cap-layout-horizontal > cap-groupbox,
1195
+ .cap-layout-horizontal > cap-optionsbox {
1196
+ max-inline-size: max-content;
1197
+ min-inline-size: min-content;
1198
+ }
1199
+
1200
+ cap-groupbox.cap-groupbox-section,
1201
+ cap-optionsbox.cap-groupbox-section {
1202
+ display: grid;
1203
+ grid-template-columns: max-content minmax(0, 1fr);
1204
+ grid-template-rows: max-content minmax(max-content, 1fr);
1313
1205
  align-self: stretch;
1314
- padding-top: 1em;
1206
+ align-items: start;
1207
+ gap: 0;
1208
+ padding: 0;
1209
+ padding-top: 0;
1210
+ border: 0;
1211
+ border-radius: 0;
1212
+ min-inline-size: 0;
1213
+ max-inline-size: none;
1214
+ flex: 0 0 auto;
1215
+ }
1216
+
1217
+ cap-groupbox.cap-groupbox-section::before,
1218
+ cap-optionsbox.cap-groupbox-section::before {
1219
+ content: "";
1220
+ grid-column: 2;
1221
+ grid-row: 1;
1222
+ align-self: center;
1223
+ border-block-start: 1px solid var(--ui-border-color);
1224
+ }
1225
+
1226
+ cap-groupbox.cap-groupbox-section > cap-header,
1227
+ cap-optionsbox.cap-groupbox-section > cap-header {
1228
+ position: static;
1229
+ grid-column: 1;
1230
+ grid-row: 1;
1231
+ display: block;
1232
+ width: auto;
1233
+ min-width: 0;
1234
+ min-height: 0;
1235
+ padding: 0 0.5rem 0 0;
1236
+ border-radius: 0;
1237
+ color: var(--text-color);
1238
+ background: transparent;
1239
+ box-shadow: none;
1240
+ writing-mode: horizontal-tb;
1241
+ transform: none;
1242
+ font-size: var(--groupbox-section-font-size, 1.2em);
1243
+ font-weight: 600;
1315
1244
  }
1316
1245
 
1317
- .cap-layout-horizontal cap-groupbox,
1318
- .cap-layout-horizontal cap-optionsbox {
1319
- max-width: 15rem;
1246
+ cap-groupbox.cap-groupbox-section > cap-content,
1247
+ cap-optionsbox.cap-groupbox-section > cap-content {
1248
+ grid-column: 1 / -1;
1249
+ grid-row: 2;
1250
+ margin-left: 0;
1251
+ padding-block: 0.75rem;
1320
1252
  min-width: 0;
1321
1253
  }
1322
1254
 
1323
- .cap-layout-vertical cap-groupbox,
1324
- .cap-layout-vertical cap-optionsbox {
1325
- max-height: 15rem;
1255
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section,
1256
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section {
1257
+ grid-template-columns: max-content minmax(0, 1fr);
1258
+ grid-template-rows: max-content minmax(max-content, 1fr);
1259
+ }
1260
+
1261
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section::before,
1262
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section::before {
1263
+ grid-column: 1;
1264
+ grid-row: 2;
1265
+ justify-self: stretch;
1266
+ align-self: stretch;
1267
+ border-block-start: 0;
1268
+ border-inline-end: 1px solid var(--ui-border-color);
1269
+ }
1270
+
1271
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section > cap-header,
1272
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section > cap-header {
1273
+ padding: 0 0.5rem 0.5rem 0;
1274
+ }
1275
+
1276
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section > cap-content,
1277
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section > cap-content {
1278
+ grid-column: 2;
1279
+ grid-row: 1 / -1;
1280
+ padding-block: 0;
1281
+ padding-inline: 0.75rem;
1282
+ min-block-size: 0;
1283
+ }
1284
+
1285
+ cap-groupbox.cap-groupbox-column,
1286
+ cap-optionsbox.cap-groupbox-column {
1287
+ gap: 0;
1288
+ padding: 0 1rem;
1289
+ padding-top: 0;
1290
+ border: 0;
1291
+ border-radius: 0;
1292
+ flex: 0 1 auto;
1293
+ }
1294
+
1295
+ cap-groupbox.cap-groupbox-column > cap-header,
1296
+ cap-optionsbox.cap-groupbox-column > cap-header {
1297
+ position: static;
1298
+ display: block;
1299
+ width: auto;
1300
+ min-width: 0;
1326
1301
  min-height: 0;
1302
+ padding: 0;
1303
+ margin-block-end: 0.75rem;
1304
+ border-radius: 0;
1305
+ color: var(--text-color);
1306
+ background: transparent;
1307
+ box-shadow: none;
1308
+ writing-mode: horizontal-tb;
1309
+ transform: none;
1310
+ font-size: var(--ui-font-size);
1311
+ font-weight: 600;
1327
1312
  }
1328
1313
 
1329
- [data-cap-context='form'] cap-groupbox > cap-header {
1330
- position: absolute;
1331
- left: calc(0px - var(--ui-font-size) / 2);
1332
- top: calc(0px - var(--ui-font-size) / 2);
1333
- background: var(--panel-background);
1334
- padding: 2px 5px;
1314
+ cap-groupbox.cap-groupbox-column > cap-content,
1315
+ cap-optionsbox.cap-groupbox-column > cap-content {
1316
+ margin-left: 0;
1317
+ }
1318
+
1319
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column,
1320
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column,
1321
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column,
1322
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column {
1323
+ align-self: stretch;
1324
+ }
1325
+
1326
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column + cap-groupbox.cap-groupbox-column,
1327
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column + cap-optionsbox.cap-groupbox-column {
1328
+ border-inline-start: 1px solid var(--ui-border-color);
1329
+ }
1330
+
1331
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column:first-child,
1332
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column:first-child {
1333
+ padding-inline-start: 0;
1334
+ }
1335
+
1336
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column:last-child,
1337
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column:last-child {
1338
+ padding-inline-end: 0;
1339
+ }
1340
+
1341
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column,
1342
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column {
1343
+ padding-inline: 0;
1344
+ padding-block: 1rem;
1345
+ }
1346
+
1347
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column + cap-groupbox.cap-groupbox-column,
1348
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column + cap-optionsbox.cap-groupbox-column {
1349
+ border-block-start: 1px solid var(--ui-border-color);
1350
+ }
1351
+
1352
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column:first-child,
1353
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column:first-child {
1354
+ padding-block-start: 0;
1355
+ }
1356
+
1357
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column:last-child,
1358
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column:last-child {
1359
+ padding-block-end: 0;
1335
1360
  }
1336
1361
 
1337
1362
  cap-header {
1338
1363
  display: block;
1339
1364
  color: var(--section-header-color);
1365
+ font-size: var(--section-header-font-size);
1340
1366
  border-radius: var(--ui-border-radius) var(--ui-border-radius) 0 0;
1341
1367
  padding: .25em;
1342
1368
  background: var(--section-header-background);
@@ -1387,9 +1413,12 @@ cap-infopanel {
1387
1413
  cap-listview {
1388
1414
  display: flex;
1389
1415
  position: relative;
1416
+ flex: 1 1 auto;
1390
1417
  flex-direction: column;
1391
- overflow-y: auto;
1392
- height: 100%;
1418
+ min-inline-size: 0;
1419
+ min-block-size: 0;
1420
+ max-block-size: 100%;
1421
+ overflow: auto;
1393
1422
  padding: var(--ui-padding-v) var(--ui-padding-h);
1394
1423
  color: var(--ui-text-color);
1395
1424
  background: var(--ui-input-bg);
@@ -1411,7 +1440,8 @@ cap-listview {
1411
1440
  list-style: none;
1412
1441
  }
1413
1442
 
1414
- cap-listview > [role="listbox"] > [role="option"] {
1443
+ cap-listview > [role="listbox"] > [role="option"],
1444
+ cap-listview > ul[aria-hidden="true"] > li {
1415
1445
  display: flex;
1416
1446
  flex-flow: row nowrap;
1417
1447
  position: relative;
@@ -1422,19 +1452,11 @@ cap-listview {
1422
1452
  border-radius: var(--ui-border-radius);
1423
1453
  box-sizing: border-box;
1424
1454
  user-select: none;
1455
+ align-items: center;
1425
1456
  }
1426
1457
 
1427
- cap-listview > [role="listbox"][aria-busy="true"] > [role="option"]::after {
1428
- content: "";
1429
- position: absolute;
1430
- z-index: 1;
1431
- inset: 0;
1432
- background-image: var(--working-background-image);
1433
- background-repeat: repeat;
1434
- background-size: 2rem 2rem;
1435
- border-radius: inherit;
1436
- animation: cap-working-progress .55s linear infinite;
1437
- pointer-events: none;
1458
+ cap-listview > ul[aria-hidden="true"] cap-placeholder {
1459
+ font-size: var(--ui-font-size);
1438
1460
  }
1439
1461
 
1440
1462
  cap-listview > [role="listbox"] > [role="option"]:hover {
@@ -1454,12 +1476,6 @@ cap-listview {
1454
1476
  border-color: var(--error-color);
1455
1477
  }
1456
1478
 
1457
- @media (prefers-reduced-motion: reduce) {
1458
- cap-listview > [role="listbox"][aria-busy="true"] > [role="option"]::after {
1459
- animation: none !important;
1460
- }
1461
- }
1462
-
1463
1479
  @media (forced-colors: active) {
1464
1480
  cap-listview:has(> cap-error) {
1465
1481
  outline: 2px solid Mark;
@@ -1612,7 +1628,7 @@ cap-optionsbox > cap-content {
1612
1628
  flex-direction: column;
1613
1629
  align-self: stretch;
1614
1630
  flex: 1 1 0;
1615
- gap: .5em;
1631
+ gap: 1rem;
1616
1632
  }
1617
1633
 
1618
1634
  cap-optionsbox > cap-content * > fieldset > legend {
@@ -1624,8 +1640,8 @@ cap-optionsbox > cap-content {
1624
1640
  color: var(--palette-neutral-950);
1625
1641
  gap: 0.5rem;
1626
1642
  width: 100%;
1627
- padding: 0 0 0.25em;
1628
- margin-bottom: 0.25em;
1643
+ padding: 0 0 0.25rem;
1644
+ margin-bottom: 0.25rem;
1629
1645
  border-bottom: 1px solid var(--ui-border-color);
1630
1646
  user-select: none;
1631
1647
  }
@@ -1639,7 +1655,7 @@ cap-optionsbox > cap-content {
1639
1655
  align-content: stretch;
1640
1656
  box-sizing: border-box;
1641
1657
  width: 100%;
1642
- gap: 0;
1658
+ gap: .33rem;
1643
1659
  padding: .25em 0 .5em 0;
1644
1660
  }
1645
1661
 
@@ -1661,8 +1677,12 @@ cap-panel {
1661
1677
  flex: 1 1 auto;
1662
1678
  min-width: 0;
1663
1679
  min-height: 0;
1664
- padding: var(--panel-padding, 0.75rem);
1665
- gap: var(--spacing-medium, 1rem);
1680
+ padding: var(--panel-content-padding, var(--panel-padding, 0.75rem));
1681
+ gap: var(--spacing-small, 1rem);
1682
+ }
1683
+
1684
+ cap-panel.island:has(> cap-header) > cap-layout.panel-content:has(> [data-cap-surface='data']:only-child) {
1685
+ --panel-content-padding: 0;
1666
1686
  }
1667
1687
 
1668
1688
  cap-panel[aria-disabled="true"] {
@@ -1854,30 +1874,24 @@ cap-routeoutlet {
1854
1874
 
1855
1875
  cap-sidebar {
1856
1876
  display: flex;
1857
- min-width: 0;
1858
- min-height: 0;
1859
- }
1860
-
1861
- cap-sidebar > aside {
1862
- display: flex;
1863
- flex: 1 1 auto;
1864
1877
  flex-direction: column;
1865
1878
  min-width: 0;
1866
1879
  min-height: 0;
1880
+ flex: 1 1 auto;
1867
1881
  overflow: hidden;
1868
1882
  }
1869
1883
 
1870
- cap-sidebar > aside > cap-header,
1871
- cap-sidebar > aside > cap-toolbarcontent {
1884
+ cap-sidebar > cap-header,
1885
+ cap-sidebar > cap-toolbarcontent {
1872
1886
  flex: none;
1873
1887
  }
1874
1888
 
1875
- cap-sidebar > aside > cap-toolbarcontent {
1889
+ cap-sidebar > cap-toolbarcontent {
1876
1890
  min-width: 0;
1877
1891
  overflow-x: auto;
1878
1892
  }
1879
1893
 
1880
- cap-sidebar > aside > cap-content {
1894
+ cap-sidebar > cap-content {
1881
1895
  flex: 1;
1882
1896
  min-height: 0;
1883
1897
  overflow: auto;
@@ -2062,20 +2076,23 @@ cap-tabpanel {
2062
2076
  }
2063
2077
 
2064
2078
  cap-textbox {
2065
- display: flex;
2066
- flex-flow: row nowrap;
2079
+ display: grid;
2080
+ grid-template-columns: minmax(var(--input-min-width, 6rem), 1fr);
2067
2081
  align-items: center;
2068
- justify-content: center;
2069
- min-height: var(--control-min-height, 2rem);
2070
2082
  min-width: 0;
2071
- line-height: normal;
2083
+ }
2084
+
2085
+ cap-textbox:has(> label) {
2086
+ grid-template-columns: max-content minmax(var(--input-min-width, 6rem), 1fr);
2072
2087
  }
2073
2088
 
2074
2089
  cap-textbox > input {
2075
- min-height: var(--control-min-height, 2rem);
2090
+ min-height: var(--control-min-height, 2em);
2076
2091
  width: var(--input-width, 15rem);
2077
2092
  max-width: 100%;
2078
2093
  min-width: var(--input-min-width, 6rem);
2094
+ margin: 0;
2095
+ padding: 0 5px;
2079
2096
  color: var(--input-color);
2080
2097
  background: var(--input-background);
2081
2098
  border: var(--input-border);
@@ -2083,6 +2100,7 @@ cap-textbox {
2083
2100
  box-shadow: var(--input-shadow);
2084
2101
  box-sizing: border-box;
2085
2102
  font: inherit;
2103
+ appearance: none;
2086
2104
  pointer-events: all;
2087
2105
  user-select: text;
2088
2106
  white-space: nowrap;
@@ -2134,7 +2152,7 @@ cap-textbox {
2134
2152
  }
2135
2153
 
2136
2154
  cap-toggle {
2137
- min-height: var(--control-min-height, 2rem);
2155
+ min-height: var(--control-min-height, 2em);
2138
2156
  display: flex;
2139
2157
  position: relative;
2140
2158
  flex-flow: row nowrap;
@@ -2152,7 +2170,7 @@ cap-toggle {
2152
2170
 
2153
2171
  cap-toggle > cap-options {
2154
2172
  display: flex;
2155
- min-height: var(--control-min-height, 2rem);
2173
+ min-height: var(--control-min-height, 2em);
2156
2174
  border-radius: var(--radius-md);
2157
2175
  box-shadow: var(--toggle-group-shadow);
2158
2176
  box-sizing: border-box;
@@ -2162,63 +2180,98 @@ cap-toggle {
2162
2180
  }
2163
2181
 
2164
2182
  cap-toggle > cap-options > button[role="radio"] {
2165
- min-height: var(--control-min-height, 2rem);
2183
+ display: inline-flex;
2184
+ align-items: center;
2185
+ justify-content: center;
2186
+ min-height: var(--control-min-height, 2em);
2187
+ min-width: 2em;
2188
+ margin: 0;
2189
+ padding: 0 6px;
2166
2190
  position: relative;
2167
- font-family: inherit;
2168
- font-size: var(--ui-font-size);
2191
+ isolation: isolate;
2192
+ font: inherit;
2169
2193
  color: var(--button-color);
2170
- background: var(--toggle-button-background);
2194
+ background: transparent;
2171
2195
  user-select: none;
2172
2196
  white-space: nowrap;
2173
2197
  box-sizing: border-box;
2198
+ border: 0;
2199
+ border-radius: 0;
2200
+ cursor: default;
2201
+ }
2202
+
2203
+ /* Chrome may overlap adjacent segments, but never moves their text. */
2204
+ cap-toggle > cap-options > button[role="radio"]::before {
2205
+ content: '';
2206
+ position: absolute;
2207
+ inset: 0;
2208
+ z-index: -1;
2209
+ pointer-events: none;
2210
+ box-sizing: border-box;
2211
+ background: var(--toggle-button-background);
2174
2212
  border: var(--button-border);
2175
2213
  border-left: none;
2176
2214
  border-right: none;
2177
- border-radius: 0;
2215
+ border-radius: inherit;
2178
2216
  box-shadow: var(--toggle-button-shadow);
2179
- cursor: default;
2180
2217
  }
2181
2218
 
2182
- cap-toggle > cap-options > button[role="radio"]:hover:not(:disabled)[aria-checked="false"] {
2219
+ cap-toggle > cap-options > button[role="radio"]:hover:not(:disabled)[aria-checked="false"]::before {
2183
2220
  background: var(--button-background-hover);
2184
2221
  }
2185
2222
 
2186
2223
  cap-toggle > cap-options > button[role="radio"]:first-of-type {
2187
2224
  border-radius: var(--radius-md) 0 0 var(--radius-md);
2225
+ }
2226
+
2227
+ cap-toggle > cap-options > button[role="radio"]:first-of-type::before {
2188
2228
  border: var(--button-border);
2189
2229
  border-right: none;
2190
2230
  }
2191
2231
 
2192
2232
  cap-toggle > cap-options > button[role="radio"]:last-of-type {
2193
2233
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
2234
+ }
2235
+
2236
+ cap-toggle > cap-options > button[role="radio"]:only-of-type {
2237
+ border-radius: var(--radius-md);
2238
+ }
2239
+
2240
+ cap-toggle > cap-options > button[role="radio"]:last-of-type::before {
2194
2241
  border: var(--button-border);
2195
2242
  border-left: none;
2196
2243
  }
2197
2244
 
2198
2245
  cap-toggle > cap-options > button[role="radio"][aria-checked="false"]
2199
- + [role="radio"][aria-checked="false"] {
2246
+ + [role="radio"][aria-checked="false"]::before {
2200
2247
  border-inline-start: var(--button-border);
2201
2248
  border-inline-start-color: var(--toggle-inactive-shared-border-color);
2202
2249
  }
2203
2250
 
2204
2251
  cap-toggle > cap-options > button[role="radio"][aria-checked="true"] {
2205
2252
  color: var(--selection-color);
2253
+ z-index: var(--toggle-button-selected-z-index);
2254
+ }
2255
+
2256
+ cap-toggle > cap-options > button[role="radio"][aria-checked="true"]::before {
2206
2257
  background: var(--toggle-button-background-checked);
2207
2258
  border: var(--toggle-button-border-checked);
2208
2259
  box-shadow: none;
2209
- margin-inline: var(--toggle-button-selected-inline-overlap);
2210
- z-index: var(--toggle-button-selected-z-index);
2260
+ inset-inline: var(--toggle-button-selected-inline-overlap);
2211
2261
  }
2212
2262
 
2213
2263
  cap-toggle > cap-options > button[role="radio"]:disabled {
2214
2264
  color: var(--input-color-disabled);
2265
+ cursor: not-allowed;
2266
+ }
2267
+
2268
+ cap-toggle > cap-options > button[role="radio"]:disabled::before {
2215
2269
  background: var(--button-background-disabled);
2216
2270
  border: var(--button-border-disabled);
2217
- cursor: not-allowed;
2218
2271
  }
2219
2272
 
2220
2273
  cap-toggle > cap-options[aria-busy="true"]:not([aria-invalid="true"])
2221
- > button[role="radio"] {
2274
+ > button[role="radio"]::before {
2222
2275
  background: var(--working-background-image), var(--toggle-button-background);
2223
2276
  background-repeat: repeat, no-repeat;
2224
2277
  background-size: 2rem 2rem, 100% 100%;
@@ -2226,13 +2279,13 @@ cap-toggle {
2226
2279
  }
2227
2280
 
2228
2281
  cap-toggle > cap-options[aria-busy="true"]:not([aria-invalid="true"])
2229
- > button[role="radio"][aria-checked="true"] {
2282
+ > button[role="radio"][aria-checked="true"]::before {
2230
2283
  background: var(--working-background-image), var(--toggle-button-background-checked);
2231
2284
  background-repeat: repeat, no-repeat;
2232
2285
  background-size: 2rem 2rem, 100% 100%;
2233
2286
  }
2234
2287
 
2235
- cap-toggle > cap-options[aria-invalid="true"] > button[role="radio"] {
2288
+ cap-toggle > cap-options[aria-invalid="true"] > button[role="radio"]::before {
2236
2289
  border-color: var(--error-color);
2237
2290
  }
2238
2291
 
@@ -2247,7 +2300,7 @@ cap-toggle {
2247
2300
  }
2248
2301
 
2249
2302
  @media (prefers-reduced-motion: reduce) {
2250
- cap-toggle > cap-options[aria-busy="true"] > button[role="radio"] {
2303
+ cap-toggle > cap-options[aria-busy="true"] > button[role="radio"]::before {
2251
2304
  animation: none !important;
2252
2305
  }
2253
2306
  }
@@ -2284,9 +2337,11 @@ cap-toolbar {
2284
2337
  cap-treeview {
2285
2338
  display: flex;
2286
2339
  position: relative;
2340
+ flex: 1 1 auto;
2287
2341
  flex-direction: column;
2288
- min-width: 0;
2289
- min-height: 0;
2342
+ min-inline-size: 0;
2343
+ min-block-size: 0;
2344
+ max-block-size: 100%;
2290
2345
  overflow: auto;
2291
2346
  }
2292
2347
 
@@ -2317,18 +2372,6 @@ cap-treeview {
2317
2372
  height: var(--ui-font-size);
2318
2373
  }
2319
2374
 
2320
- cap-treeview > [role="tree"][aria-busy="true"] > [role="treeitem"]::after {
2321
- content: "";
2322
- position: absolute;
2323
- z-index: 1;
2324
- inset: 0;
2325
- background-image: var(--working-background-image);
2326
- background-repeat: repeat;
2327
- background-size: 2rem 2rem;
2328
- animation: cap-working-progress .55s linear infinite;
2329
- pointer-events: none;
2330
- }
2331
-
2332
2375
  cap-treeview [role="treeitem"]:hover {
2333
2376
  background: var(--button-background-hover);
2334
2377
  }
@@ -2370,12 +2413,6 @@ cap-treeview {
2370
2413
  outline-offset: -1px;
2371
2414
  }
2372
2415
 
2373
- @media (prefers-reduced-motion: reduce) {
2374
- cap-treeview > [role="tree"][aria-busy="true"] > [role="treeitem"]::after {
2375
- animation: none !important;
2376
- }
2377
- }
2378
-
2379
2416
  @media (forced-colors: active) {
2380
2417
  cap-treeview [role="treeitem"][aria-selected="true"] {
2381
2418
  outline: 2px solid Highlight;