@greese/ui 1.1.0 → 1.2.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 (194) hide show
  1. package/README.md +19 -14
  2. package/dist/_maps.scss +1 -1
  3. package/dist/_tokens-base.scss +30 -6
  4. package/dist/_tokens.scss +31 -2
  5. package/dist/_utilities-table.scss +1615 -0
  6. package/dist/clipboard.d.ts +18 -0
  7. package/dist/clipboard.js +62 -0
  8. package/dist/css/Button.css +2 -2
  9. package/dist/css/Carousel.css +145 -47
  10. package/dist/css/Checkbox.css +2 -2
  11. package/dist/css/Chip.css +38 -8
  12. package/dist/css/ChoiceGroup.css +42 -1
  13. package/dist/css/Collapsible.css +1 -0
  14. package/dist/css/ColorPicker.css +84 -0
  15. package/dist/css/Combobox.css +2 -2
  16. package/dist/css/Dialog.css +24 -22
  17. package/dist/css/EditableField.css +219 -0
  18. package/dist/css/Input.css +11 -2
  19. package/dist/css/Menu.css +9 -0
  20. package/dist/css/NumberField.css +53 -8
  21. package/dist/css/NumberStepper.css +9 -0
  22. package/dist/css/OtpField.css +1 -1
  23. package/dist/css/Radio.css +2 -2
  24. package/dist/css/ScrollCarousel.css +225 -0
  25. package/dist/css/SegmentedControl.css +2 -2
  26. package/dist/css/Select.css +3 -2
  27. package/dist/css/Slider.css +45 -5
  28. package/dist/css/Switch.css +6 -6
  29. package/dist/css/Text.css +14 -14
  30. package/dist/css/Textarea.css +1 -1
  31. package/dist/css/core.css +36 -6
  32. package/dist/css/resets.css +162 -0
  33. package/dist/css.d.ts +2 -0
  34. package/dist/css.js +2 -0
  35. package/dist/greese.css +978 -138
  36. package/dist/index.d.ts +2 -1
  37. package/dist/index.js +2 -1
  38. package/dist/scss/components/_Accordion.scss +2 -0
  39. package/dist/scss/components/_ActionSelect.scss +2 -0
  40. package/dist/scss/components/_Alert.scss +2 -0
  41. package/dist/scss/components/_AppBar.scss +2 -0
  42. package/dist/scss/components/_AspectRatio.scss +2 -0
  43. package/dist/scss/components/_AutoLayout.scss +2 -0
  44. package/dist/scss/components/_Avatar.scss +2 -0
  45. package/dist/scss/components/_Badge.scss +2 -0
  46. package/dist/scss/components/_Box.scss +2 -0
  47. package/dist/scss/components/_Breadcrumbs.scss +2 -0
  48. package/dist/scss/components/_Button.scss +2 -0
  49. package/dist/scss/components/_ButtonGroup.scss +2 -0
  50. package/dist/scss/components/_Card.scss +2 -0
  51. package/dist/scss/components/_Carousel.scss +2 -0
  52. package/dist/scss/components/_Center.scss +2 -0
  53. package/dist/scss/components/_ChatBubble.scss +2 -0
  54. package/dist/scss/components/_Checkbox.scss +2 -0
  55. package/dist/scss/components/_Chip.scss +2 -0
  56. package/dist/scss/components/_ChoiceGroup.scss +2 -0
  57. package/dist/scss/components/_Code.scss +2 -0
  58. package/dist/scss/components/_Collapsible.scss +2 -0
  59. package/dist/scss/components/_ColorPicker.scss +2 -0
  60. package/dist/scss/components/_Combobox.scss +2 -0
  61. package/dist/scss/components/_Container.scss +2 -0
  62. package/dist/scss/components/_Countdown.scss +2 -0
  63. package/dist/scss/components/_DateField.scss +2 -0
  64. package/dist/scss/components/_Dialog.scss +2 -0
  65. package/dist/scss/components/_Diff.scss +2 -0
  66. package/dist/scss/components/_Divider.scss +2 -0
  67. package/dist/scss/components/_Dock.scss +2 -0
  68. package/dist/scss/components/_EditableField.scss +2 -0
  69. package/dist/scss/components/_Field.scss +2 -0
  70. package/dist/scss/components/_Fieldset.scss +2 -0
  71. package/dist/scss/components/_FileInput.scss +2 -0
  72. package/dist/scss/components/_Footer.scss +2 -0
  73. package/dist/scss/components/_Grid.scss +2 -0
  74. package/dist/scss/components/_Header.scss +2 -0
  75. package/dist/scss/components/_Heading.scss +2 -0
  76. package/dist/scss/components/_Icon.scss +2 -0
  77. package/dist/scss/components/_IconButton.scss +2 -0
  78. package/dist/scss/components/_Image.scss +2 -0
  79. package/dist/scss/components/_Indicator.scss +2 -0
  80. package/dist/scss/components/_Input.scss +2 -0
  81. package/dist/scss/components/_Key.scss +2 -0
  82. package/dist/scss/components/_Link.scss +2 -0
  83. package/dist/scss/components/_List.scss +2 -0
  84. package/dist/scss/components/_Media.scss +2 -0
  85. package/dist/scss/components/_Menu.scss +2 -0
  86. package/dist/scss/components/_Motion.scss +2 -0
  87. package/dist/scss/components/_NumberField.scss +2 -0
  88. package/dist/scss/components/_NumberStepper.scss +2 -0
  89. package/dist/scss/components/_OtpField.scss +2 -0
  90. package/dist/scss/components/_PageTransition.scss +2 -0
  91. package/dist/scss/components/_Pagination.scss +2 -0
  92. package/dist/scss/components/_Popover.scss +2 -0
  93. package/dist/scss/components/_Progress.scss +2 -0
  94. package/dist/scss/components/_RadialProgress.scss +2 -0
  95. package/dist/scss/components/_Radio.scss +2 -0
  96. package/dist/scss/components/_Rating.scss +2 -0
  97. package/dist/scss/components/_ScrollCarousel.scss +2 -0
  98. package/dist/scss/components/_ScrollSpy.scss +2 -0
  99. package/dist/scss/components/_SegmentedControl.scss +2 -0
  100. package/dist/scss/components/_Select.scss +2 -0
  101. package/dist/scss/components/_Sidebar.scss +2 -0
  102. package/dist/scss/components/_Skeleton.scss +2 -0
  103. package/dist/scss/components/_Slider.scss +2 -0
  104. package/dist/scss/components/_Spacer.scss +2 -0
  105. package/dist/scss/components/_SpeedDial.scss +2 -0
  106. package/dist/scss/components/_Spinner.scss +2 -0
  107. package/dist/scss/components/_Stack.scss +2 -0
  108. package/dist/scss/components/_Stat.scss +2 -0
  109. package/dist/scss/components/_Status.scss +2 -0
  110. package/dist/scss/components/_Steps.scss +2 -0
  111. package/dist/scss/components/_Swap.scss +2 -0
  112. package/dist/scss/components/_Switch.scss +2 -0
  113. package/dist/scss/components/_Table.scss +2 -0
  114. package/dist/scss/components/_Tabs.scss +2 -0
  115. package/dist/scss/components/_Text.scss +2 -0
  116. package/dist/scss/components/_TextRotate.scss +2 -0
  117. package/dist/scss/components/_Textarea.scss +2 -0
  118. package/dist/scss/components/_ThemeProvider.scss +2 -0
  119. package/dist/scss/components/_Tile.scss +2 -0
  120. package/dist/scss/components/_Toast.scss +2 -0
  121. package/dist/scss/components/_ToggleButton.scss +2 -0
  122. package/dist/scss/components/_Tooltip.scss +2 -0
  123. package/dist/scss/components/_Type.scss +2 -0
  124. package/dist/scss/components/_Visibility.scss +2 -0
  125. package/dist/scss/components/_VisuallyHidden.scss +2 -0
  126. package/dist/shapes.d.ts +12 -1
  127. package/dist/shapes.js +11 -10
  128. package/dist/style-manifest.json +18830 -132
  129. package/dist/theme.js +6 -1
  130. package/dist/themeFiles/index.d.ts +9 -0
  131. package/dist/themeFiles/index.js +9 -0
  132. package/dist/themeFiles/scssModule.d.ts +100 -0
  133. package/dist/themeFiles/scssModule.js +384 -0
  134. package/dist/themeFiles/spec.d.ts +198 -0
  135. package/dist/themeFiles/spec.js +877 -0
  136. package/dist/tokens.css +30 -1
  137. package/dist/typography.js +1 -1
  138. package/dist/utilities.css +435 -0
  139. package/dist/utilities.d.ts +8 -0
  140. package/dist/utilities.js +75 -0
  141. package/package.json +20 -1
  142. package/src/components/AutoLayout/AutoLayout.scss +2 -26
  143. package/src/components/Carousel/Carousel.scss +122 -126
  144. package/src/components/Checkbox/Checkbox.scss +2 -2
  145. package/src/components/Chip/Chip.scss +63 -8
  146. package/src/components/ChoiceGroup/ChoiceGroup.scss +19 -1
  147. package/src/components/Collapsible/Collapsible.scss +3 -0
  148. package/src/components/ColorPicker/ColorPicker.scss +95 -0
  149. package/src/components/Combobox/Combobox.scss +4 -2
  150. package/src/components/Dialog/Dialog.scss +24 -7
  151. package/src/components/EditableField/EditableField.scss +275 -0
  152. package/src/components/Grid/Grid.scss +2 -70
  153. package/src/components/Input/Input.scss +29 -0
  154. package/src/components/Menu/Menu.scss +18 -0
  155. package/src/components/NumberField/NumberField.scss +56 -9
  156. package/src/components/NumberStepper/NumberStepper.scss +13 -0
  157. package/src/components/Radio/Radio.scss +2 -2
  158. package/src/components/ScrollCarousel/ScrollCarousel.scss +142 -0
  159. package/src/components/Select/Select.scss +4 -0
  160. package/src/components/Slider/Slider.scss +51 -6
  161. package/src/components/Stack/Stack.scss +2 -48
  162. package/src/components/Switch/Switch.scss +9 -6
  163. package/src/components/Text/Text.scss +5 -2
  164. package/src/styles/_breakpoint-vars.scss +17 -11
  165. package/src/styles/_controls.scss +2 -2
  166. package/src/styles/_core.scss +1 -0
  167. package/src/styles/_kit.scss +483 -56
  168. package/src/styles/_layout-props.scss +197 -0
  169. package/src/styles/_manifest.scss +53 -23
  170. package/src/styles/_mixins.scss +53 -15
  171. package/src/styles/_slides.scss +112 -0
  172. package/src/styles/_utilities.scss +104 -0
  173. package/src/styles/breakpoints.test.ts +21 -1
  174. package/src/styles/entryPoints.test.ts +25 -2
  175. package/src/styles/index.scss +3 -1
  176. package/src/styles/kit.test.ts +171 -1
  177. package/src/styles/public/_breakpoints.scss +43 -0
  178. package/src/styles/public/_slides.scss +3 -0
  179. package/src/styles/public/_utilities.scss +3 -0
  180. package/src/styles/resets.scss +7 -0
  181. package/src/styles/utilities.test.ts +39 -0
  182. package/themes/bevel.css +187 -187
  183. package/themes/bevel.scss +960 -958
  184. package/themes/extrude.css +42 -42
  185. package/themes/folio.css +200 -200
  186. package/themes/folio.scss +880 -878
  187. package/themes/outline.css +18 -18
  188. package/themes/pebble.css +8 -8
  189. package/themes/ridge.css +188 -188
  190. package/themes/ridge.scss +820 -818
  191. package/themes/soft.css +11 -11
  192. package/themes/ticket.css +180 -180
  193. package/themes/ticket.scss +881 -879
  194. package/themes/tilt.css +25 -25
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copying text, safely. The async Clipboard API is missing on insecure
3
+ * origins and in some WebViews, and a browser can refuse it (permissions, a
4
+ * page without focus), so a copy falls back to selecting a hidden textarea
5
+ * and `document.execCommand('copy')`. Only when both fail does it reject.
6
+ *
7
+ * Framework-free; `useCopyToClipboard()` and `CopyToClipboard` in
8
+ * @greese/react are the React side.
9
+ */
10
+ /**
11
+ * Copies `text` to the clipboard. Resolves once it's there; rejects when the
12
+ * browser allows neither the Clipboard API nor the fallback.
13
+ *
14
+ * ```ts
15
+ * await copyToClipboard("import { CopyIcon } from '@greese/icons'")
16
+ * ```
17
+ */
18
+ export declare const copyToClipboard: (text: string) => Promise<void>;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Copying text, safely. The async Clipboard API is missing on insecure
3
+ * origins and in some WebViews, and a browser can refuse it (permissions, a
4
+ * page without focus), so a copy falls back to selecting a hidden textarea
5
+ * and `document.execCommand('copy')`. Only when both fail does it reject.
6
+ *
7
+ * Framework-free; `useCopyToClipboard()` and `CopyToClipboard` in
8
+ * @greese/react are the React side.
9
+ */
10
+ /**
11
+ * The old way: copy the selection of a textarea that's on the page for one
12
+ * moment. Puts focus and the reader's selection back afterwards.
13
+ */
14
+ const copyBySelection = (text) => {
15
+ if (typeof document == 'undefined')
16
+ return false;
17
+ const focused = document.activeElement;
18
+ const selection = document.getSelection();
19
+ const ranges = selection
20
+ ? Array.from({ length: selection.rangeCount }, (_, i) => selection.getRangeAt(i))
21
+ : [];
22
+ const area = document.createElement('textarea');
23
+ area.value = text;
24
+ // Read-only so phones don't open a keyboard; fixed and transparent so the
25
+ // page neither scrolls to it nor shows it.
26
+ area.readOnly = true;
27
+ area.style.cssText = 'position:fixed;inset:0;opacity:0;pointer-events:none';
28
+ document.body.append(area);
29
+ area.select();
30
+ let copied = false;
31
+ try {
32
+ copied = document.execCommand('copy');
33
+ }
34
+ catch {
35
+ // Refused: report it below.
36
+ }
37
+ area.remove();
38
+ focused?.focus({ preventScroll: true });
39
+ if (selection && ranges.length) {
40
+ selection.removeAllRanges();
41
+ for (const range of ranges)
42
+ selection.addRange(range);
43
+ }
44
+ return copied;
45
+ };
46
+ /**
47
+ * Copies `text` to the clipboard. Resolves once it's there; rejects when the
48
+ * browser allows neither the Clipboard API nor the fallback.
49
+ *
50
+ * ```ts
51
+ * await copyToClipboard("import { CopyIcon } from '@greese/icons'")
52
+ * ```
53
+ */
54
+ export const copyToClipboard = async (text) => {
55
+ try {
56
+ await navigator.clipboard.writeText(text);
57
+ }
58
+ catch (error) {
59
+ if (!copyBySelection(text))
60
+ throw error;
61
+ }
62
+ };
@@ -159,8 +159,8 @@
159
159
  );
