@moldable-ai/ui 0.2.20 → 0.2.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 (196) hide show
  1. package/dist/catalog/catalog-coverage.d.ts +15 -0
  2. package/dist/catalog/catalog-coverage.d.ts.map +1 -0
  3. package/dist/catalog/catalog-coverage.js +44 -0
  4. package/dist/catalog/catalog-manifest.d.ts.map +1 -1
  5. package/dist/catalog/catalog-manifest.js +35 -23
  6. package/dist/catalog/catalog-types.d.ts +17 -0
  7. package/dist/catalog/catalog-types.d.ts.map +1 -1
  8. package/dist/catalog/catalog-types.js +7 -0
  9. package/dist/catalog/component-catalog.d.ts.map +1 -1
  10. package/dist/catalog/component-catalog.js +16 -6
  11. package/dist/catalog/core-catalog-exclusions.d.ts +8 -0
  12. package/dist/catalog/core-catalog-exclusions.d.ts.map +1 -0
  13. package/dist/catalog/core-catalog-exclusions.js +155 -0
  14. package/dist/catalog/core-catalog.d.ts +0 -4
  15. package/dist/catalog/core-catalog.d.ts.map +1 -1
  16. package/dist/catalog/core-catalog.js +12 -98
  17. package/dist/catalog/core-collection-stories.d.ts +3 -0
  18. package/dist/catalog/core-collection-stories.d.ts.map +1 -0
  19. package/dist/catalog/core-collection-stories.js +42 -0
  20. package/dist/catalog/core-control-stories.d.ts +3 -0
  21. package/dist/catalog/core-control-stories.d.ts.map +1 -0
  22. package/dist/catalog/core-control-stories.js +97 -0
  23. package/dist/catalog/core-feedback-stories.d.ts +3 -0
  24. package/dist/catalog/core-feedback-stories.d.ts.map +1 -0
  25. package/dist/catalog/core-feedback-stories.js +50 -0
  26. package/dist/catalog/core-foundation-stories.d.ts +3 -0
  27. package/dist/catalog/core-foundation-stories.d.ts.map +1 -0
  28. package/dist/catalog/core-foundation-stories.js +53 -0
  29. package/dist/catalog/core-navigation-stories.d.ts +3 -0
  30. package/dist/catalog/core-navigation-stories.d.ts.map +1 -0
  31. package/dist/catalog/core-navigation-stories.js +25 -0
  32. package/dist/catalog/core-overlay-stories.d.ts +3 -0
  33. package/dist/catalog/core-overlay-stories.d.ts.map +1 -0
  34. package/dist/catalog/core-overlay-stories.js +20 -0
  35. package/dist/catalog/index.d.ts +3 -1
  36. package/dist/catalog/index.d.ts.map +1 -1
  37. package/dist/catalog/index.js +3 -1
  38. package/dist/components/app-error-boundary.d.ts.map +1 -1
  39. package/dist/components/app-error-boundary.js +3 -2
  40. package/dist/components/chat/chat-panel.d.ts +0 -1
  41. package/dist/components/chat/chat-panel.d.ts.map +1 -1
  42. package/dist/components/chat/chat-panel.js +7 -11
  43. package/dist/components/ui/alert-dialog.d.ts +10 -4
  44. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  45. package/dist/components/ui/alert-dialog.js +14 -6
  46. package/dist/components/ui/alert.d.ts +19 -3
  47. package/dist/components/ui/alert.d.ts.map +1 -1
  48. package/dist/components/ui/alert.js +25 -8
  49. package/dist/components/ui/app-frame.d.ts +9 -3
  50. package/dist/components/ui/app-frame.d.ts.map +1 -1
  51. package/dist/components/ui/app-frame.js +45 -6
  52. package/dist/components/ui/button.d.ts +6 -4
  53. package/dist/components/ui/button.d.ts.map +1 -1
  54. package/dist/components/ui/button.js +40 -8
  55. package/dist/components/ui/collapsible.d.ts +9 -1
  56. package/dist/components/ui/collapsible.d.ts.map +1 -1
  57. package/dist/components/ui/collapsible.js +13 -2
  58. package/dist/components/ui/collection-navigation.d.ts +8 -0
  59. package/dist/components/ui/collection-navigation.d.ts.map +1 -0
  60. package/dist/components/ui/collection-navigation.js +19 -0
  61. package/dist/components/ui/command.d.ts +5 -1
  62. package/dist/components/ui/command.d.ts.map +1 -1
  63. package/dist/components/ui/command.js +13 -1
  64. package/dist/components/ui/confirm-dialog.d.ts +19 -0
  65. package/dist/components/ui/confirm-dialog.d.ts.map +1 -0
  66. package/dist/components/ui/confirm-dialog.js +45 -0
  67. package/dist/components/ui/date-picker.d.ts +24 -0
  68. package/dist/components/ui/date-picker.d.ts.map +1 -0
  69. package/dist/components/ui/date-picker.js +92 -0
  70. package/dist/components/ui/dialog-primary-action.d.ts +4 -0
  71. package/dist/components/ui/dialog-primary-action.d.ts.map +1 -0
  72. package/dist/components/ui/dialog-primary-action.js +37 -0
  73. package/dist/components/ui/dialog.d.ts +8 -2
  74. package/dist/components/ui/dialog.d.ts.map +1 -1
  75. package/dist/components/ui/dialog.js +15 -5
  76. package/dist/components/ui/empty.d.ts +7 -2
  77. package/dist/components/ui/empty.d.ts.map +1 -1
  78. package/dist/components/ui/empty.js +20 -7
  79. package/dist/components/ui/error-boundary-view.d.ts +12 -0
  80. package/dist/components/ui/error-boundary-view.d.ts.map +1 -0
  81. package/dist/components/ui/error-boundary-view.js +8 -0
  82. package/dist/components/ui/grid.d.ts.map +1 -1
  83. package/dist/components/ui/grid.js +70 -46
  84. package/dist/components/ui/icon-button.d.ts.map +1 -1
  85. package/dist/components/ui/icon-button.js +1 -2
  86. package/dist/components/ui/index.d.ts +5 -0
  87. package/dist/components/ui/index.d.ts.map +1 -1
  88. package/dist/components/ui/index.js +5 -0
  89. package/dist/components/ui/input-group.d.ts +1 -1
  90. package/dist/components/ui/list.d.ts +5 -1
  91. package/dist/components/ui/list.d.ts.map +1 -1
  92. package/dist/components/ui/list.js +27 -16
  93. package/dist/components/ui/material.d.ts +34 -0
  94. package/dist/components/ui/material.d.ts.map +1 -0
  95. package/dist/components/ui/material.js +34 -0
  96. package/dist/components/ui/message-scroller-controller.d.ts +162 -0
  97. package/dist/components/ui/message-scroller-controller.d.ts.map +1 -0
  98. package/dist/components/ui/message-scroller-controller.js +888 -0
  99. package/dist/components/ui/message-scroller-policy.d.ts +74 -0
  100. package/dist/components/ui/message-scroller-policy.d.ts.map +1 -0
  101. package/dist/components/ui/message-scroller-policy.js +129 -0
  102. package/dist/components/ui/message-scroller-primitive.d.ts +55 -0
  103. package/dist/components/ui/message-scroller-primitive.d.ts.map +1 -0
  104. package/dist/components/ui/message-scroller-primitive.js +226 -0
  105. package/dist/components/ui/message-scroller.d.ts +2 -2
  106. package/dist/components/ui/message-scroller.d.ts.map +1 -1
  107. package/dist/components/ui/message-scroller.js +3 -15
  108. package/dist/components/ui/navigation-button-group.d.ts +16 -0
  109. package/dist/components/ui/navigation-button-group.d.ts.map +1 -0
  110. package/dist/components/ui/navigation-button-group.js +9 -0
  111. package/dist/components/ui/popover.d.ts +9 -2
  112. package/dist/components/ui/popover.d.ts.map +1 -1
  113. package/dist/components/ui/popover.js +13 -3
  114. package/dist/components/ui/scroll-area.d.ts +8 -2
  115. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  116. package/dist/components/ui/scroll-area.js +6 -3
  117. package/dist/components/ui/search-field.d.ts.map +1 -1
  118. package/dist/components/ui/segmented-control.d.ts.map +1 -1
  119. package/dist/components/ui/segmented-control.js +6 -5
  120. package/dist/components/ui/sheet.d.ts +4 -2
  121. package/dist/components/ui/sheet.d.ts.map +1 -1
  122. package/dist/components/ui/sheet.js +12 -9
  123. package/dist/components/ui/sonner.d.ts +1 -1
  124. package/dist/components/ui/sonner.d.ts.map +1 -1
  125. package/dist/components/ui/spinner.d.ts.map +1 -1
  126. package/dist/components/ui/spinner.js +1 -1
  127. package/dist/components/ui/table.d.ts.map +1 -1
  128. package/dist/components/ui/table.js +7 -2
  129. package/dist/components/ui/toggle.d.ts +12 -4
  130. package/dist/components/ui/toggle.d.ts.map +1 -1
  131. package/dist/components/ui/toggle.js +13 -2
  132. package/dist/components/ui/toolbar.d.ts +9 -2
  133. package/dist/components/ui/toolbar.d.ts.map +1 -1
  134. package/dist/components/ui/toolbar.js +23 -4
  135. package/dist/components/ui/tooltip.d.ts +8 -3
  136. package/dist/components/ui/tooltip.d.ts.map +1 -1
  137. package/dist/components/ui/tooltip.js +11 -6
  138. package/dist/index.d.ts +6 -1
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +7 -1
  141. package/dist/lib/frame-lifecycle.d.ts +23 -0
  142. package/dist/lib/frame-lifecycle.d.ts.map +1 -1
  143. package/dist/lib/frame-lifecycle.js +30 -3
  144. package/dist/lib/host-date-time-picker.d.ts +36 -0
  145. package/dist/lib/host-date-time-picker.d.ts.map +1 -0
  146. package/dist/lib/host-date-time-picker.js +162 -0
  147. package/dist/lib/host-file-dialog.d.ts +66 -0
  148. package/dist/lib/host-file-dialog.d.ts.map +1 -0
  149. package/dist/lib/host-file-dialog.js +221 -0
  150. package/dist/lib/host-native-menu.d.ts +75 -0
  151. package/dist/lib/host-native-menu.d.ts.map +1 -0
  152. package/dist/lib/host-native-menu.js +187 -0
  153. package/dist/lib/host-services.d.ts +13 -0
  154. package/dist/lib/host-services.d.ts.map +1 -0
  155. package/dist/lib/host-services.js +161 -0
  156. package/dist/lib/host-share.d.ts +39 -0
  157. package/dist/lib/host-share.d.ts.map +1 -0
  158. package/dist/lib/host-share.js +161 -0
  159. package/dist/lib/theme.d.ts.map +1 -1
  160. package/dist/lib/theme.js +2 -1
  161. package/docs/README.md +4 -1
  162. package/docs/adaptive-materials.md +79 -0
  163. package/docs/app-anatomy.md +3 -1
  164. package/docs/component-catalog.md +26 -3
  165. package/docs/design-tokens.md +17 -4
  166. package/docs/foundations.md +5 -3
  167. package/docs/standalone-app-windows.md +8 -0
  168. package/docs/visual-regression.md +78 -0
  169. package/package.json +12 -4
  170. package/src/components/ui/alert-dialog.md +58 -0
  171. package/src/components/ui/alert.md +28 -6
  172. package/src/components/ui/app-frame.md +5 -0
  173. package/src/components/ui/button.md +10 -3
  174. package/src/components/ui/collapsible.md +52 -0
  175. package/src/components/ui/combobox.md +0 -1
  176. package/src/components/ui/command.md +54 -0
  177. package/src/components/ui/date-field.md +1 -1
  178. package/src/components/ui/date-picker.md +55 -0
  179. package/src/components/ui/dialog.md +59 -0
  180. package/src/components/ui/empty.md +8 -3
  181. package/src/components/ui/error-boundary-view.md +98 -0
  182. package/src/components/ui/grid.md +8 -4
  183. package/src/components/ui/icon-button.md +2 -2
  184. package/src/components/ui/list.md +35 -2
  185. package/src/components/ui/material.md +51 -0
  186. package/src/components/ui/navigation-button-group.md +46 -0
  187. package/src/components/ui/popover.md +31 -0
  188. package/src/components/ui/scroll-area.md +11 -7
  189. package/src/components/ui/search-field.md +1 -1
  190. package/src/components/ui/segmented-control.md +2 -5
  191. package/src/components/ui/sheet.md +30 -0
  192. package/src/components/ui/table.md +4 -2
  193. package/src/components/ui/toggle-button.md +48 -0
  194. package/src/components/ui/toolbar.md +5 -0
  195. package/src/components/ui/tooltip.md +31 -0
  196. package/src/styles/index.css +213 -0
