@greese/ui 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -2
  3. package/bin/greese-utilities.mjs +56 -0
  4. package/dist/_layers.scss +2 -0
  5. package/dist/_maps.scss +1884 -0
  6. package/dist/_tokens-base.scss +174 -0
  7. package/dist/_tokens.scss +2140 -0
  8. package/dist/base.css +67 -0
  9. package/dist/colorScheme.d.ts +16 -0
  10. package/dist/colorScheme.js +13 -0
  11. package/dist/contrast.d.ts +15 -0
  12. package/dist/contrast.js +43 -0
  13. package/dist/css/Accordion.css +9 -0
  14. package/dist/css/ActionSelect.css +6 -0
  15. package/dist/css/Alert.css +84 -0
  16. package/dist/css/AppBar.css +35 -0
  17. package/dist/css/AspectRatio.css +40 -0
  18. package/dist/css/AutoLayout.css +508 -0
  19. package/dist/css/Avatar.css +88 -0
  20. package/dist/css/Badge.css +66 -0
  21. package/dist/css/Box.css +640 -0
  22. package/dist/css/Breadcrumbs.css +57 -0
  23. package/dist/css/Button.css +275 -0
  24. package/dist/css/ButtonGroup.css +40 -0
  25. package/dist/css/Card.css +101 -0
  26. package/dist/css/Carousel.css +170 -0
  27. package/dist/css/Center.css +11 -0
  28. package/dist/css/ChatBubble.css +128 -0
  29. package/dist/css/Checkbox.css +65 -0
  30. package/dist/css/Chip.css +124 -0
  31. package/dist/css/ChoiceGroup.css +57 -0
  32. package/dist/css/Code.css +29 -0
  33. package/dist/css/Collapsible.css +126 -0
  34. package/dist/css/ColorPicker.css +191 -0
  35. package/dist/css/Combobox.css +90 -0
  36. package/dist/css/Container.css +30 -0
  37. package/dist/css/Countdown.css +25 -0
  38. package/dist/css/DateField.css +15 -0
  39. package/dist/css/Dialog.css +640 -0
  40. package/dist/css/Diff.css +103 -0
  41. package/dist/css/Divider.css +19 -0
  42. package/dist/css/Dock.css +91 -0
  43. package/dist/css/Field.css +33 -0
  44. package/dist/css/Fieldset.css +54 -0
  45. package/dist/css/FileInput.css +65 -0
  46. package/dist/css/Footer.css +72 -0
  47. package/dist/css/Grid.css +998 -0
  48. package/dist/css/Header.css +89 -0
  49. package/dist/css/Heading.css +6 -0
  50. package/dist/css/Icon.css +12 -0
  51. package/dist/css/IconButton.css +7 -0
  52. package/dist/css/Image.css +69 -0
  53. package/dist/css/Indicator.css +41 -0
  54. package/dist/css/Input.css +115 -0
  55. package/dist/css/Key.css +42 -0
  56. package/dist/css/Link.css +72 -0
  57. package/dist/css/List.css +52 -0
  58. package/dist/css/Media.css +8 -0
  59. package/dist/css/Menu.css +161 -0
  60. package/dist/css/Motion.css +1356 -0
  61. package/dist/css/NumberField.css +49 -0
  62. package/dist/css/OtpField.css +90 -0
  63. package/dist/css/PageTransition.css +991 -0
  64. package/dist/css/Pagination.css +43 -0
  65. package/dist/css/Popover.css +93 -0
  66. package/dist/css/Progress.css +101 -0
  67. package/dist/css/RadialProgress.css +44 -0
  68. package/dist/css/Radio.css +41 -0
  69. package/dist/css/Rating.css +100 -0
  70. package/dist/css/ScrollSpy.css +6 -0
  71. package/dist/css/SegmentedControl.css +101 -0
  72. package/dist/css/Select.css +115 -0
  73. package/dist/css/Sidebar.css +207 -0
  74. package/dist/css/Skeleton.css +48 -0
  75. package/dist/css/Slider.css +75 -0
  76. package/dist/css/Spacer.css +34 -0
  77. package/dist/css/SpeedDial.css +165 -0
  78. package/dist/css/Spinner.css +44 -0
  79. package/dist/css/Stack.css +528 -0
  80. package/dist/css/Stat.css +107 -0
  81. package/dist/css/Status.css +86 -0
  82. package/dist/css/Steps.css +201 -0
  83. package/dist/css/Swap.css +49 -0
  84. package/dist/css/Switch.css +66 -0
  85. package/dist/css/Table.css +269 -0
  86. package/dist/css/Tabs.css +119 -0
  87. package/dist/css/Text.css +60 -0
  88. package/dist/css/TextRotate.css +147 -0
  89. package/dist/css/Textarea.css +107 -0
  90. package/dist/css/ThemeProvider.css +6 -0
  91. package/dist/css/Tile.css +18 -0
  92. package/dist/css/Toast.css +110 -0
  93. package/dist/css/ToggleButton.css +20 -0
  94. package/dist/css/Tooltip.css +94 -0
  95. package/dist/css/Type.css +211 -0
  96. package/dist/css/Visibility.css +78 -0
  97. package/dist/css/VisuallyHidden.css +15 -0
  98. package/dist/css/core.css +251 -0
  99. package/dist/css.d.ts +29 -0
  100. package/dist/css.js +28 -0
  101. package/dist/effect-classes.d.ts +8 -0
  102. package/dist/effect-classes.js +5 -0
  103. package/dist/effects/css.d.ts +71 -0
  104. package/dist/effects/css.js +184 -0
  105. package/dist/effects/definitions.d.ts +555 -0
  106. package/dist/effects/definitions.js +379 -0
  107. package/dist/effects/frames.d.ts +18 -0
  108. package/dist/effects/frames.js +68 -0
  109. package/dist/effects/sequence.d.ts +33 -0
  110. package/dist/effects/sequence.js +106 -0
  111. package/dist/effects.d.ts +30 -0
  112. package/dist/effects.js +30 -0
  113. package/dist/greese.css +11919 -0
  114. package/dist/index.d.ts +10 -0
  115. package/dist/index.js +10 -0
  116. package/dist/kebab.d.ts +2 -0
  117. package/dist/kebab.js +2 -0
  118. package/dist/palette.css +249 -0
  119. package/dist/palette.d.ts +599 -0
  120. package/dist/palette.js +334 -0
  121. package/dist/shapes.d.ts +193 -0
  122. package/dist/shapes.js +852 -0
  123. package/dist/storage.d.ts +47 -0
  124. package/dist/storage.js +118 -0
  125. package/dist/style-manifest.json +3017 -0
  126. package/dist/theme.d.ts +71 -0
  127. package/dist/theme.js +180 -0
  128. package/dist/tokens.css +253 -0
  129. package/dist/tokens.d.ts +343 -0
  130. package/dist/tokens.js +179 -0
  131. package/dist/typography.d.ts +55 -0
  132. package/dist/typography.js +144 -0
  133. package/dist/utilities.css +6975 -0
  134. package/dist/utilities.d.ts +82 -0
  135. package/dist/utilities.js +636 -0
  136. package/dist/utilitiesFiles.d.ts +18 -0
  137. package/dist/utilitiesFiles.js +26 -0
  138. package/dist/vite.d.ts +40 -0
  139. package/dist/vite.js +43 -0
  140. package/package.json +131 -4
  141. package/src/components/Accordion/Accordion.scss +9 -0
  142. package/src/components/ActionSelect/ActionSelect.scss +6 -0
  143. package/src/components/Alert/Alert.scss +71 -0
  144. package/src/components/AppBar/AppBar.scss +43 -0
  145. package/src/components/AspectRatio/AspectRatio.scss +22 -0
  146. package/src/components/AutoLayout/AutoLayout.scss +90 -0
  147. package/src/components/Avatar/Avatar.scss +91 -0
  148. package/src/components/Badge/Badge.scss +52 -0
  149. package/src/components/Box/Box.scss +63 -0
  150. package/src/components/Breadcrumbs/Breadcrumbs.scss +59 -0
  151. package/src/components/Button/Button.scss +231 -0
  152. package/src/components/ButtonGroup/ButtonGroup.scss +56 -0
  153. package/src/components/Card/Card.scss +99 -0
  154. package/src/components/Carousel/Carousel.scss +161 -0
  155. package/src/components/Center/Center.scss +11 -0
  156. package/src/components/ChatBubble/ChatBubble.scss +119 -0
  157. package/src/components/Checkbox/Checkbox.scss +66 -0
  158. package/src/components/Chip/Chip.scss +119 -0
  159. package/src/components/ChoiceGroup/ChoiceGroup.scss +69 -0
  160. package/src/components/Code/Code.scss +28 -0
  161. package/src/components/Collapsible/Collapsible.scss +136 -0
  162. package/src/components/ColorPicker/ColorPicker.scss +235 -0
  163. package/src/components/Combobox/Combobox.scss +83 -0
  164. package/src/components/Container/Container.scss +28 -0
  165. package/src/components/Countdown/Countdown.scss +28 -0
  166. package/src/components/DateField/DateField.scss +19 -0
  167. package/src/components/Dialog/Dialog.scss +268 -0
  168. package/src/components/Diff/Diff.scss +125 -0
  169. package/src/components/Divider/Divider.scss +22 -0
  170. package/src/components/Dock/Dock.scss +86 -0
  171. package/src/components/Field/Field.scss +38 -0
  172. package/src/components/Fieldset/Fieldset.scss +63 -0
  173. package/src/components/FileInput/FileInput.scss +66 -0
  174. package/src/components/Footer/Footer.scss +79 -0
  175. package/src/components/Grid/Grid.scss +86 -0
  176. package/src/components/Header/Header.scss +111 -0
  177. package/src/components/Heading/Heading.scss +7 -0
  178. package/src/components/Icon/Icon.scss +12 -0
  179. package/src/components/IconButton/IconButton.scss +6 -0
  180. package/src/components/Image/Image.scss +46 -0
  181. package/src/components/Indicator/Indicator.scss +48 -0
  182. package/src/components/Input/Input.scss +58 -0
  183. package/src/components/Key/Key.scss +48 -0
  184. package/src/components/Link/Link.scss +50 -0
  185. package/src/components/List/List.scss +62 -0
  186. package/src/components/Media/Media.scss +7 -0
  187. package/src/components/Menu/Menu.scss +91 -0
  188. package/src/components/Motion/Motion.scss +106 -0
  189. package/src/components/NumberField/NumberField.scss +44 -0
  190. package/src/components/OtpField/OtpField.scss +91 -0
  191. package/src/components/PageTransition/PageTransition.scss +197 -0
  192. package/src/components/Pagination/Pagination.scss +55 -0
  193. package/src/components/Popover/Popover.scss +13 -0
  194. package/src/components/Progress/Progress.scss +126 -0
  195. package/src/components/RadialProgress/RadialProgress.scss +65 -0
  196. package/src/components/Radio/Radio.scss +36 -0
  197. package/src/components/Rating/Rating.scss +121 -0
  198. package/src/components/ScrollSpy/ScrollSpy.scss +6 -0
  199. package/src/components/SegmentedControl/SegmentedControl.scss +107 -0
  200. package/src/components/Select/Select.scss +59 -0
  201. package/src/components/Sidebar/Sidebar.scss +88 -0
  202. package/src/components/Skeleton/Skeleton.scss +60 -0
  203. package/src/components/Slider/Slider.scss +96 -0
  204. package/src/components/Spacer/Spacer.scss +15 -0
  205. package/src/components/SpeedDial/SpeedDial.scss +109 -0
  206. package/src/components/Spinner/Spinner.scss +43 -0
  207. package/src/components/Stack/Stack.scss +57 -0
  208. package/src/components/Stat/Stat.scss +96 -0
  209. package/src/components/Status/Status.scss +60 -0
  210. package/src/components/Steps/Steps.scss +216 -0
  211. package/src/components/Swap/Swap.scss +62 -0
  212. package/src/components/Switch/Switch.scss +63 -0
  213. package/src/components/Table/Table.scss +183 -0
  214. package/src/components/Tabs/Tabs.scss +108 -0
  215. package/src/components/Text/Text.scss +34 -0
  216. package/src/components/TextRotate/TextRotate.scss +51 -0
  217. package/src/components/Textarea/Textarea.scss +56 -0
  218. package/src/components/ThemeProvider/ThemeProvider.scss +7 -0
  219. package/src/components/Tile/Tile.scss +23 -0
  220. package/src/components/Toast/Toast.scss +93 -0
  221. package/src/components/ToggleButton/ToggleButton.scss +23 -0
  222. package/src/components/Tooltip/Tooltip.scss +21 -0
  223. package/src/components/Type/Type.scss +35 -0
  224. package/src/components/Visibility/Visibility.scss +39 -0
  225. package/src/components/VisuallyHidden/VisuallyHidden.scss +17 -0
  226. package/src/styles/_breakpoint-vars.scss +16 -0
  227. package/src/styles/_config.scss +48 -0
  228. package/src/styles/_controls.scss +88 -0
  229. package/src/styles/_core.scss +4 -0
  230. package/src/styles/_effect.scss +51 -0
  231. package/src/styles/_floating.scss +141 -0
  232. package/src/styles/_kit.scss +1548 -0
  233. package/src/styles/_manifest.scss +670 -0
  234. package/src/styles/_mixins.scss +261 -0
  235. package/src/styles/_tones.scss +63 -0
  236. package/src/styles/_type-emit.scss +76 -0
  237. package/src/styles/_typography-vars.scss +8 -0
  238. package/src/styles/base.scss +80 -0
  239. package/src/styles/breakpoints.test.ts +73 -0
  240. package/src/styles/entryPoints.test.ts +68 -0
  241. package/src/styles/index.scss +93 -0
  242. package/src/styles/kit.test.ts +754 -0
  243. package/src/styles/public/_controls.scss +3 -0
  244. package/src/styles/public/_floating.scss +3 -0
  245. package/src/styles/public/_mixins.scss +5 -0
  246. package/src/styles/public/_tones.scss +4 -0
  247. package/themes/bevel.css +1077 -0
  248. package/themes/bevel.scss +1166 -0
  249. package/themes/candy.css +87 -0
  250. package/themes/candy.scss +32 -0
  251. package/themes/depth.css +123 -0
  252. package/themes/depth.scss +46 -0
  253. package/themes/extrude.css +219 -0
  254. package/themes/extrude.scss +255 -0
  255. package/themes/folio.css +986 -0
  256. package/themes/folio.scss +1047 -0
  257. package/themes/forest.css +87 -0
  258. package/themes/forest.scss +32 -0
  259. package/themes/gentle.css +66 -0
  260. package/themes/gentle.scss +39 -0
  261. package/themes/grape.css +87 -0
  262. package/themes/grape.scss +32 -0
  263. package/themes/greese.css +36 -0
  264. package/themes/greese.scss +21 -0
  265. package/themes/mono.css +87 -0
  266. package/themes/mono.scss +32 -0
  267. package/themes/ocean.css +87 -0
  268. package/themes/ocean.scss +32 -0
  269. package/themes/outline.css +127 -0
  270. package/themes/outline.scss +126 -0
  271. package/themes/pebble.css +65 -0
  272. package/themes/pebble.scss +69 -0
  273. package/themes/pocket.css +137 -0
  274. package/themes/pocket.scss +45 -0
  275. package/themes/ridge.css +927 -0
  276. package/themes/ridge.scss +998 -0
  277. package/themes/snappy.css +82 -0
  278. package/themes/snappy.scss +40 -0
  279. package/themes/soft.css +79 -0
  280. package/themes/soft.scss +84 -0
  281. package/themes/sunset.css +87 -0
  282. package/themes/sunset.scss +32 -0
  283. package/themes/ticket.css +960 -0
  284. package/themes/ticket.scss +1031 -0
  285. package/themes/tilt.css +148 -0
  286. package/themes/tilt.scss +169 -0
  287. package/themes/wipe.css +186 -0
  288. package/themes/wipe.scss +46 -0
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Tilt: real perspective. Hovered, buttons and chips lean back toward you from their lower edge and cards and tiles turn and lift off the page; pressed, they push into it. The current tab stands up off its list. Softer corners than the library’s.
3
+ *
4
+ * A greese ui shape theme (ADR 0025): radii, and components outlined with one
5
+ * clip and one border ring each (ADR 0024), in @layer greese.overrides. It
6
+ * sets no colors and no motion, so it goes with any color or motion theme.
7
+ * Load it after greese ui's styles:
8
+ *
9
+ * import '@greese/ui/themes/tilt.css'
10
+ *
11
+ * Generated from apps/site/src/studio/shapes.ts (npm run themes -w site).
12
+ */
13
+ @layer greese.reset, greese.tokens, greese.theme, greese.base, greese.components, greese.overrides, greese.utilities;
14
+ @layer greese.theme {
15
+ :root {
16
+ --greese-corner-control: var(--greese-radius-lg);
17
+ --greese-corner-field: var(--greese-radius-md);
18
+ --greese-corner-surface: var(--greese-radius-lg);
19
+ --greese-corner-panel: var(--greese-radius-lg);
20
+ --greese-corner-inset: var(--greese-radius-md);
21
+ --greese-corner-pill: var(--greese-radius-pill);
22
+ --greese-corner-round: var(--greese-radius-round);
23
+ }
24
+ }
25
+ @layer greese.overrides {
26
+ .greese-Accordion {
27
+ display: grid;
28
+ gap: var(--greese-space-2);
29
+ border-block-start: 0;
30
+ }
31
+ }
32
+ @layer greese.overrides {
33
+ .greese-AccordionItem {
34
+ border-block-end: 0;
35
+ }
36
+ }
37
+ @layer greese.overrides {
38
+ .greese-Button {
39
+ transform-origin: 50% 100%;
40
+ }
41
+ @media (prefers-reduced-motion: no-preference) {
42
+ .greese-Button {
43
+ transition: transform var(--greese-duration-normal) var(--greese-easing-standard), background-color var(--greese-duration-fast) var(--greese-easing-standard), border-color var(--greese-duration-fast) var(--greese-easing-standard), box-shadow var(--greese-duration-normal) var(--greese-easing-standard), color var(--greese-duration-fast) var(--greese-easing-standard);
44
+ }
45
+ }
46
+ @media (prefers-reduced-motion: no-preference) and (hover: hover) {
47
+ .greese-Button:hover:not(:disabled, [aria-disabled=true]) {
48
+ transform: perspective(24rem) rotateX(18deg) translateZ(0.25rem);
49
+ }
50
+ }
51
+ @media (prefers-reduced-motion: no-preference) {
52
+ .greese-Button:active:not(:disabled, [aria-disabled=true]) {
53
+ transform: perspective(24rem) translateZ(-0.75rem);
54
+ }
55
+ }
56
+ }
57
+ @layer greese.overrides {
58
+ .greese-Card.greese-Card--interactive {
59
+ transform-origin: 50% 50%;
60
+ }
61
+ @media (prefers-reduced-motion: no-preference) {
62
+ .greese-Card.greese-Card--interactive {
63
+ transition: transform var(--greese-duration-normal) var(--greese-easing-standard), background-color var(--greese-duration-fast) var(--greese-easing-standard), border-color var(--greese-duration-fast) var(--greese-easing-standard), box-shadow var(--greese-duration-normal) var(--greese-easing-standard), color var(--greese-duration-fast) var(--greese-easing-standard);
64
+ }
65
+ }
66
+ @media (prefers-reduced-motion: no-preference) and (hover: hover) {
67
+ .greese-Card.greese-Card--interactive:hover:not(:disabled, [aria-disabled=true]) {
68
+ transform: perspective(60rem) rotateX(5deg) rotateY(-7deg) translateZ(1rem);
69
+ }
70
+ }
71
+ @media (prefers-reduced-motion: no-preference) {
72
+ .greese-Card.greese-Card--interactive:active:not(:disabled, [aria-disabled=true]) {
73
+ transform: perspective(60rem) translateZ(-0.5rem);
74
+ }
75
+ }
76
+ }
77
+ @layer greese.overrides {
78
+ .greese-Chip {
79
+ transform-origin: 50% 100%;
80
+ }
81
+ @media (prefers-reduced-motion: no-preference) {
82
+ .greese-Chip {
83
+ transition: transform var(--greese-duration-normal) var(--greese-easing-standard), background-color var(--greese-duration-fast) var(--greese-easing-standard), border-color var(--greese-duration-fast) var(--greese-easing-standard), box-shadow var(--greese-duration-normal) var(--greese-easing-standard), color var(--greese-duration-fast) var(--greese-easing-standard);
84
+ }
85
+ }
86
+ @media (prefers-reduced-motion: no-preference) and (hover: hover) {
87
+ .greese-Chip:hover:not(:disabled, [aria-disabled=true]) {
88
+ transform: perspective(20rem) rotateX(18deg);
89
+ }
90
+ }
91
+ @media (prefers-reduced-motion: no-preference) {
92
+ .greese-Chip:active:not(:disabled, [aria-disabled=true]) {
93
+ transform: perspective(20rem) translateZ(-0.5rem);
94
+ }
95
+ }
96
+ }
97
+ @layer greese.overrides {
98
+ .greese-Collapsible > .greese-Collapsible-trigger {
99
+ padding-inline: var(--greese-space-4);
100
+ background-color: var(--greese-color-surface);
101
+ border: 1px solid var(--greese-collapsible-border, var(--greese-color-border));
102
+ border-radius: var(--greese-corner-control);
103
+ }
104
+ @media (hover: hover) {
105
+ .greese-Collapsible > .greese-Collapsible-trigger:hover {
106
+ background-color: color-mix(in oklab, var(--greese-color-fg) 5%, var(--greese-color-surface));
107
+ }
108
+ }
109
+ .greese-Collapsible[open] > .greese-Collapsible-trigger {
110
+ margin-block-end: var(--greese-space-2);
111
+ }
112
+ .greese-Collapsible > .greese-Collapsible-content {
113
+ padding-inline: var(--greese-space-4);
114
+ }
115
+ }
116
+ @layer greese.overrides {
117
+ .greese-Tab {
118
+ transform-origin: 50% 100%;
119
+ }
120
+ @media (prefers-reduced-motion: no-preference) {
121
+ .greese-Tab {
122
+ transition: transform var(--greese-duration-normal) var(--greese-easing-standard), color var(--greese-duration-fast) var(--greese-easing-standard), background-color var(--greese-duration-fast) var(--greese-easing-standard), box-shadow var(--greese-duration-fast) var(--greese-easing-standard);
123
+ }
124
+ .greese-Tab[aria-selected=true] {
125
+ transform: perspective(16rem) rotateX(-14deg);
126
+ }
127
+ }
128
+ }
129
+ @layer greese.overrides {
130
+ .greese-Tile {
131
+ transform-origin: 50% 50%;
132
+ }
133
+ @media (prefers-reduced-motion: no-preference) {
134
+ .greese-Tile {
135
+ transition: transform var(--greese-duration-normal) var(--greese-easing-standard), background-color var(--greese-duration-fast) var(--greese-easing-standard), border-color var(--greese-duration-fast) var(--greese-easing-standard), box-shadow var(--greese-duration-normal) var(--greese-easing-standard), color var(--greese-duration-fast) var(--greese-easing-standard);
136
+ }
137
+ }
138
+ @media (prefers-reduced-motion: no-preference) and (hover: hover) {
139
+ .greese-Tile:hover:not(:disabled, [aria-disabled=true]) {
140
+ transform: perspective(50rem) rotateX(6deg) rotateY(-8deg) translateZ(0.75rem);
141
+ }
142
+ }
143
+ @media (prefers-reduced-motion: no-preference) {
144
+ .greese-Tile:active:not(:disabled, [aria-disabled=true]) {
145
+ transform: perspective(50rem) translateZ(-0.5rem);
146
+ }
147
+ }
148
+ }
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Tilt: real perspective. Hovered, buttons and chips lean back toward you from their lower edge and cards and tiles turn and lift off the page; pressed, they push into it. The current tab stands up off its list. Softer corners than the library’s.
3
+ *
4
+ * A greese ui shape theme (ADR 0025): radii, and components outlined with one
5
+ * clip and one border ring each (ADR 0024), in @layer greese.overrides. It
6
+ * sets no colors and no motion, so it goes with any color or motion theme.
7
+ * Compile it with Sass's package importer, after greese ui's
8
+ * styles, or use the compiled tilt.css.
9
+ *
10
+ * Generated from apps/site/src/studio/shapes.ts (npm run themes -w site).
11
+ */
12
+ // Generated by greese ui Theme Studio from greese-theme.json. Edit it there, or in
13
+ // the studio (npm run studio); changes made here are overwritten.
14
+ @use 'pkg:@greese/ui/scss/kit' as greese;
15
+
16
+ @include greese.tokens((
17
+ corner: (
18
+ control: "var(--greese-radius-lg)",
19
+ field: "var(--greese-radius-md)",
20
+ surface: "var(--greese-radius-lg)",
21
+ panel: "var(--greese-radius-lg)",
22
+ inset: "var(--greese-radius-md)",
23
+ pill: "var(--greese-radius-pill)",
24
+ round: "var(--greese-radius-round)",
25
+ ),
26
+ ));
27
+
28
+ @include greese.component(Accordion) {
29
+ display: grid;
30
+ gap: var(--greese-space-2);
31
+ border-block-start: 0;
32
+ }
33
+
34
+ @include greese.component(AccordionItem) {
35
+ border-block-end: 0;
36
+ }
37
+
38
+ @include greese.component(Button) {
39
+ transform-origin: 50% 100%;
40
+
41
+ @include greese.motion-safe {
42
+ transition:
43
+ transform var(--greese-duration-normal) var(--greese-easing-standard),
44
+ background-color var(--greese-duration-fast) var(--greese-easing-standard),
45
+ border-color var(--greese-duration-fast) var(--greese-easing-standard),
46
+ box-shadow var(--greese-duration-normal) var(--greese-easing-standard),
47
+ color var(--greese-duration-fast) var(--greese-easing-standard);
48
+
49
+ @media (hover: hover) {
50
+ &:hover:not(:disabled, [aria-disabled='true']) {
51
+ transform: perspective(24rem) rotateX(18deg) translateZ(0.25rem);
52
+ }
53
+ }
54
+
55
+ &:active:not(:disabled, [aria-disabled='true']) {
56
+ transform: perspective(24rem) translateZ(-0.75rem);
57
+ }
58
+ }
59
+ }
60
+
61
+ @include greese.component(Card) {
62
+ &.greese-Card--interactive {
63
+ transform-origin: 50% 50%;
64
+
65
+ @include greese.motion-safe {
66
+ transition:
67
+ transform var(--greese-duration-normal) var(--greese-easing-standard),
68
+ background-color var(--greese-duration-fast) var(--greese-easing-standard),
69
+ border-color var(--greese-duration-fast) var(--greese-easing-standard),
70
+ box-shadow var(--greese-duration-normal) var(--greese-easing-standard),
71
+ color var(--greese-duration-fast) var(--greese-easing-standard);
72
+
73
+ @media (hover: hover) {
74
+ &:hover:not(:disabled, [aria-disabled='true']) {
75
+ transform: perspective(60rem) rotateX(5deg) rotateY(-7deg) translateZ(1rem);
76
+ }
77
+ }
78
+
79
+ &:active:not(:disabled, [aria-disabled='true']) {
80
+ transform: perspective(60rem) translateZ(-0.5rem);
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ @include greese.component(Chip) {
87
+ transform-origin: 50% 100%;
88
+
89
+ @include greese.motion-safe {
90
+ transition:
91
+ transform var(--greese-duration-normal) var(--greese-easing-standard),
92
+ background-color var(--greese-duration-fast) var(--greese-easing-standard),
93
+ border-color var(--greese-duration-fast) var(--greese-easing-standard),
94
+ box-shadow var(--greese-duration-normal) var(--greese-easing-standard),
95
+ color var(--greese-duration-fast) var(--greese-easing-standard);
96
+
97
+ @media (hover: hover) {
98
+ &:hover:not(:disabled, [aria-disabled='true']) {
99
+ transform: perspective(20rem) rotateX(18deg);
100
+ }
101
+ }
102
+
103
+ &:active:not(:disabled, [aria-disabled='true']) {
104
+ transform: perspective(20rem) translateZ(-0.5rem);
105
+ }
106
+ }
107
+ }
108
+
109
+ @include greese.component(Collapsible) {
110
+ > .greese-Collapsible-trigger {
111
+ padding-inline: var(--greese-space-4);
112
+ background-color: var(--greese-color-surface);
113
+ border: 1px solid var(--greese-collapsible-border, var(--greese-color-border));
114
+ border-radius: var(--greese-corner-control);
115
+
116
+ @media (hover: hover) {
117
+ &:hover {
118
+ background-color: color-mix(in oklab, var(--greese-color-fg) 5%, var(--greese-color-surface));
119
+ }
120
+ }
121
+ }
122
+
123
+ &[open] > .greese-Collapsible-trigger {
124
+ margin-block-end: var(--greese-space-2);
125
+ }
126
+
127
+ > .greese-Collapsible-content {
128
+ padding-inline: var(--greese-space-4);
129
+ }
130
+ }
131
+
132
+ @include greese.component(Tab) {
133
+ transform-origin: 50% 100%;
134
+
135
+ @include greese.motion-safe {
136
+ transition:
137
+ transform var(--greese-duration-normal) var(--greese-easing-standard),
138
+ color var(--greese-duration-fast) var(--greese-easing-standard),
139
+ background-color var(--greese-duration-fast) var(--greese-easing-standard),
140
+ box-shadow var(--greese-duration-fast) var(--greese-easing-standard);
141
+
142
+ &[aria-selected='true'] {
143
+ transform: perspective(16rem) rotateX(-14deg);
144
+ }
145
+ }
146
+ }
147
+
148
+ @include greese.component(Tile) {
149
+ transform-origin: 50% 50%;
150
+
151
+ @include greese.motion-safe {
152
+ transition:
153
+ transform var(--greese-duration-normal) var(--greese-easing-standard),
154
+ background-color var(--greese-duration-fast) var(--greese-easing-standard),
155
+ border-color var(--greese-duration-fast) var(--greese-easing-standard),
156
+ box-shadow var(--greese-duration-normal) var(--greese-easing-standard),
157
+ color var(--greese-duration-fast) var(--greese-easing-standard);
158
+
159
+ @media (hover: hover) {
160
+ &:hover:not(:disabled, [aria-disabled='true']) {
161
+ transform: perspective(50rem) rotateX(6deg) rotateY(-8deg) translateZ(0.75rem);
162
+ }
163
+ }
164
+
165
+ &:active:not(:disabled, [aria-disabled='true']) {
166
+ transform: perspective(50rem) translateZ(-0.5rem);
167
+ }
168
+ }
169
+ }
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Wipe: things are revealed in place rather than moved. Reveals wipe up, panels and toasts open from the middle, table rows wipe across, menus wipe down from their trigger and back up, tooltips open and close from the middle, and dialogs open and close as a circle. Pages change along one edge, the whole page at once: the next wipes in as the last wipes away, from the right going forward and from the left going back.
3
+ *
4
+ * A greese ui motion theme (ADR 0025): it assigns the motion roles (which
5
+ * built-in effect plays where, and which duration and easing it takes) and
6
+ * paces every entrance. It redefines no effect and no token, and sets no
7
+ * colors and no shapes, so it goes with any of those.
8
+ * Load it after greese ui's styles:
9
+ *
10
+ * import '@greese/ui/themes/wipe.css'
11
+ *
12
+ * Generated from apps/site/src/studio/motions.ts (npm run themes -w site).
13
+ */
14
+ @layer greese.reset, greese.tokens, greese.theme, greese.base, greese.components, greese.overrides, greese.utilities;
15
+ @layer greese.overrides {
16
+ :root {
17
+ --greese-motion-duration: 0.6s;
18
+ --greese-motion-distance: 0.75rem;
19
+ --greese-motion-stagger: 0.06s;
20
+ --greese-motion-theme: greese-wipe-up;
21
+ --greese-motion-content: greese-wipe-open-x;
22
+ --greese-motion-rows: greese-wipe-right;
23
+ --greese-motion-toast: greese-wipe-open-x;
24
+ --greese-motion-dialog: greese-iris-in;
25
+ --greese-motion-dialog-exit-translate: 0px 0px;
26
+ --greese-motion-dialog-exit-scale: 1;
27
+ --greese-motion-dialog-exit-opacity: 1;
28
+ --greese-motion-dialog-exit-mask-image: radial-gradient(closest-side, black 98%, transparent);
29
+ --greese-motion-dialog-exit-mask-size: 0% 0%;
30
+ --greese-motion-dialog-exit-mask-repeat: no-repeat;
31
+ --greese-motion-dialog-exit-mask-position: 50% 50%;
32
+ --greese-motion-dialog-exit-transform: none;
33
+ --greese-motion-dialog-exit-mask-from: 142% 142%;
34
+ --greese-motion-popover: greese-wipe-down;
35
+ --greese-motion-popover-exit-translate: 0px 0px;
36
+ --greese-motion-popover-exit-scale: 1;
37
+ --greese-motion-popover-exit-opacity: 1;
38
+ --greese-motion-popover-exit-mask-image: linear-gradient(black, black);
39
+ --greese-motion-popover-exit-mask-size: 100% 0%;
40
+ --greese-motion-popover-exit-mask-repeat: no-repeat;
41
+ --greese-motion-popover-exit-mask-position: 50% 0%;
42
+ --greese-motion-popover-exit-transform: none;
43
+ --greese-motion-popover-exit-mask-from: 100% 100%;
44
+ --greese-motion-tooltip: greese-wipe-open-x;
45
+ --greese-motion-tooltip-exit-translate: 0px 0px;
46
+ --greese-motion-tooltip-exit-scale: 1;
47
+ --greese-motion-tooltip-exit-opacity: 1;
48
+ --greese-motion-tooltip-exit-mask-image: linear-gradient(black, black);
49
+ --greese-motion-tooltip-exit-mask-size: 0% 100%;
50
+ --greese-motion-tooltip-exit-mask-repeat: no-repeat;
51
+ --greese-motion-tooltip-exit-mask-position: 50% 50%;
52
+ --greese-motion-tooltip-exit-transform: none;
53
+ --greese-motion-tooltip-exit-mask-from: 100% 100%;
54
+ --greese-motion-content-duration: var(--greese-duration-normal);
55
+ --greese-motion-rows-duration: var(--greese-duration-slow);
56
+ --greese-motion-overlay-duration: var(--greese-duration-normal);
57
+ --greese-motion-toast-duration: var(--greese-duration-normal);
58
+ --greese-motion-exit-duration: var(--greese-duration-normal);
59
+ --greese-motion-enter-ease: cubic-bezier(0.65, 0, 0.35, 1);
60
+ --greese-motion-exit-ease: cubic-bezier(0.65, 0, 0.35, 1);
61
+ --greese-motion-page: greese-wipe-left;
62
+ --greese-motion-page-exit: greese-wipe-out-left;
63
+ --greese-motion-page-back: greese-wipe-right;
64
+ --greese-motion-page-back-exit: greese-wipe-out-right;
65
+ --greese-motion-page-mode: snapshot;
66
+ --greese-motion-page-duration: 0.6s;
67
+ --greese-motion-page-ease: cubic-bezier(0.65, 0, 0.35, 1);
68
+ --greese-motion-page-stagger: 0.06s;
69
+ }
70
+ }
71
+ @layer greese.utilities {
72
+ @media (prefers-reduced-motion: no-preference) {
73
+ @keyframes greese-wipe-up {
74
+ from {
75
+ mask-size: 100% 0%;
76
+ mask-image: linear-gradient(black, black);
77
+ mask-repeat: no-repeat;
78
+ mask-position: 50% 100%;
79
+ }
80
+ to {
81
+ mask-size: 100% 100%;
82
+ mask-image: linear-gradient(black, black);
83
+ mask-repeat: no-repeat;
84
+ mask-position: 50% 100%;
85
+ }
86
+ }
87
+ @keyframes greese-wipe-open-x {
88
+ from {
89
+ mask-size: 0% 100%;
90
+ mask-image: linear-gradient(black, black);
91
+ mask-repeat: no-repeat;
92
+ mask-position: 50% 50%;
93
+ }
94
+ to {
95
+ mask-size: 100% 100%;
96
+ mask-image: linear-gradient(black, black);
97
+ mask-repeat: no-repeat;
98
+ mask-position: 50% 50%;
99
+ }
100
+ }
101
+ @keyframes greese-wipe-right {
102
+ from {
103
+ mask-size: 0% 100%;
104
+ mask-image: linear-gradient(black, black);
105
+ mask-repeat: no-repeat;
106
+ mask-position: 0% 50%;
107
+ }
108
+ to {
109
+ mask-size: 100% 100%;
110
+ mask-image: linear-gradient(black, black);
111
+ mask-repeat: no-repeat;
112
+ mask-position: 0% 50%;
113
+ }
114
+ }
115
+ @keyframes greese-iris-in {
116
+ from {
117
+ mask-size: 0% 0%;
118
+ mask-image: radial-gradient(closest-side, black 98%, transparent);
119
+ mask-repeat: no-repeat;
120
+ mask-position: 50% 50%;
121
+ }
122
+ to {
123
+ mask-size: 142% 142%;
124
+ mask-image: radial-gradient(closest-side, black 98%, transparent);
125
+ mask-repeat: no-repeat;
126
+ mask-position: 50% 50%;
127
+ }
128
+ }
129
+ @keyframes greese-wipe-down {
130
+ from {
131
+ mask-size: 100% 0%;
132
+ mask-image: linear-gradient(black, black);
133
+ mask-repeat: no-repeat;
134
+ mask-position: 50% 0%;
135
+ }
136
+ to {
137
+ mask-size: 100% 100%;
138
+ mask-image: linear-gradient(black, black);
139
+ mask-repeat: no-repeat;
140
+ mask-position: 50% 0%;
141
+ }
142
+ }
143
+ @keyframes greese-wipe-left {
144
+ from {
145
+ mask-size: 0% 100%;
146
+ mask-image: linear-gradient(black, black);
147
+ mask-repeat: no-repeat;
148
+ mask-position: 100% 50%;
149
+ }
150
+ to {
151
+ mask-size: 100% 100%;
152
+ mask-image: linear-gradient(black, black);
153
+ mask-repeat: no-repeat;
154
+ mask-position: 100% 50%;
155
+ }
156
+ }
157
+ @keyframes greese-wipe-out-left {
158
+ from {
159
+ mask-size: 100% 100%;
160
+ mask-image: linear-gradient(black, black);
161
+ mask-repeat: no-repeat;
162
+ mask-position: 0% 50%;
163
+ }
164
+ to {
165
+ mask-size: 0% 100%;
166
+ mask-image: linear-gradient(black, black);
167
+ mask-repeat: no-repeat;
168
+ mask-position: 0% 50%;
169
+ }
170
+ }
171
+ @keyframes greese-wipe-out-right {
172
+ from {
173
+ mask-size: 100% 100%;
174
+ mask-image: linear-gradient(black, black);
175
+ mask-repeat: no-repeat;
176
+ mask-position: 100% 50%;
177
+ }
178
+ to {
179
+ mask-size: 0% 100%;
180
+ mask-image: linear-gradient(black, black);
181
+ mask-repeat: no-repeat;
182
+ mask-position: 100% 50%;
183
+ }
184
+ }
185
+ }
186
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Wipe: things are revealed in place rather than moved. Reveals wipe up, panels and toasts open from the middle, table rows wipe across, menus wipe down from their trigger and back up, tooltips open and close from the middle, and dialogs open and close as a circle. Pages change along one edge, the whole page at once: the next wipes in as the last wipes away, from the right going forward and from the left going back.
3
+ *
4
+ * A greese ui motion theme (ADR 0025): it assigns the motion roles (which
5
+ * built-in effect plays where, and which duration and easing it takes) and
6
+ * paces every entrance. It redefines no effect and no token, and sets no
7
+ * colors and no shapes, so it goes with any of those.
8
+ * Compile it with Sass's package importer, after greese ui's
9
+ * styles, or use the compiled wipe.css.
10
+ *
11
+ * Generated from apps/site/src/studio/motions.ts (npm run themes -w site).
12
+ */
13
+ // Generated by greese ui Theme Studio from greese-theme.json. Edit it there, or in
14
+ // the studio (npm run studio); changes made here are overwritten.
15
+ @use 'pkg:@greese/ui/scss/kit' as greese;
16
+
17
+ @include greese.motion-defaults((
18
+ duration: "0.6s",
19
+ distance: "0.75rem",
20
+ stagger: "0.06s",
21
+ theme: "wipe-up",
22
+ content: "wipe-open-x",
23
+ rows: "wipe-right",
24
+ toast: "wipe-open-x",
25
+ dialog: "iris-in",
26
+ dialog-exit: "iris-out",
27
+ popover: "wipe-down",
28
+ popover-exit: "wipe-out-up",
29
+ tooltip: "wipe-open-x",
30
+ tooltip-exit: "wipe-close-x",
31
+ content-duration: "normal",
32
+ rows-duration: "slow",
33
+ overlay-duration: "normal",
34
+ toast-duration: "normal",
35
+ exit-duration: "normal",
36
+ enter-ease: "cubic-bezier(0.65, 0, 0.35, 1)",
37
+ exit-ease: "cubic-bezier(0.65, 0, 0.35, 1)",
38
+ page: "wipe-left",
39
+ page-exit: "wipe-out-left",
40
+ page-back: "wipe-right",
41
+ page-back-exit: "wipe-out-right",
42
+ page-mode: "snapshot",
43
+ page-duration: "0.6s",
44
+ page-ease: "cubic-bezier(0.65, 0, 0.35, 1)",
45
+ page-stagger: "0.06s",
46
+ ));