@swiftwc/ui 0.0.0-dev.21 → 0.0.0-dev.22

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 (54) hide show
  1. package/generated/components/bordered-button.d.ts +4 -0
  2. package/generated/components/bordered-button.js +8 -1
  3. package/generated/components/bordered-prominent-button.d.ts +4 -0
  4. package/generated/components/bordered-prominent-button.js +8 -1
  5. package/generated/components/borderless-button.d.ts +4 -0
  6. package/generated/components/borderless-button.js +8 -1
  7. package/generated/components/date-picker.js +10 -4
  8. package/generated/components/glass-button.d.ts +4 -0
  9. package/generated/components/glass-button.js +8 -1
  10. package/generated/components/glass-prominent-button.d.ts +4 -0
  11. package/generated/components/glass-prominent-button.js +8 -1
  12. package/generated/components/label-view.js +1 -33
  13. package/generated/components/picker-view.js +19 -15
  14. package/generated/components/scroll-view.js +8 -3
  15. package/generated/components/sheet-view.d.ts +0 -1
  16. package/generated/components/sheet-view.js +19 -7
  17. package/generated/components/sidebar-toggle.js +1 -1
  18. package/generated/components/tab-view.js +7 -7
  19. package/generated/components/table-view.js +11 -5
  20. package/generated/components/text-field.js +9 -4
  21. package/generated/components/tool-bar-item-group.d.ts +0 -2
  22. package/generated/components/tool-bar-item-group.js +15 -26
  23. package/generated/components/tool-bar-item.d.ts +0 -2
  24. package/generated/components/tool-bar-item.js +17 -28
  25. package/generated/components/tool-bar.d.ts +12 -0
  26. package/generated/components/tool-bar.js +19 -6
  27. package/generated/css/index.css +270 -70
  28. package/generated/events/tab-view.d.ts +6 -2
  29. package/generated/internal/class/css-style-observer.js +1 -1
  30. package/generated/internal/utils/button-role.js +25 -5
  31. package/generated/internal/utils/index.d.ts +0 -1
  32. package/generated/internal/utils/index.js +0 -1
  33. package/package.json +1 -1
  34. package/scss/_vars.scss +5 -0
  35. package/scss/base/_reboot.scss +10 -0
  36. package/scss/colors/_index.scss +37 -19
  37. package/scss/components/_bordered-button.scss +14 -0
  38. package/scss/components/_bordered-prominent-button.scss +13 -0
  39. package/scss/components/_borderless-button.scss +4 -0
  40. package/scss/components/_content-unavailable-view.scss +1 -1
  41. package/scss/components/_disclosure-group.scss +80 -33
  42. package/scss/components/_glass-button.scss +14 -0
  43. package/scss/components/_glass-prominent-button.scss +14 -0
  44. package/scss/components/_label-view.scss +42 -16
  45. package/scss/components/_label-view.scss.txt +536 -0
  46. package/scss/components/_sheet-view.scss +12 -12
  47. package/scss/components/_tab-bar.scss +5 -0
  48. package/scss/components/_tool-bar-item.scss +19 -0
  49. package/scss/components/_tool-bar.scss +25 -0
  50. package/scss/placeholders/_buttons.scss +72 -37
  51. package/scss/transitions/_tab-bar.scss +6 -5
  52. package/web-components.html-data/en.json +12 -21
  53. package/generated/internal/utils/toolbar-repositioner.d.ts +0 -1
  54. package/generated/internal/utils/toolbar-repositioner.js +0 -12
@@ -360,6 +360,10 @@
360
360
  select {
361
361
  text-transform: none;
362
362
  }
363
+ .ph,
364
+ .ph::before {
365
+ display: grid;
366
+ }
363
367
  button,
364
368
  *::part(button),
365
369
  input,
@@ -409,7 +413,7 @@
409
413
  transition: font-size 1ms step-start;
410
414
  }
411
415
  html::before {
412
- content: "ipad-sheet-view-height=27.75rem&ipad-sheet-view-inline-size=37rem&vt-fwd-class-name=fwd";
416
+ content: "delete-button-icon=trash&confirm-button-icon=check&close-button-icon=x&cancel-button-icon=x&ipad-sheet-view-height=27.75rem&ipad-sheet-view-inline-size=37rem&vt-fwd-class-name=fwd";
413
417
  display: none;
414
418
  }
415
419
  }
@@ -880,24 +884,30 @@
880
884
  padding-inline: var(--btnpadistart,) var(--btnpadiend,);
881
885
  padding-block: var(--btnpadbstart,) var(--btnpadbend,);
882
886
  border-radius: var(--btnradiustl,) var(--btnradiustr,) var(--btnradiusbr,) var(--btnradiusbl,);
883
- --btnpadistart: var(--regular-btn-padding);
884
- --btnpadiend: var(--regular-btn-padding);
885
- --btnpadbstart: var(--regular-btn-padding);
886
- --btnpadbend: var(--regular-btn-padding);
887
887
  --btnradiustl: var(--regular-btn-border-radius);
888
888
  --btnradiustr: var(--regular-btn-border-radius);
889
889
  --btnradiusbl: var(--regular-btn-border-radius);
890
890
  --btnradiusbr: var(--regular-btn-border-radius);
891
891
  }