@@ -19,3 +19,8 @@ Compact pane chrome for context and actions.
19
19
  Use one toolbar per pane. Put the current context before actions and keep one
20
20
  clear primary action. Toolbars are not marketing headers. Icon-only actions
21
21
  need labels and tooltips.
22
+
23
+ The default toolbar uses `material="regular"`. The `plain` and `panel` variants
24
+ default to `material="none"`; pass a material explicitly only when the toolbar
25
+ actually floats over content. Reserve `material="clear"` for compact controls
26
+ over media or a richly colored canvas.
@@ -0,0 +1,31 @@
1
+ # Tooltip
2
+
3
+ Tooltips provide short, non-interactive clarification for an already named
4
+ control. They are not a replacement for an accessible name or visible
5
+ instructions.
6
+
7
+ `ThemeProvider` installs one shared `TooltipProvider`, giving neighboring
8
+ tooltips a consistent delay and grace period:
9
+
10
+ ```tsx
11
+ <Tooltip>
12
+ <TooltipTrigger asChild>
13
+ <IconButton label="Search" variant="ghost">
14
+ <Search />
15
+ </IconButton>
16
+ </TooltipTrigger>
17
+ <TooltipContent>
18
+ Search
19
+ <TooltipShortcut>⌘F</TooltipShortcut>
20
+ </TooltipContent>
21
+ </Tooltip>
22
+ ```
23
+
24
+ Use a local `TooltipProvider` only when a bounded region needs a deliberate
25
+ delay override. Do not put links, buttons, forms, or paragraphs of help inside
26
+ a tooltip; use `Popover` instead.
27
+
28
+ A disabled button does not emit pointer events. When it needs an explanation,
29
+ wrap it in a focusable neutral element and use that wrapper as the trigger.
30
+ Give the wrapper an accessible description without making the tooltip its only
31
+ name.
@@ -823,6 +823,42 @@
823
823
  --material-blur-toolbar: 16px;
