@capillaryjs/capillary-ui 1.0.0-alpha.1 → 1.0.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 (56) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +69 -9
  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 +1 -0
  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/tableDataSource.d.ts +7 -1
  13. package/dist/Components/data/table/tableDataSource.d.ts.map +1 -1
  14. package/dist/Components/data/treeview/treeview.d.ts +1 -0
  15. package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
  16. package/dist/Components/layout/groupBox.d.ts +4 -0
  17. package/dist/Components/layout/groupBox.d.ts.map +1 -1
  18. package/dist/Components/layout/header.d.ts.map +1 -1
  19. package/dist/Components/layout/panel.d.ts.map +1 -1
  20. package/dist/Components/layout/sidebar.d.ts +1 -1
  21. package/dist/Components/layout/sidebar.d.ts.map +1 -1
  22. package/dist/Components/lineinputs/LabeledInputControl.d.ts.map +1 -1
  23. package/dist/Components/lineinputs/SelectControl.d.ts.map +1 -1
  24. package/dist/Components/lineinputs/datetime/DatePicker.d.ts +19 -57
  25. package/dist/Components/lineinputs/datetime/DatePicker.d.ts.map +1 -1
  26. package/dist/Components/lineinputs/datetime/DateTimePicker.d.ts +20 -48
  27. package/dist/Components/lineinputs/datetime/DateTimePicker.d.ts.map +1 -1
  28. package/dist/Components/lineinputs/datetime/TemporalInput.d.ts +59 -0
  29. package/dist/Components/lineinputs/datetime/TemporalInput.d.ts.map +1 -0
  30. package/dist/Components/lineinputs/datetime/TimePicker.d.ts +18 -41
  31. package/dist/Components/lineinputs/datetime/TimePicker.d.ts.map +1 -1
  32. package/dist/Components/lineinputs/datetime/localDateTime.d.ts +49 -0
  33. package/dist/Components/lineinputs/datetime/localDateTime.d.ts.map +1 -0
  34. package/dist/Components/lineinputs/datetime/timeString.d.ts +5 -1
  35. package/dist/Components/lineinputs/datetime/timeString.d.ts.map +1 -1
  36. package/dist/Components/lineinputs/textbox.d.ts.map +1 -1
  37. package/dist/Components/lineinputs/toggle.d.ts.map +1 -1
  38. package/dist/Components/menu/button.d.ts.map +1 -1
  39. package/dist/index.d.ts +3 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +2257 -2675
  42. package/dist/index.js.map +1 -1
  43. package/dist/{jsx-dev-runtime-BAF7C1E1.js → jsx-dev-runtime-D3UnwrKT.js} +141 -147
  44. package/dist/jsx-dev-runtime-D3UnwrKT.js.map +1 -0
  45. package/dist/jsx-dev-runtime.js +1 -1
  46. package/dist/jsx-runtime.js +1 -1
  47. package/dist/localization.d.ts +0 -8
  48. package/dist/localization.d.ts.map +1 -1
  49. package/docs/application-composition-guide.md +2 -1
  50. package/package.json +3 -3
  51. package/styles/structural.css +374 -351
  52. package/themes/base.css +5 -3
  53. package/themes/shiny/theme.css +14 -18
  54. package/dist/Components/lineinputs/datetime/Calendar.d.ts +0 -23
  55. package/dist/Components/lineinputs/datetime/Calendar.d.ts.map +0 -1
  56. 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
  }
@@ -724,18 +724,6 @@ cap-datatable {
724
724
  height: var(--ui-font-size);
725
725
  }