892
+ :where([is=glass-prominent-button] > [slot], [is=glass-button] > [slot], [is=bordered-prominent-button] > [slot], [is=bordered-button] > [slot], [is=borderless-button] > [slot], [is=plain-button] > [slot]) {
893
+ position: absolute;
894
+ visibility: collapse;
895
+ max-inline-size: 90%;
896
+ max-block-size: 90%;
897
+ border-radius: inherit;
898
+ }
899
+ :where([is=glass-prominent-button] > [slot=overlay], [is=glass-button] > [slot=overlay], [is=bordered-prominent-button] > [slot=overlay], [is=bordered-button] > [slot=overlay], [is=borderless-button] > [slot=overlay], [is=plain-button] > [slot=overlay]) {
900
+ visibility: visible;
901
+ }
902
+ :where([is=glass-prominent-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=glass-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=bordered-prominent-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=bordered-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=borderless-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=plain-button]:not(:has(> :not([slot]))) > [slot=placeholder]) {
903
+ position: relative;
904
+ visibility: visible;
905
+ }
892
906
  :where([is=glass-prominent-button]:has(> [slot=overlay]) > *:not([slot=overlay]), [is=glass-button]:has(> [slot=overlay]) > *:not([slot=overlay]), [is=bordered-prominent-button]:has(> [slot=overlay]) > *:not([slot=overlay]), [is=bordered-button]:has(> [slot=overlay]) > *:not([slot=overlay]), [is=borderless-button]:has(> [slot=overlay]) > *:not([slot=overlay]), [is=plain-button]:has(> [slot=overlay]) > *:not([slot=overlay])) {
893
907
  opacity: 0;
894
908
  }
895
909
  :where([is=glass-prominent-button]:has(> [slot=overlay]) > [slot=overlay], [is=glass-button]:has(> [slot=overlay]) > [slot=overlay], [is=bordered-prominent-button]:has(> [slot=overlay]) > [slot=overlay], [is=bordered-button]:has(> [slot=overlay]) > [slot=overlay], [is=borderless-button]:has(> [slot=overlay]) > [slot=overlay], [is=plain-button]:has(> [slot=overlay]) > [slot=overlay]) {
896
- position: absolute;
897
910
  transition: opacity ease-out 200ms;
898
- max-inline-size: 90%;
899
- max-block-size: 90%;
900
- border-radius: inherit;
901
911
  }
902
912
  @starting-style {
903
913
  :where([is=glass-prominent-button]:has(> [slot=overlay]) > [slot=overlay], [is=glass-button]:has(> [slot=overlay]) > [slot=overlay], [is=bordered-prominent-button]:has(> [slot=overlay]) > [slot=overlay], [is=bordered-button]:has(> [slot=overlay]) > [slot=overlay], [is=borderless-button]:has(> [slot=overlay]) > [slot=overlay], [is=plain-button]:has(> [slot=overlay]) > [slot=overlay]) {
@@ -905,35 +915,35 @@
905
915
  }
906
916
  }
907
917
  :where([control-size=mini][is=glass-prominent-button], [control-size=mini][is=glass-button], [control-size=mini][is=bordered-prominent-button], [control-size=mini][is=bordered-button], [control-size=mini][is=borderless-button], [control-size=mini][is=plain-button]) {
908
- --btnpadistart: var(--mini-btn-padding);
909
- --btnpadiend: var(--mini-btn-padding);
910
- --btnpadbstart: var(--mini-btn-padding);
911
- --btnpadbend: var(--mini-btn-padding);
912
918
  --btnradiustl: var(--mini-btn-border-radius);
913
919
  --btnradiustr: var(--mini-btn-border-radius);
914
920
  --btnradiusbl: var(--mini-btn-border-radius);
915
921
  --btnradiusbr: var(--mini-btn-border-radius);
916
922
  }
923
+ :where([control-size=regular][is=glass-prominent-button], [control-size=regular][is=glass-button], [control-size=regular][is=bordered-prominent-button], [control-size=regular][is=bordered-button], [control-size=regular][is=borderless-button], [control-size=regular][is=plain-button]) {
924
+ --btnradiustl: var(--regular-btn-border-radius);
925
+ --btnradiustr: var(--regular-btn-border-radius);
926
+ --btnradiusbl: var(--regular-btn-border-radius);
927
+ --btnradiusbr: var(--regular-btn-border-radius);
928
+ }
917
929
  :where([control-size=small][is=glass-prominent-button], [control-size=small][is=glass-button], [control-size=small][is=bordered-prominent-button], [control-size=small][is=bordered-button], [control-size=small][is=borderless-button], [control-size=small][is=plain-button]) {
918
- --btnpadistart: var(--small-btn-padding);
919
- --btnpadiend: var(--small-btn-padding);
920
- --btnpadbstart: var(--small-btn-padding);
921
- --btnpadbend: var(--small-btn-padding);
922
930
  --btnradiustl: var(--small-btn-border-radius);
923
931
  --btnradiustr: var(--small-btn-border-radius);
924
932
  --btnradiusbl: var(--small-btn-border-radius);
925
933
  --btnradiusbr: var(--small-btn-border-radius);
926
934
  }
927
935
  :where([control-size=large][is=glass-prominent-button], [control-size=large][is=glass-button], [control-size=large][is=bordered-prominent-button], [control-size=large][is=bordered-button], [control-size=large][is=borderless-button], [control-size=large][is=plain-button]) {
928
- --btnpadistart: var(--large-btn-padding);
929
- --btnpadiend: var(--large-btn-padding);
930
- --btnpadbstart: var(--large-btn-padding);
931
- --btnpadbend: var(--large-btn-padding);
932
936
  --btnradiustl: var(--large-btn-border-radius);
933
937
  --btnradiustr: var(--large-btn-border-radius);
934
938
  --btnradiusbl: var(--large-btn-border-radius);
935
939
  --btnradiusbr: var(--large-btn-border-radius);
936
940
  }