824
824
  --material-blur-overlay: 20px;
825
825
  --material-saturation: 1.12;
826
+ --material-regular-fill: color-mix(
827
+ in oklch,
828
+ var(--background) 76%,
829
+ transparent
830
+ );
831
+ --material-regular-fallback: color-mix(
832
+ in oklch,
833
+ var(--background) 94%,
834
+ var(--foreground) 6%
835
+ );
836
+ --material-regular-border: color-mix(
837
+ in oklch,
838
+ var(--foreground) 10%,
839
+ transparent
840
+ );
841
+ --material-regular-highlight: oklch(1 0 0 / 42%);
842
+ --material-regular-blur: 20px;
843
+ --material-regular-saturation: 1.18;
844
+ --material-clear-fill: color-mix(
845
+ in oklch,
846
+ var(--background) 24%,
847
+ transparent
848
+ );
849
+ --material-clear-fallback: color-mix(
850
+ in oklch,
851
+ var(--background) 88%,
852
+ var(--foreground) 12%
853
+ );
854
+ --material-clear-border: color-mix(
855
+ in oklch,
856
+ var(--foreground) 14%,
857
+ transparent
858
+ );
859
+ --material-clear-highlight: oklch(1 0 0 / 28%);
860
+ --material-clear-blur: 12px;
861
+ --material-clear-saturation: 1.24;
826
862
  --material-shadow-panel:
827
863
  0 1px 2px oklch(0.15 0.005 285 / 6%), 0 4px 12px oklch(0.15 0.005 285 / 4%);
828
864
  --material-shadow-overlay:
@@ -943,6 +979,30 @@
943
979
  --status-stopped: oklch(0.705 0.015 286.067);
944
980
  --status-pending: oklch(0.8 0.12 75);
945
981
  --status-error: oklch(0.704 0.191 22.216);
982
+ --material-regular-fill: color-mix(
983
+ in oklch,
984
+ var(--background) 68%,
985
+ transparent
986
+ );
987
+ --material-regular-fallback: color-mix(
988
+ in oklch,
989
+ var(--background) 88%,
990
+ var(--foreground) 12%
991
+ );
992
+ --material-regular-border: oklch(1 0 0 / 14%);
993
+ --material-regular-highlight: oklch(1 0 0 / 12%);
994
+ --material-clear-fill: color-mix(
995
+ in oklch,
996
+ var(--background) 20%,
997
+ transparent
998
+ );
999
+ --material-clear-fallback: color-mix(
1000
+ in oklch,
1001
+ var(--background) 78%,
1002
+ var(--foreground) 22%
1003
+ );
1004
+ --material-clear-border: oklch(1 0 0 / 18%);
1005
+ --material-clear-highlight: oklch(1 0 0 / 10%);
946
1006
  --material-shadow-panel:
947
1007
  0 1px 2px oklch(0 0 0 / 24%), 0 6px 16px oklch(0 0 0 / 16%);
948
1008
  --material-shadow-overlay:
@@ -976,10 +1036,52 @@
976
1036
  --separator-strong: color-mix(in oklch, var(--foreground) 54%, transparent);
977
1037
  --control-hover: color-mix(in oklch, var(--foreground) 12%, transparent);
978
1038
  --control-pressed: color-mix(in oklch, var(--foreground) 18%, transparent);
1039
+ --material-regular-fill: color-mix(
1040
+ in oklch,
1041
+ var(--material-regular-fallback) 92%,
1042
+ transparent
1043
+ );
1044
+ --material-regular-border: var(--separator-strong);
1045
+ --material-clear-fill: color-mix(
1046
+ in oklch,
1047
+ var(--material-clear-fallback) 84%,
1048
+ transparent
1049
+ );
1050
+ --material-clear-border: var(--separator-strong);
979
1051
  --window-border: var(--separator-strong);
980
1052
  }
981
1053
  }
982
1054
 
1055
+ :where([data-contrast='increased']) {
1056
+ --text-tertiary: color-mix(
1057
+ in oklch,
1058
+ var(--muted-foreground) 92%,
1059
+ var(--foreground)
1060
+ );
1061
+ --text-disabled: color-mix(
1062
+ in oklch,
1063
+ var(--muted-foreground) 72%,
1064
+ transparent
1065
+ );
1066
+ --separator: color-mix(in oklch, var(--foreground) 32%, transparent);
1067
+ --separator-strong: color-mix(in oklch, var(--foreground) 54%, transparent);
1068
+ --control-hover: color-mix(in oklch, var(--foreground) 12%, transparent);
1069
+ --control-pressed: color-mix(in oklch, var(--foreground) 18%, transparent);
1070
+ --material-regular-fill: color-mix(
1071
+ in oklch,
1072
+ var(--material-regular-fallback) 92%,
1073
+ transparent
1074
+ );
1075
+ --material-regular-border: var(--separator-strong);
1076
+ --material-clear-fill: color-mix(
1077
+ in oklch,
1078
+ var(--material-clear-fallback) 84%,
1079
+ transparent
1080
+ );
1081
+ --material-clear-border: var(--separator-strong);
1082
+ --window-border: var(--separator-strong);
1083
+ }
1084
+
983
1085
  @media (forced-colors: active) {
984
1086
  :root {
985
1087
  --text-primary: CanvasText;
@@ -1002,6 +1104,18 @@
1002
1104
  --control-disabled: transparent;
1003
1105
  --control-focus: Highlight;
1004
1106
  --control-invalid: Mark;
1107
+ --material-regular-fill: Canvas;
1108
+ --material-regular-fallback: Canvas;
1109
+ --material-regular-border: ButtonBorder;
1110
+ --material-regular-highlight: transparent;
1111
+ --material-regular-blur: 0px;
1112
+ --material-regular-saturation: 1;
1113
+ --material-clear-fill: Canvas;
1114
+ --material-clear-fallback: Canvas;
1115
+ --material-clear-border: ButtonBorder;
1116
+ --material-clear-highlight: transparent;
1117
+ --material-clear-blur: 0px;
1118
+ --material-clear-saturation: 1;
1005
1119
  --material-blur-toolbar: 0px;
1006
1120
  --material-blur-overlay: 0px;
1007
1121
  --material-saturation: 1;
@@ -1014,6 +1128,12 @@
1014
1128
  :where([data-transparency='reduced']) {
1015
1129
  --surface-toolbar: var(--background);
1016
1130
  --surface-overlay: var(--popover);
1131
+ --material-regular-fill: var(--material-regular-fallback);
1132
+ --material-regular-blur: 0px;
1133
+ --material-regular-saturation: 1;
1134
+ --material-clear-fill: var(--material-clear-fallback);
1135
+ --material-clear-blur: 0px;
1136
+ --material-clear-saturation: 1;
1017
1137
  --material-blur-toolbar: 0px;
1018
1138
  --material-blur-overlay: 0px;
1019
1139
  --material-saturation: 1;
@@ -1023,6 +1143,12 @@
1023
1143
  :root {
1024
1144
  --surface-toolbar: var(--background);
1025
1145
  --surface-overlay: var(--popover);
1146
+ --material-regular-fill: var(--material-regular-fallback);
1147
+ --material-regular-blur: 0px;
1148
+ --material-regular-saturation: 1;
1149
+ --material-clear-fill: var(--material-clear-fallback);
1150
+ --material-clear-blur: 0px;
1151
+ --material-clear-saturation: 1;
1026
1152
  --material-blur-toolbar: 0px;
1027
1153
  --material-blur-overlay: 0px;
1028
1154
  --material-saturation: 1;
@@ -1042,6 +1168,84 @@
1042
1168
  }
1043
1169
  }
1044
1170
 
1171
+ @layer components {
1172
+ /*
1173
+ * Adaptive material is reserved for navigation and control chrome. The
1174
+ * opaque background is the baseline; capable renderers opt into backdrop
1175
+ * sampling below.
1176
+ */
1177
+ .moldable-material {
1178
+ --material-active-fill: var(--material-regular-fill);
1179
+ --material-active-fallback: var(--material-regular-fallback);
1180
+ --material-active-border: var(--material-regular-border);
1181
+ --material-active-highlight: var(--material-regular-highlight);
1182
+ --material-active-blur: var(--material-regular-blur);
1183
+ --material-active-saturation: var(--material-regular-saturation);
1184
+ --material-active-shadow: none;
1185
+
1186
+ position: relative;
1187
+ isolation: isolate;
1188
+ background-color: var(--material-active-fallback);
1189
+ border-color: var(--material-active-border);
1190
+ box-shadow:
1191
+ inset 0 1px 0 var(--material-active-highlight),
1192
+ var(--material-active-shadow);
1193
+ }
1194
+
1195
+ .moldable-material[data-material='clear'] {
1196
+ --material-active-fill: var(--material-clear-fill);
1197
+ --material-active-fallback: var(--material-clear-fallback);
1198
+ --material-active-border: var(--material-clear-border);
1199
+ --material-active-highlight: var(--material-clear-highlight);
1200
+ --material-active-blur: var(--material-clear-blur);
1201
+ --material-active-saturation: var(--material-clear-saturation);
1202
+ }
1203
+
1204
+ .moldable-material[data-material-elevation='panel'] {
1205
+ --material-active-shadow: var(--material-shadow-panel);
1206
+ }
1207
+
1208
+ .moldable-material[data-material-elevation='overlay'] {
1209
+ --material-active-shadow: var(--material-shadow-overlay);
1210
+ }
1211
+
1212
+ .moldable-material[data-material-interactive='true'] {
1213
+ transition:
1214
+ transform var(--motion-duration-fast) var(--motion-ease-standard),
1215
+ background-color var(--motion-duration-fast) var(--motion-ease-standard),
1216
+ border-color var(--motion-duration-fast) var(--motion-ease-standard);
1217
+ }
1218
+
1219
+ .moldable-material[data-material-interactive='true']:hover {
1220
+ background-color: color-mix(
1221
+ in oklch,
1222
+ var(--material-active-fill),
1223
+ var(--control-hover)
1224
+ );
1225
+ }
1226
+
1227
+ .moldable-material[data-material-interactive='true']:active {
1228
+ background-color: color-mix(
1229
+ in oklch,
1230
+ var(--material-active-fill),
1231
+ var(--control-pressed)
1232
+ );
1233
+ transform: scale(0.98);
1234
+ }
1235
+
1236
+ @supports (
1237
+ (-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))
1238
+ ) {
1239
+ .moldable-material {
1240
+ background-color: var(--material-active-fill);
1241
+ -webkit-backdrop-filter: blur(var(--material-active-blur))
1242
+ saturate(var(--material-active-saturation));
1243
+ backdrop-filter: blur(var(--material-active-blur))
1244
+ saturate(var(--material-active-saturation));
1245
+ }
1246
+ }
1247
+ }
1248
+
1045
1249
  @layer utilities {
1046
1250
  .scrollbar-hide {
1047
1251
  &::-webkit-scrollbar {
@@ -1075,6 +1279,10 @@
1075
1279
  .model-effort-max-burst {
1076
1280
  display: none;
1077
1281
  }
1282
+
1283
+ .moldable-material[data-material-interactive='true']:active {
1284
+ transform: none;
1285
+ }
1078
1286
  }
1079
1287
 
1080
1288
  :where([data-motion='reduced']) {
@@ -1088,6 +1296,11 @@
1088
1296
  --motion-ease-spring: linear;
1089
1297
  }
1090
1298
 
1299
+ :where([data-motion='reduced'])
1300
+ .moldable-material[data-material-interactive='true']:active {
1301
+ transform: none;
1302
+ }
1303
+
1091
1304
  /* Shiki dual-theme support: override inline styles in dark mode */
1092
1305
  .dark .shiki,
1093
1306
  .dark .shiki span {