726
726
 
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
727
  cap-datatable:has(> cap-error) {
740
728
  outline: 1px solid var(--error-color);
741
729
  outline-offset: -1px;
@@ -745,12 +733,6 @@ cap-datatable {
745
733
  border-color: var(--error-color);
746
734
  }
747
735
 
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
736
  @media (forced-colors: active) {
755
737
  cap-datatable:has(> cap-error) {
756
738
  outline: 2px solid Mark;
@@ -789,6 +771,17 @@ cap-placeholder {
789
771
  }
790
772
  }
791
773
 
774
+ @media (forced-colors: active) {
775
+ cap-placeholder {
776
+ background: CanvasText;
777
+ forced-color-adjust: none;
778
+ }
779
+
780
+ cap-placeholder::after {
781
+ display: none;
782
+ }
783
+ }
784
+
792
785
  cap-datatable > table > thead {
793
786
  color: var(--table-header-color);
794
787
  background: var(--ui-gradient);
@@ -900,22 +893,31 @@ cap-filterpanel {
900
893
  }
901
894
  }
902
895
 
903
- cap-datepicker {
904
- display: flex;
905
- flex-flow: row nowrap;
896
+ cap-datepicker,
897
+ cap-datetimepicker,
898
+ cap-timepicker {
899
+ display: grid;
900
+ grid-template-columns: minmax(var(--input-min-width, 6rem), 1fr);
906
901
  align-items: center;
907
- gap: 0.5em;
908
- position: relative;
909
- min-height: var(--control-min-height, 2rem);
910
902
  min-width: 0;
911
903
  }
912
904
 
913
- cap-datepicker > input {
914
- min-height: var(--control-min-height, 2rem);
915
- width: var(--input-width, 10rem);
905
+ cap-datepicker:has(> label),
906
+ cap-datetimepicker:has(> label),
907
+ cap-timepicker:has(> label) {
908
+ grid-template-columns: max-content minmax(var(--input-min-width, 6rem), 1fr);
909
+ }
910
+
911
+ cap-datepicker > input,
912
+ cap-datetimepicker > input,
913
+ cap-timepicker > input {
914
+ min-height: var(--control-min-height, 2em);
915
+ width: var(--input-width, max-content);
916
916
  max-width: 100%;
917
917
  min-width: var(--input-min-width, 6rem);
918
- padding: var(--space-xs) var(--space-sm);
918
+ margin: 0;
919
+ margin-left: auto;
920
+ padding: 0 5px;
919
921
  color: var(--input-color);
920
922
  background: var(--input-background);
921
923
  border: var(--input-border);
@@ -923,205 +925,66 @@ cap-datepicker {
923
925
  box-shadow: var(--input-shadow);
924
926
  box-sizing: border-box;
925
927
  font: inherit;
926
- user-select: text;
927
- cursor: text;
928
928
  }
929
929
 
930
930
  cap-datepicker > input:disabled,
931
- cap-datepicker > input[readonly] {
931
+ cap-datetimepicker > input:disabled,
932
+ cap-timepicker > input:disabled,
933
+ cap-datepicker > input[readonly],
934
+ cap-datetimepicker > input[readonly],
935
+ cap-timepicker > input[readonly] {
932
936
  color: var(--input-color-disabled);
933
937
  background: var(--input-background-disabled);
934
938
  border-color: var(--ui-input-border-disabled);
935
939
  cursor: not-allowed;
936
940
  }
937
941
 
938
- cap-datepicker > input:focus-visible {
942
+ cap-datepicker > input:focus-visible,
943
+ cap-datetimepicker > input:focus-visible,
944
+ cap-timepicker > input:focus-visible {
939
945
  outline: 2px solid transparent;
940
946
  outline-offset: 1px;
941
947
  box-shadow: var(--focus-ring);
942
948
  }
943
949
 
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"]) {
950
+ cap-datepicker > input[aria-busy="true"]:not([aria-invalid="true"]),
951
+ cap-datetimepicker > input[aria-busy="true"]:not([aria-invalid="true"]),
952
+ cap-timepicker > input[aria-busy="true"]:not([aria-invalid="true"]) {
983
953
  background: var(--working-background-image), var(--input-background);
984
954
  background-repeat: repeat, no-repeat;
985
955
  background-size: 2rem 2rem, 100% 100%;
986
956
  animation: cap-working-progress .55s linear infinite;
987
957
  }
988
958
 
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);
959
+ cap-datepicker > input:disabled[aria-busy="true"]:not([aria-invalid="true"]),
960
+ cap-datetimepicker > input:disabled[aria-busy="true"]:not([aria-invalid="true"]),
961
+ cap-timepicker > input:disabled[aria-busy="true"]:not([aria-invalid="true"]) {
962
+ background: var(--working-background-image), var(--input-background-disabled);
963
+ background-repeat: repeat, no-repeat;
964
+ background-size: 2rem 2rem, 100% 100%;
1057
965
  }
1058
966
 
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;
967
+ cap-datepicker > input[aria-invalid="true"],
968
+ cap-datetimepicker > input[aria-invalid="true"],
969
+ cap-timepicker > input[aria-invalid="true"] {
970
+ border-color: var(--error-color);
1063
971
  }
1064
972
 
1065
973
  @media (prefers-reduced-motion: reduce) {
1066
- cap-datepicker > input[aria-busy="true"] {
974
+ cap-datepicker > input[aria-busy="true"],
975
+ cap-datetimepicker > input[aria-busy="true"],
976
+ cap-timepicker > input[aria-busy="true"] {
1067
977
  animation: none !important;
1068
978
  }
1069
979
  }
1070
980
 
1071
981
  @media (forced-colors: active) {
1072
- cap-datepicker > input[aria-invalid="true"] {
982
+ cap-datepicker > input[aria-invalid="true"],
983
+ cap-datetimepicker > input[aria-invalid="true"],
984
+ cap-timepicker > input[aria-invalid="true"] {
1073
985
  outline: 2px solid Mark;
1074
986
  outline-offset: 1px;
1075
987
  }
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"] {
1118
- outline: 2px solid Mark;
1119
- outline-offset: 1px;
1120
- }
1121
- }
1122
-
1123
- cap-timepicker > cap-selectshell > select {
1124
- min-width: 7rem;
1125
988
  }
1126
989
 
1127
990
  cap-descriptionlist {
@@ -1226,15 +1089,20 @@ cap-optionsbox {
1226
1089
  box-sizing: border-box;
1227
1090
  gap: var(--cap-groupbox-gap, 0 0.35rem);
1228
1091
  padding: var(--cap-groupbox-padding, 0.125rem 0.35rem 0.125rem 0.125rem);
1092
+ padding-top: var(--cap-groupbox-padding-top, .125rem);
1229
1093
  border: var(--cap-groupbox-border, 1px solid var(--ui-border-color));
1230
1094
  border-radius: var(--ui-border-radius);
1231
1095
  position: relative;
1232
1096
  min-width: 0;
1233
1097
  min-height: 0;
1098
+ flex: var(--cap-groupbox-flex, 0 1 auto);
1234
1099
  }
1235
1100
 
1236
1101
  cap-groupbox > cap-header,
1237
1102
  cap-optionsbox > cap-header {
1103
+ position: var(--cap-groupbox-header-position, static);
1104
+ left: var(--cap-groupbox-header-inset, auto);
1105
+ top: var(--cap-groupbox-header-inset, auto);
1238
1106
  display: grid;
1239
1107
  place-items: var(--cap-groupbox-header-align, center);
1240
1108
  box-sizing: border-box;
@@ -1258,12 +1126,11 @@ cap-optionsbox {
1258
1126
  min-width: 0;
1259
1127
  min-height: 0;
1260
1128
  margin-left: var(--cap-groupbox-content-margin, .25em);
1129
+ flex: 1 1 auto;
1261
1130
  }
1262
1131
 
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 {
1132
+ cap-groupbox > cap-content > cap-layout,
1133
+ cap-optionsbox > cap-content > cap-layout {
1267
1134
  gap: .5rem;
1268
1135
  justify-content: flex-start;
1269
1136
  align-content: flex-start;
@@ -1289,6 +1156,10 @@ cap-optionsbox {
1289
1156
  --cap-groupbox-header-writing: vertical-rl;
1290
1157
  --cap-groupbox-header-transform: rotate(180deg);
1291
1158
  --cap-groupbox-content-margin: .25em;
1159
+ --cap-groupbox-flex: 0 1 auto;
1160
+ --cap-groupbox-padding-top: .125rem;
1161
+ --cap-groupbox-header-position: static;
1162
+ --cap-groupbox-header-inset: auto;
1292
1163
  }
1293
1164
 
1294
1165
  [data-cap-context='form'] {
@@ -1298,45 +1169,191 @@ cap-optionsbox {
1298
1169
  --cap-groupbox-border: 1px solid var(--ui-border-color);
1299
1170
  --cap-groupbox-header-align: center start;
1300
1171
  --cap-groupbox-header-width: auto;
1301
- --cap-groupbox-header-padding: 0;
1172
+ --cap-groupbox-header-padding: 2px 5px;
1302
1173
  --cap-groupbox-header-color: var(--text-color);
1303
- --cap-groupbox-header-background: none;
1174
+ --cap-groupbox-header-background: var(--panel-background);
1304
1175
  --cap-groupbox-header-shadow: none;
1305
1176
  --cap-groupbox-header-writing: horizontal-tb;
1306
1177
  --cap-groupbox-header-transform: none;
1307
1178
  --cap-groupbox-content-margin: 0;
1179
+ --cap-groupbox-flex: 0 1 auto;
1180
+ --cap-groupbox-padding-top: 1em;
1181
+ --cap-groupbox-header-position: absolute;
1182
+ --cap-groupbox-header-inset: calc(0px - var(--ui-font-size) / 2);
1308
1183
  }
1309
1184
 
1310
- [data-cap-context='form'] cap-groupbox,
1311
- [data-cap-context='form'] cap-optionsbox {
1312
- flex: 1 1 auto;
1185
+ .cap-layout-horizontal > cap-groupbox,
1186
+ .cap-layout-horizontal > cap-optionsbox {
1187
+ max-inline-size: max-content;
1188
+ min-inline-size: min-content;
1189
+ }
1190
+
1191
+ cap-groupbox.cap-groupbox-section,
1192
+ cap-optionsbox.cap-groupbox-section {
1193
+ display: grid;
1194
+ grid-template-columns: max-content minmax(0, 1fr);
1195
+ grid-template-rows: max-content minmax(max-content, 1fr);
1313
1196
  align-self: stretch;
1314
- padding-top: 1em;
1197
+ align-items: start;
1198
+ gap: 0;
1199
+ padding: 0;
1200
+ padding-top: 0;
1201
+ border: 0;
1202
+ border-radius: 0;
1203
+ min-inline-size: 0;
1204
+ max-inline-size: none;
1205
+ flex: 0 0 auto;
1206
+ }
1207
+
1208
+ cap-groupbox.cap-groupbox-section::before,
1209
+ cap-optionsbox.cap-groupbox-section::before {
1210
+ content: "";
1211
+ grid-column: 2;
1212
+ grid-row: 1;
1213
+ align-self: center;
1214
+ border-block-start: 1px solid var(--ui-border-color);
1215
+ }
1216
+
1217
+ cap-groupbox.cap-groupbox-section > cap-header,
1218
+ cap-optionsbox.cap-groupbox-section > cap-header {
1219
+ position: static;
1220
+ grid-column: 1;
1221
+ grid-row: 1;
1222
+ display: block;
1223
+ width: auto;
1224
+ min-width: 0;
1225
+ min-height: 0;
1226
+ padding: 0 0.5rem 0 0;
1227
+ border-radius: 0;
1228
+ color: var(--text-color);
1229
+ background: transparent;
1230
+ box-shadow: none;
1231
+ writing-mode: horizontal-tb;
1232
+ transform: none;
1233
+ font-size: var(--groupbox-section-font-size, 1.2em);
1234
+ font-weight: 600;
1315
1235
  }
1316
1236
 
1317
- .cap-layout-horizontal cap-groupbox,
1318
- .cap-layout-horizontal cap-optionsbox {
1319
- max-width: 15rem;
1237
+ cap-groupbox.cap-groupbox-section > cap-content,
1238
+ cap-optionsbox.cap-groupbox-section > cap-content {
1239
+ grid-column: 1 / -1;
1240
+ grid-row: 2;
1241
+ margin-left: 0;
1242
+ padding-block: 0.75rem;
1320
1243
  min-width: 0;
1321
1244
  }
1322
1245
 
1323
- .cap-layout-vertical cap-groupbox,
1324
- .cap-layout-vertical cap-optionsbox {
1325
- max-height: 15rem;
1246
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section,
1247
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section {
1248
+ grid-template-columns: max-content minmax(0, 1fr);
1249
+ grid-template-rows: max-content minmax(max-content, 1fr);
1250
+ }
1251
+
1252
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section::before,
1253
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section::before {
1254
+ grid-column: 1;
1255
+ grid-row: 2;
1256
+ justify-self: stretch;
1257
+ align-self: stretch;
1258
+ border-block-start: 0;
1259
+ border-inline-end: 1px solid var(--ui-border-color);
1260
+ }
1261
+
1262
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section > cap-header,
1263
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section > cap-header {
1264
+ padding: 0 0.5rem 0.5rem 0;
1265
+ }
1266
+
1267
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-section > cap-content,
1268
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-section > cap-content {
1269
+ grid-column: 2;
1270
+ grid-row: 1 / -1;
1271
+ padding-block: 0;
1272
+ padding-inline: 0.75rem;
1273
+ min-block-size: 0;
1274
+ }
1275
+
1276
+ cap-groupbox.cap-groupbox-column,
1277
+ cap-optionsbox.cap-groupbox-column {
1278
+ gap: 0;
1279
+ padding: 0 1rem;
1280
+ padding-top: 0;
1281
+ border: 0;
1282
+ border-radius: 0;
1283
+ flex: 0 1 auto;
1284
+ }
1285
+
1286
+ cap-groupbox.cap-groupbox-column > cap-header,
1287
+ cap-optionsbox.cap-groupbox-column > cap-header {
1288
+ position: static;
1289
+ display: block;
1290
+ width: auto;
1291
+ min-width: 0;
1326
1292
  min-height: 0;
1293
+ padding: 0;
1294
+ margin-block-end: 0.75rem;
1295
+ border-radius: 0;
1296
+ color: var(--text-color);
1297
+ background: transparent;
1298
+ box-shadow: none;
1299
+ writing-mode: horizontal-tb;
1300
+ transform: none;
1301
+ font-size: var(--ui-font-size);
1302
+ font-weight: 600;
1327
1303
  }
1328
1304
 
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;
1305
+ cap-groupbox.cap-groupbox-column > cap-content,
1306
+ cap-optionsbox.cap-groupbox-column > cap-content {
1307
+ margin-left: 0;
1308
+ }
1309
+
1310
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column,
1311
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column,
1312
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column,
1313
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column {
1314
+ align-self: stretch;
1315
+ }
1316
+
1317
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column + cap-groupbox.cap-groupbox-column,
1318
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column + cap-optionsbox.cap-groupbox-column {
1319
+ border-inline-start: 1px solid var(--ui-border-color);
1320
+ }
1321
+
1322
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column:first-child,
1323
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column:first-child {
1324
+ padding-inline-start: 0;
1325
+ }
1326
+
1327
+ .cap-layout-horizontal > cap-groupbox.cap-groupbox-column:last-child,
1328
+ .cap-layout-horizontal > cap-optionsbox.cap-groupbox-column:last-child {
1329
+ padding-inline-end: 0;
1330
+ }
1331
+
1332
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column,
1333
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column {
1334
+ padding-inline: 0;
1335
+ padding-block: 1rem;
1336
+ }
1337
+
1338
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column + cap-groupbox.cap-groupbox-column,
1339
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column + cap-optionsbox.cap-groupbox-column {
1340
+ border-block-start: 1px solid var(--ui-border-color);
1341
+ }
1342
+
1343
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column:first-child,
1344
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column:first-child {
1345
+ padding-block-start: 0;
1346
+ }
1347
+
1348
+ .cap-layout-vertical > cap-groupbox.cap-groupbox-column:last-child,
1349
+ .cap-layout-vertical > cap-optionsbox.cap-groupbox-column:last-child {
1350
+ padding-block-end: 0;
1335
1351
  }
1336
1352
 
1337
1353
  cap-header {
1338
1354
  display: block;
1339
1355
  color: var(--section-header-color);
1356
+ font-size: var(--section-header-font-size);
1340
1357
  border-radius: var(--ui-border-radius) var(--ui-border-radius) 0 0;
1341
1358
  padding: .25em;
1342
1359
  background: var(--section-header-background);
@@ -1411,7 +1428,8 @@ cap-listview {
1411
1428
  list-style: none;
1412
1429
  }
1413
1430
 
1414
- cap-listview > [role="listbox"] > [role="option"] {
1431
+ cap-listview > [role="listbox"] > [role="option"],
1432
+ cap-listview > ul[aria-hidden="true"] > li {
1415
1433
  display: flex;
1416
1434
  flex-flow: row nowrap;
1417
1435
  position: relative;
@@ -1422,19 +1440,11 @@ cap-listview {
1422
1440
  border-radius: var(--ui-border-radius);
1423
1441
  box-sizing: border-box;
1424
1442
  user-select: none;
1443
+ align-items: center;
1425
1444
  }
1426
1445
 
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;
1446
+ cap-listview > ul[aria-hidden="true"] cap-placeholder {
1447
+ font-size: var(--ui-font-size);
1438
1448
  }
1439
1449
 
1440
1450
  cap-listview > [role="listbox"] > [role="option"]:hover {
@@ -1454,12 +1464,6 @@ cap-listview {
1454
1464
  border-color: var(--error-color);
1455
1465
  }
1456
1466
 
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
1467
  @media (forced-colors: active) {
1464
1468
  cap-listview:has(> cap-error) {
1465
1469
  outline: 2px solid Mark;
@@ -1612,7 +1616,7 @@ cap-optionsbox > cap-content {
1612
1616
  flex-direction: column;
1613
1617
  align-self: stretch;
1614
1618
  flex: 1 1 0;
1615
- gap: .5em;
1619
+ gap: 1rem;
1616
1620
  }
1617
1621
 
1618
1622
  cap-optionsbox > cap-content * > fieldset > legend {
@@ -1624,8 +1628,8 @@ cap-optionsbox > cap-content {
1624
1628
  color: var(--palette-neutral-950);
1625
1629
  gap: 0.5rem;
1626
1630
  width: 100%;
1627
- padding: 0 0 0.25em;
1628
- margin-bottom: 0.25em;
1631
+ padding: 0 0 0.25rem;
1632
+ margin-bottom: 0.25rem;
1629
1633
  border-bottom: 1px solid var(--ui-border-color);
1630
1634
  user-select: none;
1631
1635
  }
@@ -1639,7 +1643,7 @@ cap-optionsbox > cap-content {
1639
1643
  align-content: stretch;
1640
1644
  box-sizing: border-box;
1641
1645
  width: 100%;
1642
- gap: 0;
1646
+ gap: .33rem;
1643
1647
  padding: .25em 0 .5em 0;
1644
1648
  }
1645
1649
 
@@ -1661,8 +1665,12 @@ cap-panel {
1661
1665
  flex: 1 1 auto;
1662
1666
  min-width: 0;
1663
1667
  min-height: 0;
1664
- padding: var(--panel-padding, 0.75rem);
1665
- gap: var(--spacing-medium, 1rem);
1668
+ padding: var(--panel-content-padding, var(--panel-padding, 0.75rem));
1669
+ gap: var(--spacing-small, 1rem);
1670
+ }
1671
+
1672
+ cap-panel.island:has(> cap-header) > cap-layout.panel-content:has(> [data-cap-surface='data']:only-child) {
1673
+ --panel-content-padding: 0;
1666
1674
  }
1667
1675
 
1668
1676
  cap-panel[aria-disabled="true"] {
@@ -1854,30 +1862,24 @@ cap-routeoutlet {
1854
1862
 
1855
1863
  cap-sidebar {
1856
1864
  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
1865
  flex-direction: column;
1865
1866
  min-width: 0;
1866
1867
  min-height: 0;
1868
+ flex: 1 1 auto;
1867
1869
  overflow: hidden;
1868
1870
  }
1869
1871
 
1870
- cap-sidebar > aside > cap-header,
1871
- cap-sidebar > aside > cap-toolbarcontent {
1872
+ cap-sidebar > cap-header,
1873
+ cap-sidebar > cap-toolbarcontent {
1872
1874
  flex: none;
1873
1875
  }
1874
1876
 
1875
- cap-sidebar > aside > cap-toolbarcontent {
1877
+ cap-sidebar > cap-toolbarcontent {
1876
1878
  min-width: 0;
1877
1879
  overflow-x: auto;
1878
1880
  }
1879
1881
 
1880
- cap-sidebar > aside > cap-content {
1882
+ cap-sidebar > cap-content {
1881
1883
  flex: 1;
1882
1884
  min-height: 0;
1883
1885
  overflow: auto;
@@ -2062,20 +2064,23 @@ cap-tabpanel {
2062
2064
  }
2063
2065
 
2064
2066
  cap-textbox {
2065
- display: flex;
2066
- flex-flow: row nowrap;
2067
+ display: grid;
2068
+ grid-template-columns: minmax(var(--input-min-width, 6rem), 1fr);
2067
2069
  align-items: center;
2068
- justify-content: center;
2069
- min-height: var(--control-min-height, 2rem);
2070
2070
  min-width: 0;
2071
- line-height: normal;
2071
+ }
2072
+
2073
+ cap-textbox:has(> label) {
2074
+ grid-template-columns: max-content minmax(var(--input-min-width, 6rem), 1fr);
2072
2075
  }
2073
2076
 
2074
2077
  cap-textbox > input {
2075
- min-height: var(--control-min-height, 2rem);
2078
+ min-height: var(--control-min-height, 2em);
2076
2079
  width: var(--input-width, 15rem);
2077
2080
  max-width: 100%;
2078
2081
  min-width: var(--input-min-width, 6rem);
2082
+ margin: 0;
2083
+ padding: 0 5px;
2079
2084
  color: var(--input-color);
2080
2085
  background: var(--input-background);
2081
2086
  border: var(--input-border);
@@ -2083,6 +2088,7 @@ cap-textbox {
2083
2088
  box-shadow: var(--input-shadow);
2084
2089
  box-sizing: border-box;
2085
2090
  font: inherit;
2091
+ appearance: none;
2086
2092
  pointer-events: all;
2087
2093
  user-select: text;
2088
2094
  white-space: nowrap;
@@ -2134,7 +2140,7 @@ cap-textbox {
2134
2140
  }
2135
2141
 
2136
2142
  cap-toggle {
2137
- min-height: var(--control-min-height, 2rem);
2143
+ min-height: var(--control-min-height, 2em);
2138
2144
  display: flex;
2139
2145
  position: relative;
2140
2146
  flex-flow: row nowrap;
@@ -2152,7 +2158,7 @@ cap-toggle {
2152
2158
 
2153
2159
  cap-toggle > cap-options {
2154
2160
  display: flex;
2155
- min-height: var(--control-min-height, 2rem);
2161
+ min-height: var(--control-min-height, 2em);
2156
2162
  border-radius: var(--radius-md);
2157
2163
  box-shadow: var(--toggle-group-shadow);
2158
2164
  box-sizing: border-box;
@@ -2162,63 +2168,98 @@ cap-toggle {
2162
2168
  }
2163
2169
 
2164
2170
  cap-toggle > cap-options > button[role="radio"] {
2165
- min-height: var(--control-min-height, 2rem);
2171
+ display: inline-flex;
2172
+ align-items: center;
2173
+ justify-content: center;
2174
+ min-height: var(--control-min-height, 2em);
2175
+ min-width: 2em;
2176
+ margin: 0;
2177
+ padding: 0 6px;
2166
2178
  position: relative;
2167
- font-family: inherit;
2168
- font-size: var(--ui-font-size);
2179
+ isolation: isolate;
2180
+ font: inherit;
2169
2181
  color: var(--button-color);
2170
- background: var(--toggle-button-background);
2182
+ background: transparent;
2171
2183
  user-select: none;
2172
2184
  white-space: nowrap;
2173
2185
  box-sizing: border-box;
2186
+ border: 0;
2187
+ border-radius: 0;
2188
+ cursor: default;
2189
+ }
2190
+
2191
+ /* Chrome may overlap adjacent segments, but never moves their text. */
2192
+ cap-toggle > cap-options > button[role="radio"]::before {
2193
+ content: '';
2194
+ position: absolute;
2195
+ inset: 0;
2196
+ z-index: -1;
2197
+ pointer-events: none;
2198
+ box-sizing: border-box;
2199
+ background: var(--toggle-button-background);
2174
2200
  border: var(--button-border);
2175
2201
  border-left: none;
2176
2202
  border-right: none;
2177
- border-radius: 0;
2203
+ border-radius: inherit;
2178
2204
  box-shadow: var(--toggle-button-shadow);
2179
- cursor: default;
2180
2205
  }
2181
2206
 
2182
- cap-toggle > cap-options > button[role="radio"]:hover:not(:disabled)[aria-checked="false"] {
2207
+ cap-toggle > cap-options > button[role="radio"]:hover:not(:disabled)[aria-checked="false"]::before {
2183
2208
  background: var(--button-background-hover);
2184
2209
  }
2185
2210
 
2186
2211
  cap-toggle > cap-options > button[role="radio"]:first-of-type {
2187
2212
  border-radius: var(--radius-md) 0 0 var(--radius-md);
2213
+ }
2214
+
2215
+ cap-toggle > cap-options > button[role="radio"]:first-of-type::before {
2188
2216
  border: var(--button-border);
2189
2217
  border-right: none;
2190
2218
  }
2191
2219
 
2192
2220
  cap-toggle > cap-options > button[role="radio"]:last-of-type {
2193
2221
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
2222
+ }
2223
+
2224
+ cap-toggle > cap-options > button[role="radio"]:only-of-type {
2225
+ border-radius: var(--radius-md);
2226
+ }
2227
+
2228
+ cap-toggle > cap-options > button[role="radio"]:last-of-type::before {
2194
2229
  border: var(--button-border);
2195
2230
  border-left: none;
2196
2231
  }
2197
2232
 
2198
2233
  cap-toggle > cap-options > button[role="radio"][aria-checked="false"]
2199
- + [role="radio"][aria-checked="false"] {
2234
+ + [role="radio"][aria-checked="false"]::before {
2200
2235
  border-inline-start: var(--button-border);
2201
2236
  border-inline-start-color: var(--toggle-inactive-shared-border-color);
2202
2237
  }
2203
2238
 
2204
2239
  cap-toggle > cap-options > button[role="radio"][aria-checked="true"] {
2205
2240
  color: var(--selection-color);
2241
+ z-index: var(--toggle-button-selected-z-index);
2242
+ }
2243
+
2244
+ cap-toggle > cap-options > button[role="radio"][aria-checked="true"]::before {
2206
2245
  background: var(--toggle-button-background-checked);
2207
2246
  border: var(--toggle-button-border-checked);
2208
2247
  box-shadow: none;
2209
- margin-inline: var(--toggle-button-selected-inline-overlap);
2210
- z-index: var(--toggle-button-selected-z-index);
2248
+ inset-inline: var(--toggle-button-selected-inline-overlap);
2211
2249
  }
2212
2250
 
2213
2251
  cap-toggle > cap-options > button[role="radio"]:disabled {
2214
2252
  color: var(--input-color-disabled);
2253
+ cursor: not-allowed;
2254
+ }
2255
+
2256
+ cap-toggle > cap-options > button[role="radio"]:disabled::before {
2215
2257
  background: var(--button-background-disabled);
2216
2258
  border: var(--button-border-disabled);
2217
- cursor: not-allowed;
2218
2259
  }
2219
2260
 
2220
2261
  cap-toggle > cap-options[aria-busy="true"]:not([aria-invalid="true"])
2221
- > button[role="radio"] {
2262
+ > button[role="radio"]::before {
2222
2263
  background: var(--working-background-image), var(--toggle-button-background);
2223
2264
  background-repeat: repeat, no-repeat;
2224
2265
  background-size: 2rem 2rem, 100% 100%;
@@ -2226,13 +2267,13 @@ cap-toggle {
2226
2267
  }
2227
2268
 
2228
2269
  cap-toggle > cap-options[aria-busy="true"]:not([aria-invalid="true"])
2229
- > button[role="radio"][aria-checked="true"] {
2270
+ > button[role="radio"][aria-checked="true"]::before {
2230
2271
  background: var(--working-background-image), var(--toggle-button-background-checked);
2231
2272
  background-repeat: repeat, no-repeat;
2232
2273
  background-size: 2rem 2rem, 100% 100%;
2233
2274
  }
2234
2275
 
2235
- cap-toggle > cap-options[aria-invalid="true"] > button[role="radio"] {
2276
+ cap-toggle > cap-options[aria-invalid="true"] > button[role="radio"]::before {
2236
2277
  border-color: var(--error-color);
2237
2278
  }
2238
2279
 
@@ -2247,7 +2288,7 @@ cap-toggle {
2247
2288
  }
2248
2289
 
2249
2290
  @media (prefers-reduced-motion: reduce) {
2250
- cap-toggle > cap-options[aria-busy="true"] > button[role="radio"] {
2291
+ cap-toggle > cap-options[aria-busy="true"] > button[role="radio"]::before {
2251
2292
  animation: none !important;
2252
2293
  }
2253
2294
  }
@@ -2317,18 +2358,6 @@ cap-treeview {
2317
2358
  height: var(--ui-font-size);
2318
2359
  }
2319
2360
 
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
2361
  cap-treeview [role="treeitem"]:hover {
2333
2362
  background: var(--button-background-hover);
2334
2363
  }
@@ -2370,12 +2399,6 @@ cap-treeview {
2370
2399
  outline-offset: -1px;
2371
2400
  }
2372
2401
 
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
2402
  @media (forced-colors: active) {
2380
2403
  cap-treeview [role="treeitem"][aria-selected="true"] {
2381
2404
  outline: 2px solid Highlight;