941
+ [control-size=small][is=glass-prominent-button], [control-size=small][is=glass-button], [control-size=small][is=bordered-prominent-button], [control-size=small][is=bordered-button], [control-size=small][is=borderless-button], [control-size=small][is=plain-button] {
942
+ --label-font: callout;
943
+ }
944
+ [control-size=mini][is=glass-prominent-button], [control-size=mini][is=glass-button], [control-size=mini][is=bordered-prominent-button], [control-size=mini][is=bordered-button], [control-size=mini][is=borderless-button], [control-size=mini][is=plain-button] {
945
+ --label-font: caption;
946
+ }
937
947
  }
938
948
  @layer sw-colors {
939
949
  :where([is=glass-prominent-button]:not(:disabled):not([readonly]), [is=glass-button]:not(:disabled):not([readonly]), [is=bordered-prominent-button]:not(:disabled):not([readonly]), [is=bordered-button]:not(:disabled):not([readonly]), [is=borderless-button]:not(:disabled):not([readonly]), [is=plain-button]:not(:disabled):not([readonly])):focus-visible {
@@ -950,17 +960,6 @@
950
960
  }
951
961
  }
952
962
  }
953
- @layer sw-utils {
954
- :where([is=glass-prominent-button] > [slot], [is=glass-button] > [slot], [is=bordered-prominent-button] > [slot], [is=bordered-button] > [slot], [is=borderless-button] > [slot], [is=plain-button] > [slot]) {
955
- display: none;
956
- }
957
- :where([is=glass-prominent-button]:has(> [slot=overlay]) > [slot=overlay], [is=glass-button]:has(> [slot=overlay]) > [slot=overlay], [is=bordered-prominent-button]:has(> [slot=overlay]) > [slot=overlay], [is=bordered-button]:has(> [slot=overlay]) > [slot=overlay], [is=borderless-button]:has(> [slot=overlay]) > [slot=overlay], [is=plain-button]:has(> [slot=overlay]) > [slot=overlay]) {
958
- display: grid;
959
- }
960
- :where([is=glass-prominent-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=glass-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=bordered-prominent-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=bordered-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=borderless-button]:not(:has(> :not([slot]))) > [slot=placeholder], [is=plain-button]:not(:has(> :not([slot]))) > [slot=placeholder]) {
961
- display: grid;
962
- }
963
- }
964
963
  @layer sw-actions {
965
964
  :where([is=glass-prominent-button]:not(:disabled):not([readonly]), [is=glass-button]:not(:disabled):not([readonly]), [is=bordered-prominent-button]:not(:disabled):not([readonly]), [is=bordered-button]:not(:disabled):not([readonly]), [is=borderless-button]:not(:disabled):not([readonly]), [is=plain-button]:not(:disabled):not([readonly])):active {
966
965
  --btnface: var(--btnactiveface,);
@@ -1215,12 +1214,25 @@
1215
1214
  :where([is=disclosure-group]) {
1216
1215
  overflow: clip;
1217
1216
  --disclosure--host-details-content-block-size: 0;
1218
- --disclosure-style: ;
1219
- --disclosure--summary-grid-template-columns: ;
1220
- --disclosure--summary-grid-auto-flow: ;
1221
- --disclosure--summary-gap: ;
1222
- --disclosure--marker-display: ;
1223
- --disclosure--marker-transform: ;
1217
+ }
1218
+ @supports (x: if(else:red)) {
1219
+ :where([is=disclosure-group]) {
1220
+ --disclosure--marker-display: if(style(--disclosure-style: marker-trailing): ; style(--disclosure-style: marker-leading): ; else: none;);
1221
+ --disclosure--summary-grid-auto-flow: if(style(--disclosure-style: marker-trailing): column ; style(--disclosure-style: marker-leading): column ;);
1222
+ --disclosure--summary-gap: if(style(--disclosure-style: marker-trailing): 0.1rem ; style(--disclosure-style: marker-leading): 0.1rem ;);
1223
+ --disclosure--summary-grid-template-columns: if(style(--disclosure-style: marker-trailing): minmax(0, 1fr) auto ; style(--disclosure-style: marker-leading): auto minmax(0, 1fr) ;);
1224
+ --disclosure--marker-order: if(style(--disclosure-style: marker-leading): -1 ;);
1225
+ }
1226
+ }
1227
+ @supports not (x: if(else:red)) {
1228
+ :where([is=disclosure-group]) {
1229
+ --disclosure-style: ;
1230
+ --disclosure--summary-grid-template-columns: ;
1231
+ --disclosure--summary-grid-auto-flow: ;
1232
+ --disclosure--summary-gap: ;
1233
+ --disclosure--marker-display: none;
1234
+ --disclosure--marker-transform: ;
1235
+ }
1224
1236
  }
1225
1237
  :where([is=disclosure-group] > summary) {
1226
1238
  gap: var(--disclosure--summary-gap, );
@@ -1244,26 +1256,28 @@
1244
1256
  transform: var(--disclosure--marker-transform, );
1245
1257
  order: var(--disclosure--marker-order, );
1246
1258
  }
1247
- @container not (style(--disclosure-style: marker-trailing) or style(--disclosure-style: marker-leading)) {
1248
- :where([is=disclosure-group] > summary) {
1249
- --disclosure--marker-display: none;
1259
+ @supports not (x: if(else:red)) {
1260
+ @container style(--disclosure-style: marker-trailing) or style(--disclosure-style: marker-leading) {
1261
+ :where([is=disclosure-group] > summary) {
1262
+ --disclosure--marker-display: grid;
1263
+ }
1250
1264
  }
1251
- }
1252
- @container style(--disclosure-style: marker-trailing) or style(--disclosure-style: marker-leading) {
1253
- :where([is=disclosure-group] > summary) {
1254
- --disclosure--summary-grid-auto-flow: column;
1255
- --disclosure--summary-gap: 0.1rem;
1265
+ @container style(--disclosure-style: marker-trailing) or style(--disclosure-style: marker-leading) {
1266
+ :where([is=disclosure-group] > summary) {
1267
+ --disclosure--summary-grid-auto-flow: column;
1268
+ --disclosure--summary-gap: 0.1rem;
1269
+ }
1256
1270
  }
1257
- }
1258
- @container style(--disclosure-style: marker-trailing) {
1259
- :where([is=disclosure-group] > summary) {
1260
- --disclosure--summary-grid-template-columns: minmax(0, 1fr) auto;
1271
+ @container style(--disclosure-style: marker-trailing) {
1272
+ :where([is=disclosure-group] > summary) {
1273
+ --disclosure--summary-grid-template-columns: minmax(0, 1fr) auto;
1274
+ }
1261
1275
  }
1262
- }
1263
- @container style(--disclosure-style: marker-leading) {
1264
- :where([is=disclosure-group] > summary) {
1265
- --disclosure--summary-grid-template-columns: auto minmax(0, 1fr);
1266
- --disclosure--marker-order: -1;
1276
+ @container style(--disclosure-style: marker-leading) {
1277
+ :where([is=disclosure-group] > summary) {
1278
+ --disclosure--summary-grid-template-columns: auto minmax(0, 1fr);
1279
+ --disclosure--marker-order: -1;
1280
+ }
1267
1281
  }
1268
1282
  }
1269
1283
  :where([is=disclosure-group])::details-content {
@@ -1303,9 +1317,25 @@
1303
1317
  :where([is=disclosure-group][disclosure-style=marker-trailing]) {
1304
1318
  --disclosure-style: marker-trailing;
1305
1319
  }
1320
+ @supports not (x: if(else:red)) {
1321
+ :where([is=disclosure-group][disclosure-style=marker-trailing]) {
1322
+ --disclosure--marker-display: grid;
1323
+ --disclosure--summary-grid-auto-flow: column;
1324
+ --disclosure--summary-gap: 0.1rem;
1325
+ --disclosure--summary-grid-template-columns: minmax(0, 1fr) auto;
1326
+ }
1327
+ }
1306
1328
  :where([is=disclosure-group][disclosure-style=marker-leading]) {
1307
1329
  --disclosure-style: marker-leading;
1308
1330
  }
1331
+ @supports not (x: if(else:red)) {
1332
+ :where([is=disclosure-group][disclosure-style=marker-leading]) {
1333
+ --disclosure--marker-display: grid;
1334
+ --disclosure--summary-grid-auto-flow: column;
1335
+ --disclosure--summary-gap: 0.1rem;
1336
+ --disclosure--summary-grid-template-columns: auto minmax(0, 1fr);
1337
+ }
1338
+ }
1309
1339
  :where([is=disclosure-group][disclosure-style=marker-hidden]) {
1310
1340
  --disclosure-style: ;
1311
1341
  }
@@ -1490,14 +1520,6 @@
1490
1520
  transform: var(--sheet-view-translate, );
1491
1521
  --sheet-view-translate: translateY(var(--view-transition-dialog-offscreen-y));
1492
1522
  }
1493
- :where(:where([is=sheet-view]) > tool-bar > [slot=top-bar-leading], :where([is=sheet-view]) > tool-bar > [slot=top-bar-trailing]) {
1494
- --label-style: icon-only;
1495
- }
1496
- @media (pointer: coarse) {
1497
- :where(:where([is=sheet-view]) > tool-bar > [slot^=bottom-bar-]) {
1498
- --label-style: icon-only;
1499
- }
1500
- }
1501
1523
  @media (pointer: coarse) and (orientation: portrait) {
1502
1524
  :where([is=sheet-view]) {
1503
1525
  clip-path: inset(var(--safe-area-inset-top) 0 0 0 round 2rem 2rem 0 0);
@@ -1546,7 +1568,7 @@
1546
1568
  --label-font: title3;
1547
1569
  }
1548
1570
  content-unavailable-view > :not([slot]) {
1549
- --label-image-size: 5rem;
1571
+ --label-image-size: 5;
1550
1572
  --label-gap: 1rem;
1551
1573
  }
1552
1574
  :where(content-unavailable-view:not(:has(> [slot=description])))::part(content-unavailable-description-stack) {
@@ -1969,6 +1991,17 @@
1969
1991
  place-items: center;
1970
1992
  place-content: center;
1971
1993
  }
1994
+ :where(tool-bar-item > button:has(> label-view > :not([slot])) > label-view,
1995
+ tool-bar-item > picker-view > menu-view:has(> label-view > :not([slot])) > label-view,
1996
+ tool-bar-item > menu-view:has(> label-view > :not([slot])) > label-view) {
1997
+ --label-padding-inline: 0.5rem;
1998
+ }
1999
+ @media (pointer: fine) {
2000
+ :where(tool-bar-item > button > label-view,
2001
+ tool-bar-item > menu-view > label-view) {
2002
+ --label-image-size: 1.8;
2003
+ }
2004
+ }
1972
2005
  }
1973
2006
  @layer sw-colors {
1974
2007
  :where(menu-view:not(:disabled):not([readonly])):focus-visible {
@@ -2015,6 +2048,12 @@
2015
2048
  }
2016
2049
  }
2017
2050
  @layer sw-components {
2051
+ :where([is=borderless-button]) {
2052
+ --btnpadistart: 0.1rem;
2053
+ --btnpadiend: 0.1rem;
2054
+ --btnpadbstart: 0.1rem;
2055
+ --btnpadbend: 0.1rem;
2056
+ }
2018
2057
  :where([is=borderless-button][role=destructive]) {
2019
2058
  --accentColor: var(--red);
2020
2059
  --accentColor2: var(--red2);
@@ -2029,11 +2068,41 @@
2029
2068
  }
2030
2069
  }
2031
2070
  @layer sw-components {
2071
+ :where([is=bordered-button]) {
2072
+ --btnpadistart: var(--regular-btn-padding);
2073
+ --btnpadiend: var(--regular-btn-padding);
2074
+ --btnpadbstart: var(--regular-btn-padding);
2075
+ --btnpadbend: var(--regular-btn-padding);
2076
+ }
2032
2077
  @media (pointer: fine) {
2033
2078
  :where([is=bordered-button]) {
2034
2079
  --accentColor: var(--primary);
2035
2080
  }
2036
2081
  }
2082
+ :where([is=bordered-button][control-size=mini]) {
2083
+ --btnpadistart: var(--mini-btn-padding);
2084
+ --btnpadiend: var(--mini-btn-padding);
2085
+ --btnpadbstart: var(--mini-btn-padding);
2086
+ --btnpadbend: var(--mini-btn-padding);
2087
+ }
2088
+ :where([is=bordered-button][control-size=regular]) {
2089
+ --btnpadistart: var(--regular-btn-padding);
2090
+ --btnpadiend: var(--regular-btn-padding);
2091
+ --btnpadbstart: var(--regular-btn-padding);
2092
+ --btnpadbend: var(--regular-btn-padding);
2093
+ }
2094
+ :where([is=bordered-button][control-size=small]) {
2095
+ --btnpadistart: var(--small-btn-padding);
2096
+ --btnpadiend: var(--small-btn-padding);
2097
+ --btnpadbstart: var(--small-btn-padding);
2098
+ --btnpadbend: var(--small-btn-padding);
2099
+ }
2100
+ :where([is=bordered-button][control-size=large]) {
2101
+ --btnpadistart: var(--large-btn-padding);
2102
+ --btnpadiend: var(--large-btn-padding);
2103
+ --btnpadbstart: var(--large-btn-padding);
2104
+ --btnpadbend: var(--large-btn-padding);
2105
+ }
2037
2106
  :where([is=bordered-button][role=destructive]) {
2038
2107
  --accentColor: var(--red);
2039
2108
  --accentColor2: var(--red2);
@@ -2048,6 +2117,36 @@
2048
2117
  }
2049
2118
  }
2050
2119
  @layer sw-components {
2120
+ :where([is=bordered-prominent-button]) {
2121
+ --btnpadistart: var(--regular-btn-padding);
2122
+ --btnpadiend: var(--regular-btn-padding);
2123
+ --btnpadbstart: var(--regular-btn-padding);
2124
+ --btnpadbend: var(--regular-btn-padding);
2125
+ }
2126
+ :where([is=bordered-prominent-button][control-size=mini]) {
2127
+ --btnpadistart: var(--mini-btn-padding);
2128
+ --btnpadiend: var(--mini-btn-padding);
2129
+ --btnpadbstart: var(--mini-btn-padding);
2130
+ --btnpadbend: var(--mini-btn-padding);
2131
+ }
2132
+ :where([is=bordered-prominent-button][control-size=regular]) {
2133
+ --btnpadistart: var(--regular-btn-padding);
2134
+ --btnpadiend: var(--regular-btn-padding);
2135
+ --btnpadbstart: var(--regular-btn-padding);
2136
+ --btnpadbend: var(--regular-btn-padding);
2137
+ }
2138
+ :where([is=bordered-prominent-button][control-size=small]) {
2139
+ --btnpadistart: var(--small-btn-padding);
2140
+ --btnpadiend: var(--small-btn-padding);
2141
+ --btnpadbstart: var(--small-btn-padding);
2142
+ --btnpadbend: var(--small-btn-padding);
2143
+ }
2144
+ :where([is=bordered-prominent-button][control-size=large]) {
2145
+ --btnpadistart: var(--large-btn-padding);
2146
+ --btnpadiend: var(--large-btn-padding);
2147
+ --btnpadbstart: var(--large-btn-padding);
2148
+ --btnpadbend: var(--large-btn-padding);
2149
+ }
2051
2150
  :where([is=bordered-prominent-button][role=destructive]) {
2052
2151
  --accentColor: var(--red);
2053
2152
  --accentColor2: var(--red2);
@@ -2066,6 +2165,34 @@
2066
2165
  backdrop-filter: var(--liquid-glass-backdrop-filter);
2067
2166
  box-shadow: var(--toolbar-cell-box-shadow);
2068
2167
  transform: var(--btn--scale, );
2168
+ --btnpadistart: var(--regular-btn-padding);
2169
+ --btnpadiend: var(--regular-btn-padding);
2170
+ --btnpadbstart: var(--regular-btn-padding);
2171
+ --btnpadbend: var(--regular-btn-padding);
2172
+ }
2173
+ :where([is=glass-button][control-size=mini]) {
2174
+ --btnpadistart: var(--mini-btn-padding);
2175
+ --btnpadiend: var(--mini-btn-padding);
2176
+ --btnpadbstart: var(--mini-btn-padding);
2177
+ --btnpadbend: var(--mini-btn-padding);
2178
+ }
2179
+ :where([is=glass-button][control-size=regular]) {
2180
+ --btnpadistart: var(--regular-btn-padding);
2181
+ --btnpadiend: var(--regular-btn-padding);
2182
+ --btnpadbstart: var(--regular-btn-padding);
2183
+ --btnpadbend: var(--regular-btn-padding);
2184
+ }
2185
+ :where([is=glass-button][control-size=small]) {
2186
+ --btnpadistart: var(--small-btn-padding);
2187
+ --btnpadiend: var(--small-btn-padding);
2188
+ --btnpadbstart: var(--small-btn-padding);
2189
+ --btnpadbend: var(--small-btn-padding);
2190
+ }
2191
+ :where([is=glass-button][control-size=large]) {
2192
+ --btnpadistart: var(--large-btn-padding);
2193
+ --btnpadiend: var(--large-btn-padding);
2194
+ --btnpadbstart: var(--large-btn-padding);
2195
+ --btnpadbend: var(--large-btn-padding);
2069
2196
  }
2070
2197
  :where([is=glass-button][role=destructive]) {
2071
2198
  --accentColor: var(--red);
@@ -2085,6 +2212,34 @@
2085
2212
  backdrop-filter: var(--liquid-glass-backdrop-filter);
2086
2213
  box-shadow: var(--toolbar-cell-box-shadow);
2087
2214
  transform: var(--btn--scale, );
2215
+ --btnpadistart: var(--regular-btn-padding);
2216
+ --btnpadiend: var(--regular-btn-padding);
2217
+ --btnpadbstart: var(--regular-btn-padding);
2218
+ --btnpadbend: var(--regular-btn-padding);
2219
+ }
2220
+ :where([is=glass-prominent-button][control-size=mini]) {
2221
+ --btnpadistart: var(--mini-btn-padding);
2222
+ --btnpadiend: var(--mini-btn-padding);
2223
+ --btnpadbstart: var(--mini-btn-padding);
2224
+ --btnpadbend: var(--mini-btn-padding);
2225
+ }
2226
+ :where([is=glass-prominent-button][control-size=regular]) {
2227
+ --btnpadistart: var(--regular-btn-padding);
2228
+ --btnpadiend: var(--regular-btn-padding);
2229
+ --btnpadbstart: var(--regular-btn-padding);
2230
+ --btnpadbend: var(--regular-btn-padding);
2231
+ }
2232
+ :where([is=glass-prominent-button][control-size=small]) {
2233
+ --btnpadistart: var(--small-btn-padding);
2234
+ --btnpadiend: var(--small-btn-padding);
2235
+ --btnpadbstart: var(--small-btn-padding);
2236
+ --btnpadbend: var(--small-btn-padding);
2237
+ }
2238
+ :where([is=glass-prominent-button][control-size=large]) {
2239
+ --btnpadistart: var(--large-btn-padding);
2240
+ --btnpadiend: var(--large-btn-padding);
2241
+ --btnpadbstart: var(--large-btn-padding);
2242
+ --btnpadbend: var(--large-btn-padding);
2088
2243
  }
2089
2244
  :where([is=glass-prominent-button][role=destructive]) {
2090
2245
  --accentColor: var(--red);
@@ -2154,6 +2309,18 @@
2154
2309
  --safe-area-inset-bottom: 0px;
2155
2310
  }
2156
2311
  }
2312
+ :where(tool-bar > [slot^=top-bar-] > button:has(> label-view > [slot=image]),
2313
+ tool-bar > [slot=cancellation-action] > button:has(> label-view > [slot=image]),
2314
+ tool-bar > [slot=primary-action] > button:has(> label-view > [slot=image]),
2315
+ tool-bar > [slot=confirmation-action] > button:has(> label-view > [slot=image]),
2316
+ tool-bar > [slot=destructive-action] > button:has(> label-view > [slot=image])) {
2317
+ --label-style: icon-only;
2318
+ }
2319
+ @media (pointer: coarse) {
2320
+ :where(tool-bar > [slot^=bottom-bar-] > button:has(> label-view > [slot=image])) {
2321
+ --label-style: icon-only;
2322
+ }
2323
+ }
2157
2324
  }
2158
2325
  @property --label-gap {
2159
2326
  syntax: "<length>";
@@ -2161,19 +2328,24 @@
2161
2328
  initial-value: 0;
2162
2329
  }
2163
2330
  @property --label-image-size {
2331
+ syntax: "<number>";
2332
+ inherits: false;
2333
+ initial-value: 2;
2334
+ }
2335
+ @property --label-padding-inline {
2164
2336
  syntax: "<length>";
2165
2337
  inherits: false;
2166
2338
  initial-value: 0;
2167
2339
  }
2168
2340
  @layer sw-components {
2169
2341
  :where(label-view) {
2342
+ padding-inline: var(--label-padding-inline);
2170
2343
  align-items: var(--label--host-align-items, );
2171
2344
  justify-items: var(--label--host-justify-items, );
2172
2345
  grid-template-columns: var(--label--host-grid-template-columns, );
2173
2346
  grid-template-rows: var(--label--host-grid-template-rows, );
2174
2347
  gap: var(--label--host-gap, );
2175
- --label-image-size: 2rem;
2176
- --label-imagestack-fontsize: var(--label-image-size);
2348
+ --label-imagestack-fontsize: calc(var(--label-image-size) * 1rem);
2177
2349
  white-space: var(--label--host-white-space, );
2178
2350
  }
2179
2351
  :where(label-view)::part(label-image-stack), :where(label-view)::part(label-title-stack) {
@@ -4552,6 +4724,11 @@
4552
4724
  transform: translateY(calc(max(var(--safe-area-inset-top), var(--sidebar-block-spacing)) * -1 - 150%));
4553
4725
  }
4554
4726
  }
4727
+ @media (pointer: fine) and (prefers-reduced-motion: no-preference) {
4728
+ :where(tab-view[tab-view-style=tab-bar-only] [is=sidebar-view][open] ~ [is=tab-bar] > [is=form-view]) {
4729
+ animation: ipad_form_view_slide_up_offedge var(--sidebar-transition-duration) ease forwards;
4730
+ }
4731
+ }
4555
4732
  @media (max-width: 42.9999rem) and (orientation: portrait) {
4556
4733
  :where(tab-view:not([tab-view-style=tab-bar-only]) [is=tab-bar]) {
4557
4734
  --tab-bar-width: 100lvw;
@@ -4618,6 +4795,11 @@
4618
4795
  transform: translateY(calc(max(var(--safe-area-inset-top), var(--sidebar-block-spacing)) * -1 - 150%));
4619
4796
  }
4620
4797
  }
4798
+ @media (min-width: 43rem) and (orientation: portrait) and (prefers-reduced-motion: no-preference) {
4799
+ :where(tab-view:not([tab-view-style=tab-bar-only]) [is=sidebar-view][open] ~ [is=tab-bar] > [is=form-view]) {
4800
+ animation: ipad_form_view_slide_up_offedge var(--sidebar-transition-duration) ease forwards;
4801
+ }
4802
+ }
4621
4803
  @media (orientation: landscape) {
4622
4804
  :where(tab-view:not([tab-view-style=tab-bar-only]) [is=tab-bar]) {
4623
4805
  display: none;
@@ -6522,6 +6704,11 @@
6522
6704
  }
6523
6705
  }
6524
6706
  }
6707
+ @keyframes ipad_form_view_slide_up_offedge {
6708
+ to {
6709
+ opacity: 0;
6710
+ }
6711
+ }
6525
6712
  @property --gray {
6526
6713
  syntax: "<color>";
6527
6714
  initial-value: oklch(64.83% 0.0073 286.19deg);
@@ -7429,15 +7616,28 @@
7429
7616
  }
7430
7617
  :where([is=tab-bar]) {
7431
7618
  --toolbaritemtext: light-dark(var(--secondary-text), var(--secondary-text-dark));
7619
+ --toolbaritemhighlighttext: light-dark(var(--secondary-text), var(--secondary-text-dark));
7620
+ --toolbaritemactivetext: light-dark(var(--secondary-text), var(--secondary-text-dark));
7432
7621
  }
7433
- :where(tool-bar-item, tool-bar-item-group, navigation-split-view sidebar-toggle) {
7622
+ :where(tool-bar-item,
7623
+ tool-bar-item-group,
7624
+ navigation-split-view sidebar-toggle) {
7434
7625
  --toolbaritemface: light-dark(var(--toolbar-cell-bg), var(--toolbar-cell-bg-dark));
7435
7626
  --toolbaritemhighlightface: light-dark(var(--toolbar-cell-focus-bg), var(--toolbar-cell-focus-bg-dark));
7436
7627
  --toolbaritemactiveface: light-dark(var(--toolbar-cell-active-bg), var(--toolbar-cell-active-bg-dark));
7437
7628
  }
7438
- :where([is=tab-bar] [is=tab-item]) {
7439
- --toolbaritemhighlighttext: yellow;
7440
- --toolbaritemactivetext: chocolate;
7629
+ :where(tool-bar-item[tint],
7630
+ tool-bar-item-group[tint],
7631
+ navigation-split-view sidebar-toggle[tint]) {
7632
+ --toolbaritemtext: oklch(from var(--accentColor) clamp(0, (0.7 - l) * 999, 1) none none);
7633
+ --toolbaritemhighlighttext: oklch(from var(--accentColor) clamp(0, (0.7 - l) * 999, 1) none none);
7634
+ --toolbaritemactivetext: oklch(from var(--accentColor) clamp(0, (0.7 - l) * 999, 1) none none);
7635
+ --toolbaritemface: var(--accentColor);
7636
+ --toolbaritemhighlightface: light-dark(
7637
+ oklch(from var(--accentColor) min(calc(l * 1.1), 1) min(calc(c * 1.1), c) h),
7638
+ oklch(from var(--accentColor) min(calc(l * 1.1), 1) min(calc(c * 1.1), c) h)
7639
+ );
7640
+ --toolbaritemactiveface: light-dark(oklch(from var(--accentColor) min(calc(l * 1.2), 1) min(calc(c * 1.1), c) h), oklch(from var(--accentColor) min(calc(l * 1.2), 1) min(calc(c * 1.1), c) h));
7441
7641
  }
7442
7642
  :where(sidebar-toggle,
7443
7643
  menu-view) {
@@ -1,5 +1,9 @@
1
1
  import { type NavigationSplitView, type NavigationStack } from '../components';
2
2
  import { type TabBarPlacement } from '../components/tab-view';
3
+ export type TabBeforeDetail = {
4
+ tag: string;
5
+ ms: number;
6
+ };
3
7
  export type TabDetail = {
4
8
  tag: string;
5
9
  };
@@ -16,8 +20,8 @@ declare global {
16
20
  tabhide: CustomEvent<TabDetail>;
17
21
  tabreveal: CustomEvent<TabDetail>;
18
22
  tabswap: CustomEvent<TabDetail>;
19
- beforetabreveal: CustomEvent<TabDetail>;
20
- beforetabswap: CustomEvent<TabDetail>;
23
+ beforetabreveal: CustomEvent<TabBeforeDetail>;
24
+ beforetabswap: CustomEvent<TabBeforeDetail>;
21
25
  'tab-view:toggle': CustomEvent<TabViewDetail>;
22
26
  'tab-view:adaptable-tab-bar-placement-change': CustomEvent<TabViewAdaptableTabBarPlacementDetail>;
23
27
  }
@@ -16,7 +16,7 @@ export class CSSStyleObserver {
16
16
  this.#cleanups?.();
17
17
  }
18
18
  #handleTransitionrun = (callback, evt) => {
19
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
19
+ console.debug(`${_a.name} ⚡️ ${evt?.type} (${evt.propertyName})`);
20
20
  if (!this.#options?.properties.some((prop) => evt.propertyName.startsWith(prop)))
21
21
  return;
22
22
  callback?.(evt);
@@ -1,14 +1,34 @@
1
1
  import { I18n } from '../../i18n';
2
+ import { Snapshot } from '../../snapshot';
2
3
  import { CleanupRegistry } from '../class/cleanup-registry';
3
4
  import { default as $ } from './cash';
4
5
  import onoff from './onoff';
5
6
  function renderPlaceholder(el, role) {
6
- const label = el.querySelector(':scope>[slot=placeholder]') ?? el.appendChild($(`<label-view system-image="magnifying-glass" slot="placeholder"></label-view>`, '>1'));
7
- if (role) {
8
- label.setAttribute('title', I18n.t('ButtonRole').Default.Destructive);
7
+ const label = el.querySelector(':scope>[slot=placeholder]') ?? el.appendChild($(`<label-view slot="placeholder"></label-view>`, '>1'));
8
+ switch (role) {
9
+ case 'cancel':
10
+ label.setAttribute('title', I18n.t('ButtonRole').Default.Cancel);
11
+ label.setAttribute('system-image', Snapshot.config['cancel-button-icon']);
12
+ break;
13
+ case 'close':
14
+ label.setAttribute('title', I18n.t('ButtonRole').Default.Close);
15
+ label.setAttribute('system-image', Snapshot.config['close-button-icon']);
16
+ break;
17
+ case 'confirm':
18
+ label.setAttribute('title', I18n.t('ButtonRole').Default.Confirm);
19
+ label.setAttribute('system-image', Snapshot.config['confirm-button-icon']);
20
+ break;
21
+ case 'destructive':
22
+ label.setAttribute('title', I18n.t('ButtonRole').Default.Destructive);
23
+ label.setAttribute('system-image', Snapshot.config['delete-button-icon']);
24
+ break;
25
+ default:
26
+ label?.remove();
27
+ break;
9
28
  }
10
- else
11
- label?.remove();
29
+ // if (role) {
30
+ // label.setAttribute('title', I18n.t('ButtonRole').Default.Destructive)
31
+ // } else label?.remove()
12
32
  }
13
33
  export default function (target, attributeName) {
14
34
  renderPlaceholder(target, target.getAttribute(attributeName ?? ''));
@@ -16,5 +16,4 @@ export { default as sleep } from './sleep';
16
16
  export { default as slowHideShow } from './slow-hide-show';
17
17
  export { default as timeout } from './timeout';
18
18
  export { default as touchGlass } from './touch-glass';
19
- export { default as toolbarRepositioner } from './toolbar-repositioner';
20
19
  export declare const $: typeof cash;
@@ -17,5 +17,4 @@ export { default as sleep } from './sleep';
17
17
  export { default as slowHideShow } from './slow-hide-show';
18
18
  export { default as timeout } from './timeout';
19
19
  export { default as touchGlass } from './touch-glass';
20
- export { default as toolbarRepositioner } from './toolbar-repositioner';
21
20
  export const $ = cash;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swiftwc/ui",
3
- "version": "0.0.0-dev.21",
3
+ "version": "0.0.0-dev.22",
4
4
  "description": "Elegant SwiftUI-inspired web components for standalone web apps and web extensions.",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/scss/_vars.scss CHANGED
@@ -147,6 +147,11 @@ $disclosure-affordance: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000
147
147
  $table-col-affordance: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" fill="currentColor" viewBox="0 0 256 256"%3E%3Cpath d="M216.49,168.49a12,12,0,0,1-17,0L128,97,56.49,168.49a12,12,0,0,1-17-17l80-80a12,12,0,0,1,17,0l80,80A12,12,0,0,1,216.49,168.49Z"%3E%3C/path%3E%3C/svg%3E'; // ph-caret-up-bold
148
148
  $picker-affordance: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" fill="currentColor" viewBox="0 0 256 256"%3E%3Cpath d="M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z"%3E%3C/path%3E%3C/svg%3E'; // ph-check-bold
149
149
 
150
+ $cancel-button-icon: 'x'; // ph-trash
151
+ $close-button-icon: 'x'; // ph-trash
152
+ $confirm-button-icon: 'check'; // ph-trash
153
+ $delete-button-icon: 'trash'; // ph-trash
154
+
150
155
  // SECTION: computed(s)
151
156
 
152
157
  $ipad-portrait-bp-max: #{functions.subtract-tiny($ipad-portrait-bp)};