@greese/ui 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) 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 +979 -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 +11907 -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 +3010 -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 +168 -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/depth.css +123 -0
  250. package/themes/depth.scss +46 -0
  251. package/themes/extrude.css +219 -0
  252. package/themes/extrude.scss +255 -0
  253. package/themes/folio.css +986 -0
  254. package/themes/folio.scss +1047 -0
  255. package/themes/gentle.css +66 -0
  256. package/themes/gentle.scss +39 -0
  257. package/themes/outline.css +127 -0
  258. package/themes/outline.scss +126 -0
  259. package/themes/pebble.css +65 -0
  260. package/themes/pebble.scss +69 -0
  261. package/themes/pocket.css +137 -0
  262. package/themes/pocket.scss +45 -0
  263. package/themes/ridge.css +927 -0
  264. package/themes/ridge.scss +998 -0
  265. package/themes/snappy.css +82 -0
  266. package/themes/snappy.scss +40 -0
  267. package/themes/soft.css +79 -0
  268. package/themes/soft.scss +84 -0
  269. package/themes/ticket.css +960 -0
  270. package/themes/ticket.scss +1031 -0
  271. package/themes/tilt.css +148 -0
  272. package/themes/tilt.scss +169 -0
  273. package/themes/wipe.css +186 -0
  274. package/themes/wipe.scss +46 -0