160
160
  }
161
161
  .greese-Button--size-xs {
162
- --greese-button-height: 1rem;
163
- --greese-button-padding: var(--greese-space-1);
162
+ --greese-button-height: 1.5rem;
163
+ --greese-button-padding: var(--greese-space-2);
164
164
  font-size: var(--greese-type-p3-font-size);
165
165
  }
166
166
  .greese-Button--size-sm {
@@ -2,41 +2,161 @@
2
2
  @layer greese.components {
3
3
  .greese-Carousel {
4
4
  box-sizing: border-box;
5
+ --greese-carousel-way: 1;
6
+ --greese-carousel-enter: var(--greese-motion-carousel, greese-carousel-in);
7
+ --greese-carousel-duration: var(
8
+ --greese-motion-carousel-duration,
9
+ var(--greese-duration-normal)
10
+ );
11
+ --greese-carousel-exit-opacity: var(
12
+ --greese-motion-carousel-exit-opacity,
13
+ 1
14
+ );
15
+ --greese-carousel-exit-translate: var(
16
+ --greese-motion-carousel-exit-translate,
17
+ calc(-100% * var(--greese-carousel-way)) 0
18
+ );
19
+ --greese-carousel-exit-scale: var(
20
+ --greese-motion-carousel-exit-scale,
21
+ 1
22
+ );
23
+ --greese-carousel-exit-mask-image: var(
24
+ --greese-motion-carousel-exit-mask-image,
25
+ none
26
+ );
27
+ --greese-carousel-exit-mask-repeat: var(
28
+ --greese-motion-carousel-exit-mask-repeat,
29
+ no-repeat
30
+ );
31
+ --greese-carousel-exit-mask-position: var(
32
+ --greese-motion-carousel-exit-mask-position,
33
+ 50% 50%
34
+ );
35
+ --greese-carousel-exit-mask-size: var(
36
+ --greese-motion-carousel-exit-mask-size,
37
+ 100% 100%
38
+ );
39
+ --greese-carousel-exit-mask-from: var(
40
+ --greese-motion-carousel-exit-mask-from,
41
+ 100% 100%
42
+ );
43
+ --greese-carousel-exit-transform: var(
44
+ --greese-motion-carousel-exit-transform,
45
+ none
46
+ );
47
+ --greese-carousel-exit-transform-origin: var(
48
+ --greese-motion-carousel-exit-transform-origin,
49
+ 50% 50%
50
+ );
5
51
  position: relative;
6
52
  display: grid;
7
53
  gap: var(--greese-space-3);
8
54
  min-inline-size: 0;
9
55
  }
56
+ .greese-Carousel[data-direction=back] {
57
+ --greese-carousel-way: -1;
58
+ --greese-carousel-enter: var(
59
+ --greese-motion-carousel-back,
60
+ var(--greese-motion-carousel, greese-carousel-in)
61
+ );
62
+ --greese-carousel-exit-opacity: var(
63
+ --greese-motion-carousel-back-exit-opacity,
64
+ var(--greese-motion-carousel-exit-opacity, 1)
65
+ );
66
+ --greese-carousel-exit-translate: var(
67
+ --greese-motion-carousel-back-exit-translate,
68
+ var(--greese-motion-carousel-exit-translate, calc(-100% * var(--greese-carousel-way)) 0)
69
+ );
70
+ --greese-carousel-exit-scale: var(
71
+ --greese-motion-carousel-back-exit-scale,
72
+ var(--greese-motion-carousel-exit-scale, 1)
73
+ );
74
+ --greese-carousel-exit-mask-image: var(
75
+ --greese-motion-carousel-back-exit-mask-image,
76
+ var(--greese-motion-carousel-exit-mask-image, none)
77
+ );
78
+ --greese-carousel-exit-mask-repeat: var(
79
+ --greese-motion-carousel-back-exit-mask-repeat,
80
+ var(--greese-motion-carousel-exit-mask-repeat, no-repeat)
81
+ );
82
+ --greese-carousel-exit-mask-position: var(
83
+ --greese-motion-carousel-back-exit-mask-position,
84
+ var(--greese-motion-carousel-exit-mask-position, 50% 50%)
85
+ );
86
+ --greese-carousel-exit-mask-size: var(
87
+ --greese-motion-carousel-back-exit-mask-size,
88
+ var(--greese-motion-carousel-exit-mask-size, 100% 100%)
89
+ );
90
+ --greese-carousel-exit-mask-from: var(
91
+ --greese-motion-carousel-back-exit-mask-from,
92
+ var(--greese-motion-carousel-exit-mask-from, 100% 100%)
93
+ );
94
+ --greese-carousel-exit-transform: var(
95
+ --greese-motion-carousel-back-exit-transform,
96
+ var(--greese-motion-carousel-exit-transform, none)
97
+ );
98
+ --greese-carousel-exit-transform-origin: var(
99
+ --greese-motion-carousel-back-exit-transform-origin,
100
+ var(--greese-motion-carousel-exit-transform-origin, 50% 50%)
101
+ );
102
+ }
103
+ .greese-Carousel:dir(rtl) {
104
+ --greese-carousel-way: -1;
105
+ }
106
+ .greese-Carousel[data-direction=back]:dir(rtl) {
107
+ --greese-carousel-way: 1;
108
+ }
10
109
  .greese-Carousel-viewport {
11
- --greese-carousel-per-view: 1;
12
- --greese-carousel-gap: var(--greese-space-3);
13
- display: flex;
14
- gap: var(--greese-carousel-gap);
15
- overflow-x: auto;
16
- overscroll-behavior-x: contain;
17
- scroll-snap-type: x mandatory;
18
- scrollbar-width: none;
110
+ --greese-motion-exit-opacity: initial;
111
+ --greese-motion-exit-translate: initial;
112
+ --greese-motion-exit-scale: initial;
113
+ --greese-motion-exit-mask-image: initial;
114
+ --greese-motion-exit-mask-repeat: initial;
115
+ --greese-motion-exit-mask-position: initial;
116
+ --greese-motion-exit-mask-size: initial;
117
+ --greese-motion-exit-mask-from: initial;
118
+ --greese-motion-exit-transform: initial;
119
+ --greese-motion-exit-transform-origin: initial;
120
+ --greese-carousel-slide-enter: initial;
121
+ display: grid;
122
+ min-inline-size: 0;
123
+ overflow: clip;
19
124
  border-radius: var(--greese-corner-panel);
20
- }
21
- .greese-Carousel-viewport::-webkit-scrollbar {
22
- display: none;
125
+ touch-action: pan-y;
23
126
  }
24
127
  .greese-Carousel-viewport:focus-visible {
25
128
  outline: 2px solid var(--greese-color-focus-ring);
26
129
  outline-offset: 2px;
27
130
  }
28
- @media (prefers-reduced-motion: no-preference) {
29
- .greese-Carousel-viewport {
30
- scroll-behavior: smooth;
31
- }
32
- }
33
131
  .greese-CarouselSlide {
34
- --greese-carousel-gaps: calc(
35
- (var(--greese-carousel-per-view) - 1) * var(--greese-carousel-gap)
36
- );
37
- flex: 0 0 calc((100% - var(--greese-carousel-gaps)) / var(--greese-carousel-per-view));
132
+ grid-area: 1/1;
38
133
  min-inline-size: 0;
39
- scroll-snap-align: start;
134
+ mask-image: var(--greese-motion-exit-mask-image, var(--greese-carousel-exit-mask-image));
135
+ mask-repeat: var(--greese-motion-exit-mask-repeat, var(--greese-carousel-exit-mask-repeat));
136
+ mask-position: var(--greese-motion-exit-mask-position, var(--greese-carousel-exit-mask-position));
137
+ mask-size: var(--greese-motion-exit-mask-from, var(--greese-carousel-exit-mask-from));
138
+ transform-origin: var(--greese-motion-exit-transform-origin, var(--greese-carousel-exit-transform-origin));
139
+ }
140
+ .greese-CarouselSlide:not([data-active]) {
141
+ visibility: hidden;
142
+ opacity: var(--greese-motion-exit-opacity, var(--greese-carousel-exit-opacity));
143
+ translate: var(--greese-motion-exit-translate, var(--greese-carousel-exit-translate));
144
+ scale: var(--greese-motion-exit-scale, var(--greese-carousel-exit-scale));
145
+ transform: var(--greese-motion-exit-transform, var(--greese-carousel-exit-transform));
146
+ mask-size: var(--greese-motion-exit-mask-size, var(--greese-carousel-exit-mask-size));
147
+ }
148
+ @media (prefers-reduced-motion: no-preference) {
149
+ .greese-Carousel[data-moved] > .greese-Carousel-viewport > .greese-CarouselSlide[data-active] {
150
+ animation-name: var(--greese-carousel-slide-enter, var(--greese-carousel-enter));
151
+ animation-duration: var(--greese-carousel-duration);
152
+ animation-timing-function: var(--greese-easing-standard);
153
+ animation-fill-mode: backwards;
154
+ }
155
+ .greese-Carousel[data-moved] > .greese-Carousel-viewport > .greese-CarouselSlide:not([data-active]) {
156
+ transition-property: visibility, opacity, translate, scale, transform, mask-size, mask-position;
157
+ transition-duration: var(--greese-carousel-duration);
158
+ transition-timing-function: var(--greese-easing-standard);
159
+ }
40
160
  }
41
161
  .greese-Carousel-control {
42
162
  position: absolute;
@@ -71,6 +191,7 @@
71
191
  }
72
192
  }
73
193
  .greese-Carousel-control:disabled {
194
+ pointer-events: none;
74
195
  cursor: default;
75
196
  opacity: 0;
76
197
  }
@@ -96,11 +217,6 @@
96
217
  .greese-Carousel-control--next:dir(rtl) > svg {
97
218
  scale: 1;
98
219
  }
99
- @media (hover: none) {
100
- .greese-Carousel-control {
101
- display: none;
102
- }
103
- }
104
220
  .greese-Carousel-indicators {
105
221
  display: flex;
106
222
  flex-wrap: wrap;
@@ -144,27 +260,9 @@
144
260
  background-color: var(--greese-color-primary);
145
261
  clip-path: inset(0 round var(--greese-corner-pill));
146
262
  }
147
- .greese-Carousel--xs-per-view {
148
- --greese-carousel-per-view: var(--greese-carousel-per-view-xs);
149
- }
150
- @media (width >= 600px) {
151
- .greese-Carousel--sm-per-view {
152
- --greese-carousel-per-view: var(--greese-carousel-per-view-sm);
153
- }
154
- }
155
- @media (width >= 900px) {
156
- .greese-Carousel--md-per-view {
157
- --greese-carousel-per-view: var(--greese-carousel-per-view-md);
158
- }
159
- }
160
- @media (width >= 1200px) {
161
- .greese-Carousel--lg-per-view {
162
- --greese-carousel-per-view: var(--greese-carousel-per-view-lg);
163
- }
164
- }
165
- @media (width >= 1536px) {
166
- .greese-Carousel--xl-per-view {
167
- --greese-carousel-per-view: var(--greese-carousel-per-view-xl);
263
+ @keyframes greese-carousel-in {
264
+ from {
265
+ translate: calc(100% * var(--greese-carousel-way)) 0;
168
266
  }
169
267
  }
170
268
  }
@@ -13,8 +13,8 @@
13
13
  }
14
14
  .greese-Checkbox-input {
15
15
  position: relative;
16
- inline-size: 1.125rem;
17
- block-size: 1.125rem;
16
+ inline-size: var(--greese-choice-box, 1.125rem);
17
+ block-size: var(--greese-choice-box, 1.125rem);
18
18
  margin: 0;
19
19
  cursor: pointer;
20
20
  background-color: var(--greese-color-canvas);
package/dist/css/Chip.css CHANGED
@@ -4,9 +4,9 @@
4
4
  display: inline-flex;
5
5
  gap: var(--greese-space-1);
6
6
  align-items: center;
7
- min-block-size: 2rem;
8
- padding-inline: var(--greese-space-3);
9
- font-size: var(--greese-type-p3-font-size);
7
+ min-block-size: var(--greese-chip-height);
8
+ padding-inline: var(--greese-chip-padding);
9
+ font-size: var(--greese-chip-font);
10
10
  line-height: 1;
11
11
  color: var(--greese-color-fg);
12
12
  white-space: nowrap;
@@ -20,6 +20,36 @@
20
20
  .greese-Chip:has(.greese-Chip-remove) {
21
21
  padding-inline-end: var(--greese-space-1);
22
22
  }
23
+ .greese-Chip--size-xs {
24
+ --greese-chip-height: 1.25rem;
25
+ --greese-chip-padding: var(--greese-space-1);
26
+ --greese-chip-font: var(--greese-type-caption-font-size);
27
+ --greese-chip-remove: 1rem;
28
+ }
29
+ .greese-Chip--size-sm {
30
+ --greese-chip-height: 1.625rem;
31
+ --greese-chip-padding: var(--greese-space-2);
32
+ --greese-chip-font: var(--greese-type-caption-font-size);
33
+ --greese-chip-remove: 1.25rem;
34
+ }
35
+ .greese-Chip--size-md {
36
+ --greese-chip-height: 2rem;
37
+ --greese-chip-padding: var(--greese-space-3);
38
+ --greese-chip-font: var(--greese-type-p3-font-size);
39
+ --greese-chip-remove: 1.5rem;
40
+ }
41
+ .greese-Chip--size-lg {
42
+ --greese-chip-height: 2.5rem;
43
+ --greese-chip-padding: var(--greese-space-4);
44
+ --greese-chip-font: var(--greese-type-p2-font-size);
45
+ --greese-chip-remove: 1.75rem;
46
+ }
47
+ .greese-Chip--size-xl {
48
+ --greese-chip-height: 3rem;
49
+ --greese-chip-padding: var(--greese-space-5);
50
+ --greese-chip-font: var(--greese-type-p1-font-size);
51
+ --greese-chip-remove: 2rem;
52
+ }
23
53
  .greese-Chip--neutral {
24
54
  --greese-chip-tone: var(--greese-color-fg);
25
55
  --greese-chip-tone-on: var(--greese-color-canvas);
@@ -101,19 +131,19 @@
101
131
  }
102
132
  .greese-Chip-toggle {
103
133
  align-self: stretch;
104
- padding-inline: var(--greese-space-3);
134
+ padding-inline: var(--greese-chip-padding);
105
135
  border-radius: var(--greese-corner-pill);
106
136
  }
107
137
  .greese-Chip-remove {
108
138
  justify-content: center;
109
- inline-size: 1.5rem;
110
- block-size: 1.5rem;
139
+ inline-size: var(--greese-chip-remove);
140
+ block-size: var(--greese-chip-remove);
111
141
  color: var(--greese-color-fg-muted);
112
142
  border-radius: var(--greese-corner-round);
113
143
  }
114
144
  .greese-Chip-remove > svg {
115
- inline-size: 0.875rem;
116
- block-size: 0.875rem;
145
+ inline-size: 0.6em;
146
+ block-size: 0.6em;
117
147
  }
118
148
  @media (hover: hover) {
119
149
  .greese-Chip-remove:hover {
@@ -32,19 +32,60 @@
32
32
  cursor: not-allowed;
33
33
  opacity: 0.55;
34
34
  }
35
+ .greese-Checkbox--size-xs,
36
+ .greese-Radio--size-xs,
37
+ .greese-Switch--size-xs,
38
+ .greese-ChoiceGroup--size-xs {
39
+ --greese-choice-font: var(--greese-type-p3-font-size);
40
+ --greese-choice-gap: var(--greese-space-2);
41
+ --greese-choice-box: calc(1.5rem * 0.45);
42
+ }
43
+ .greese-Checkbox--size-sm,
44
+ .greese-Radio--size-sm,
45
+ .greese-Switch--size-sm,
46
+ .greese-ChoiceGroup--size-sm {
47
+ --greese-choice-font: var(--greese-type-p3-font-size);
48
+ --greese-choice-gap: var(--greese-space-3);
49
+ --greese-choice-box: calc(2rem * 0.45);
50
+ }
51
+ .greese-Checkbox--size-md,
52
+ .greese-Radio--size-md,
53
+ .greese-Switch--size-md,
54
+ .greese-ChoiceGroup--size-md {
55
+ --greese-choice-font: var(--greese-type-p2-font-size);
56
+ --greese-choice-gap: var(--greese-space-3);
57
+ --greese-choice-box: calc(2.5rem * 0.45);
58
+ }
59
+ .greese-Checkbox--size-lg,
60
+ .greese-Radio--size-lg,
61
+ .greese-Switch--size-lg,
62
+ .greese-ChoiceGroup--size-lg {
63
+ --greese-choice-font: var(--greese-type-p2-font-size);
64
+ --greese-choice-gap: var(--greese-space-4);
65
+ --greese-choice-box: calc(3rem * 0.45);
66
+ }
67
+ .greese-Checkbox--size-xl,
68
+ .greese-Radio--size-xl,
69
+ .greese-Switch--size-xl,
70
+ .greese-ChoiceGroup--size-xl {
71
+ --greese-choice-font: var(--greese-type-p1-font-size);
72
+ --greese-choice-gap: var(--greese-space-4);
73
+ --greese-choice-box: calc(4rem * 0.45);
74
+ }
35
75
  .greese-Checkbox-text {
36
76
  display: flex;
37
77
  flex-direction: column;
38
78
  gap: var(--greese-space-1);
39
79
  }
40
80
  .greese-Checkbox-label {
81
+ font-size: var(--greese-choice-font, inherit);
41
82
  cursor: pointer;
42
83
  }
43
84
  [data-disabled] > .greese-Checkbox-text > .greese-Checkbox-label {
44
85
  cursor: not-allowed;
45
86
  }
46
87
  .greese-Checkbox-description {
47
- font-size: var(--greese-type-p3-font-size);
88
+ font-size: var(--greese-choice-description-font, var(--greese-type-p3-font-size));
48
89
  color: var(--greese-color-fg-muted);
49
90
  }
50
91
  .greese-Checkbox-box {
@@ -91,6 +91,7 @@
91
91
  transition: none;
92
92
  }
93
93
  .greese-Collapsible-content {
94
+ display: flow-root;
94
95
  padding-block-end: var(--greese-space-4);
95
96
  color: var(--greese-color-fg-muted);
96
97
  }
@@ -2,6 +2,26 @@
2
2
  /* stylelint-disable selector-no-vendor-prefix */
3
3
  /* stylelint-disable color-no-hex, function-disallowed-list */
4
4
  @layer greese.components {
5
+ .greese-ColorPicker--size-xs {
6
+ --greese-colorpicker-font: var(--greese-type-p3-font-size);
7
+ --greese-colorpicker-padding: var(--greese-space-2);
8
+ }
9
+ .greese-ColorPicker--size-sm {
10
+ --greese-colorpicker-font: var(--greese-type-p3-font-size);
11
+ --greese-colorpicker-padding: var(--greese-space-3);
12
+ }
13
+ .greese-ColorPicker--size-md {
14
+ --greese-colorpicker-font: var(--greese-type-p2-font-size);
15
+ --greese-colorpicker-padding: var(--greese-space-3);
16
+ }
17
+ .greese-ColorPicker--size-lg {
18
+ --greese-colorpicker-font: var(--greese-type-p2-font-size);
19
+ --greese-colorpicker-padding: var(--greese-space-4);
20
+ }
21
+ .greese-ColorPicker--size-xl {
22
+ --greese-colorpicker-font: var(--greese-type-p1-font-size);
23
+ --greese-colorpicker-padding: var(--greese-space-4);
24
+ }
5
25
  .greese-ColorPicker {
6
26
  --greese-colorpicker-thumb: 1.125rem;
7
27
  box-sizing: border-box;
@@ -153,8 +173,72 @@
153
173
  .greese-ColorPicker-hue {
154
174
  direction: ltr;
155
175
  }
176
+ .greese-ColorPicker-fields {
177
+ display: flex;
178
+ flex-wrap: wrap;
179
+ gap: var(--greese-space-2);
180
+ align-items: center;
181
+ }
156
182
  .greese-ColorPicker-hex {
183
+ flex: 1 1 7rem;
184
+ min-inline-size: 0;
185
+ font-family: var(--greese-font-mono);
186
+ }
187
+ .greese-ColorPicker-channels {
188
+ display: flex;
189
+ flex: 1 0 100%;
190
+ gap: var(--greese-space-2);
191
+ min-inline-size: 0;
192
+ }
193
+ .greese-ColorPicker-channel {
194
+ flex: 1;
195
+ min-inline-size: 0;
196
+ padding-inline: var(--greese-space-1);
197
+ }
198
+ .greese-ColorPicker-channel .greese-Input-control {
157
199
  font-family: var(--greese-font-mono);
200
+ text-align: end;
201
+ appearance: textfield;
202
+ }
203
+ .greese-ColorPicker-channel .greese-Input-control::-webkit-outer-spin-button, .greese-ColorPicker-channel .greese-Input-control::-webkit-inner-spin-button {
204
+ margin: 0;
205
+ appearance: none;
206
+ }
207
+ .greese-ColorPicker-channel .greese-Input-adornment {
208
+ font-family: var(--greese-font-mono);
209
+ color: var(--greese-color-fg-muted);
210
+ }
211
+ .greese-ColorPicker-tool {
212
+ display: inline-flex;
213
+ flex: none;
214
+ align-items: center;
215
+ justify-content: center;
216
+ inline-size: 1.75rem;
217
+ block-size: 1.75rem;
218
+ padding: 0;
219
+ color: var(--greese-color-fg-muted);
220
+ cursor: pointer;
221
+ background: none;
222
+ border: 0;
223
+ border-radius: var(--greese-corner-inset);
224
+ }
225
+ @media (pointer: coarse) {
226
+ .greese-ColorPicker-tool {
227
+ inline-size: 2.25rem;
228
+ block-size: 2.25rem;
229
+ }
230
+ }
231
+ .greese-ColorPicker-tool:hover:not(:disabled) {
232
+ color: var(--greese-color-fg);
233
+ background: var(--greese-color-track);
234
+ }
235
+ .greese-ColorPicker-tool:focus-visible {
236
+ outline: 2px solid var(--greese-color-focus-ring);
237
+ outline-offset: 2px;
238
+ }
239
+ .greese-ColorPicker-tool:disabled {
240
+ cursor: not-allowed;
241
+ opacity: 0.5;
158
242
  }
159
243
  .greese-ColorPicker-swatches {
160
244
  display: flex;
@@ -15,8 +15,8 @@
15
15
  position: relative;
16
16
  display: inline-grid;
17
17
  place-items: center;
18
- inline-size: 1.75rem;
19
- block-size: 1.75rem;
18
+ inline-size: min(1.75rem, var(--greese-input-height, 1.75rem) - 2px);
19
+ block-size: min(1.75rem, var(--greese-input-height, 1.75rem) - 2px);
20
20
  padding: 0;
21
21
  margin-inline-end: calc(-1 * var(--greese-space-2));
22
22
  color: var(--greese-color-fg-muted);