package/dist/base.css ADDED
@@ -0,0 +1,67 @@
1
+ /* GENERATED by @greese/ui from src/tokens.ts - do not edit. */
2
+ @layer greese.reset, greese.tokens, greese.theme, greese.base, greese.components, greese.overrides, greese.utilities;
3
+ @layer greese.reset {
4
+ *,
5
+ *::before,
6
+ *::after {
7
+ box-sizing: border-box;
8
+ }
9
+ html {
10
+ text-size-adjust: 100%;
11
+ -webkit-tap-highlight-color: transparent;
12
+ }
13
+ body {
14
+ min-block-size: 100dvh;
15
+ margin: 0;
16
+ }
17
+ h1,
18
+ h2,
19
+ h3,
20
+ h4,
21
+ h5,
22
+ h6,
23
+ p,
24
+ figure,
25
+ blockquote,
26
+ dl,
27
+ dd {
28
+ margin: 0;
29
+ }
30
+ h1,
31
+ h2,
32
+ h3,
33
+ h4,
34
+ h5,
35
+ h6,
36
+ p {
37
+ overflow-wrap: break-word;
38
+ }
39
+ img,
40
+ picture,
41
+ video,
42
+ canvas,
43
+ svg {
44
+ display: block;
45
+ max-inline-size: 100%;
46
+ }
47
+ input,
48
+ button,
49
+ textarea,
50
+ select {
51
+ font: inherit;
52
+ }
53
+ }
54
+ @layer greese.base {
55
+ body {
56
+ font-family: var(--greese-font-body);
57
+ font-size: var(--greese-type-p2-font-size);
58
+ line-height: var(--greese-line-height-normal);
59
+ color: var(--greese-color-fg);
60
+ background-color: var(--greese-color-canvas);
61
+ -webkit-font-smoothing: antialiased;
62
+ }
63
+ :focus-visible {
64
+ outline: 2px solid var(--greese-color-focus-ring);
65
+ outline-offset: 2px;
66
+ }
67
+ }
@@ -0,0 +1,16 @@
1
+ /** `system` follows the OS setting; `light` and `dark` force a mode. */
2
+ export type ColorScheme = 'light' | 'dark' | 'system';
3
+ export declare const DEFAULT_SCHEME_STORAGE_KEY = "greese-scheme";
4
+ export interface SchemeScriptOptions {
5
+ /** localStorage key holding the user's choice. Must match useColorScheme's. */
6
+ storageKey?: string;
7
+ }
8
+ /**
9
+ * A tiny inline script that applies the user's saved color scheme before first
10
+ * paint, so a dark-mode user never sees a flash of light. Put it in `<head>`:
11
+ *
12
+ * ```tsx
13
+ * <script dangerouslySetInnerHTML={{ __html: getSchemeScript() }} />
14
+ * ```
15
+ */
16
+ export declare const getSchemeScript: ({ storageKey, }?: SchemeScriptOptions) => string;
@@ -0,0 +1,13 @@
1
+ import { SCHEME_ATTR } from "./css.js";
2
+ export const DEFAULT_SCHEME_STORAGE_KEY = 'greese-scheme';
3
+ /**
4
+ * A tiny inline script that applies the user's saved color scheme before first
5
+ * paint, so a dark-mode user never sees a flash of light. Put it in `<head>`:
6
+ *
7
+ * ```tsx
8
+ * <script dangerouslySetInnerHTML={{ __html: getSchemeScript() }} />
9
+ * ```
10
+ */
11
+ export const getSchemeScript = ({ storageKey = DEFAULT_SCHEME_STORAGE_KEY, } = {}) => `(function(){try{var s=localStorage.getItem(${JSON.stringify(storageKey)});` +
12
+ `if(s==='light'||s==='dark'){document.documentElement.setAttribute('${SCHEME_ATTR}',s)}}` +
13
+ `catch(e){}})();`;
@@ -0,0 +1,15 @@
1
+ /** Light and dark ink for content on a color: white, or greese ui's near-black canvas. */
2
+ export declare const CONTENT_LIGHT = "#ffffff";
3
+ export declare const CONTENT_DARK: "#11171c";
4
+ /** The WCAG AA minimum for normal text. */
5
+ export declare const AA = 4.5;
6
+ /** WCAG relative luminance, 0 (black) to 1 (white), of `#rgb` or `#rrggbb`. */
7
+ export declare const luminance: (color: string) => number | undefined;
8
+ /** The WCAG contrast ratio of two hex colors (1–21), or undefined. */
9
+ export declare const contrastRatio: (a: string, b: string) => number | undefined;
10
+ /**
11
+ * The text color for content on `color`: white or near-black, whichever
12
+ * contrasts more, as long as it reaches AA. Where neither does (a mid-tone
13
+ * near the crossover), pure black: when white fails, black always passes.
14
+ */
15
+ export declare const contentColor: (color: string) => string | undefined;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * WCAG 2 contrast, for picking text colors that stay readable on a theme's
3
+ * brand colors. Hex colors only (`#rgb`, `#rrggbb`): anything else (a
4
+ * `var()`, `oklch()`) can't be measured here, so callers keep their default.
5
+ */
6
+ import { black, steel, white } from "./palette.js";
7
+ /** Light and dark ink for content on a color: white, or greese ui's near-black canvas. */
8
+ export const CONTENT_LIGHT = white;
9
+ export const CONTENT_DARK = steel[999];
10
+ /** The WCAG AA minimum for normal text. */
11
+ export const AA = 4.5;
12
+ /** WCAG relative luminance, 0 (black) to 1 (white), of `#rgb` or `#rrggbb`. */
13
+ export const luminance = (color) => {
14
+ let hex = /^#([0-9a-f]{3}){1,2}$/i.test(color) ? color.slice(1) : '';
15
+ if (!hex)
16
+ return undefined;
17
+ if (hex.length === 3)
18
+ hex = hex.replace(/./g, '$&$&');
19
+ return [0.2126, 0.7152, 0.0722].reduce((sum, weight, i) => {
20
+ const s = parseInt(hex.slice(i * 2, i * 2 + 2), 16) / 255;
21
+ return sum + weight * (s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4);
22
+ }, 0);
23
+ };
24
+ /** The WCAG contrast ratio of two hex colors (1–21), or undefined. */
25
+ export const contrastRatio = (a, b) => {
26
+ const la = luminance(a);
27
+ const lb = luminance(b);
28
+ if (la === undefined || lb === undefined)
29
+ return undefined;
30
+ return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
31
+ };
32
+ /**
33
+ * The text color for content on `color`: white or near-black, whichever
34
+ * contrasts more, as long as it reaches AA. Where neither does (a mid-tone
35
+ * near the crossover), pure black: when white fails, black always passes.
36
+ */
37
+ export const contentColor = (color) => {
38
+ if (luminance(color) === undefined)
39
+ return undefined;
40
+ const light = contrastRatio(color, CONTENT_LIGHT);
41
+ const dark = contrastRatio(color, CONTENT_DARK);
42
+ return Math.max(light, dark) < AA ? black : light >= dark ? CONTENT_LIGHT : CONTENT_DARK;
43
+ };
@@ -0,0 +1,9 @@
1
+ @import './core.css';
2
+ @layer greese.components {
3
+ .greese-Accordion {
4
+ border-block-start: 1px solid var(--greese-color-border);
5
+ }
6
+ .greese-AccordionItem {
7
+ border-block-end: 1px solid var(--greese-color-border);
8
+ }
9
+ }
@@ -0,0 +1,6 @@
1
+ @import './core.css';
2
+ @layer greese.components {
3
+ .greese-ActionSelect {
4
+ max-inline-size: 100%;
5
+ }
6
+ }
@@ -0,0 +1,84 @@
1
+ @import './core.css';
2
+ @layer greese.components {
3
+ .greese-Alert--neutral {
4
+ --greese-alert-tone: var(--greese-color-fg);
5
+ --greese-alert-tone-on: var(--greese-color-canvas);
6
+ }
7
+ .greese-Alert--primary {
8
+ --greese-alert-tone: var(--greese-color-primary);
9
+ --greese-alert-tone-on: var(--greese-color-primary-content);
10
+ }
11
+ .greese-Alert--secondary {
12
+ --greese-alert-tone: var(--greese-color-secondary);
13
+ --greese-alert-tone-on: var(--greese-color-secondary-content);
14
+ }
15
+ .greese-Alert--tertiary {
16
+ --greese-alert-tone: var(--greese-color-tertiary);
17
+ --greese-alert-tone-on: var(--greese-color-tertiary-content);
18
+ }
19
+ .greese-Alert--positive {
20
+ --greese-alert-tone: var(--greese-color-positive);
21
+ --greese-alert-tone-on: var(--greese-color-canvas);
22
+ }
23
+ .greese-Alert--negative {
24
+ --greese-alert-tone: var(--greese-color-negative);
25
+ --greese-alert-tone-on: var(--greese-color-negative-content);
26
+ }
27
+ .greese-Alert--warning {
28
+ --greese-alert-tone: var(--greese-color-warning);
29
+ --greese-alert-tone-on: var(--greese-color-canvas);
30
+ }
31
+ .greese-Alert--info {
32
+ --greese-alert-tone: var(--greese-color-info);
33
+ --greese-alert-tone-on: var(--greese-color-canvas);
34
+ }
35
+ .greese-Alert {
36
+ display: flex;
37
+ gap: var(--greese-space-3);
38
+ align-items: flex-start;
39
+ padding: var(--greese-space-3) var(--greese-space-4);
40
+ font-size: var(--greese-type-p3-font-size);
41
+ line-height: var(--greese-line-height-snug);
42
+ color: var(--greese-color-fg);
43
+ border: 1px solid transparent;
44
+ border-radius: var(--greese-corner-panel);
45
+ }
46
+ .greese-Alert--soft {
47
+ background-color: color-mix(in oklab, var(--greese-alert-tone) 10%, var(--greese-color-canvas));
48
+ border-color: color-mix(in oklab, var(--greese-alert-tone) 25%, transparent);
49
+ }
50
+ .greese-Alert--outline {
51
+ border-color: var(--greese-alert-tone);
52
+ }
53
+ .greese-Alert-icon {
54
+ display: inline-flex;
55
+ flex-shrink: 0;
56
+ margin-block: 0.1em;
57
+ color: var(--greese-alert-tone);
58
+ }
59
+ .greese-Alert-icon > svg {
60
+ inline-size: 1.25em;
61
+ block-size: 1.25em;
62
+ }
63
+ .greese-Alert-body {
64
+ display: flex;
65
+ flex: 1 1 auto;
66
+ flex-direction: column;
67
+ gap: var(--greese-space-1);
68
+ min-inline-size: 0;
69
+ }
70
+ .greese-Alert-title {
71
+ margin: 0;
72
+ font-weight: var(--greese-font-weight-semibold);
73
+ }
74
+ .greese-Alert-actions {
75
+ display: flex;
76
+ flex-wrap: wrap;
77
+ gap: var(--greese-space-2);
78
+ margin-block-start: var(--greese-space-2);
79
+ }
80
+ .greese-Alert-dismiss {
81
+ margin-block: calc(-1 * var(--greese-space-1));
82
+ margin-inline-end: calc(-1 * var(--greese-space-2));
83
+ }
84
+ }
@@ -0,0 +1,35 @@
1
+ @import './core.css';
2
+ @layer greese.components {
3
+ .greese-AppBar {
4
+ box-sizing: border-box;
5
+ display: flex;
6
+ gap: var(--greese-space-3);
7
+ align-items: center;
8
+ min-block-size: 3.5rem;
9
+ padding-block-start: env(safe-area-inset-top);
10
+ padding-inline: max(var(--greese-space-4), env(safe-area-inset-left)) max(var(--greese-space-4), env(safe-area-inset-right));
11
+ color: var(--greese-color-fg);
12
+ background-color: var(--greese-color-surface-overlay);
13
+ border-block-end: 1px solid var(--greese-color-border);
14
+ }
15
+ .greese-AppBar--sticky {
16
+ position: sticky;
17
+ inset-block-start: 0;
18
+ z-index: var(--greese-z-index-sticky);
19
+ }
20
+ @supports (animation-timeline: scroll()) {
21
+ .greese-AppBar--elevate {
22
+ animation: greese-appbar-elevate linear both;
23
+ animation-range: 0 3rem;
24
+ animation-timeline: scroll(nearest block);
25
+ }
26
+ }
27
+ @keyframes greese-appbar-elevate {
28
+ from {
29
+ box-shadow: none;
30
+ }
31
+ to {
32
+ box-shadow: var(--greese-shadow-md);
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,40 @@
1
+ @import './core.css';
2
+ @layer greese.components {
3
+ .greese-AspectRatio {
4
+ position: relative;
5
+ overflow: hidden;
6
+ }
7
+ .greese-AspectRatio > :is(img, video, iframe, picture, canvas, svg) {
8
+ display: block;
9
+ inline-size: 100%;
10
+ block-size: 100%;
11
+ object-fit: cover;
12
+ border: 0;
13
+ }
14
+ .greese-AspectRatio--contain > :is(img, video, picture, canvas, svg) {
15
+ object-fit: contain;
16
+ }
17
+ .greese-AspectRatio--xs-ratio {
18
+ aspect-ratio: var(--greese-aspectratio-ratio-xs);
19
+ }
20
+ @media (width >= 600px) {
21
+ .greese-AspectRatio--sm-ratio {
22
+ aspect-ratio: var(--greese-aspectratio-ratio-sm);
23
+ }
24
+ }
25
+ @media (width >= 900px) {
26
+ .greese-AspectRatio--md-ratio {
27
+ aspect-ratio: var(--greese-aspectratio-ratio-md);
28
+ }
29
+ }
30
+ @media (width >= 1200px) {
31
+ .greese-AspectRatio--lg-ratio {
32
+ aspect-ratio: var(--greese-aspectratio-ratio-lg);
33
+ }
34
+ }
35
+ @media (width >= 1536px) {
36
+ .greese-AspectRatio--xl-ratio {
37
+ aspect-ratio: var(--greese-aspectratio-ratio-xl);
38
+ }
39
+ }
40
+ }