@seed-design/css 1.2.5 → 1.2.7

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 (51) hide show
  1. package/all.css +172 -12
  2. package/all.layered.css +172 -12
  3. package/all.layered.min.css +1 -1
  4. package/all.min.css +1 -1
  5. package/package.json +2 -2
  6. package/recipes/app-bar.css +93 -0
  7. package/recipes/app-bar.d.ts +1 -1
  8. package/recipes/app-bar.layered.css +90 -0
  9. package/recipes/app-bar.layered.mjs +4 -0
  10. package/recipes/app-bar.mjs +4 -0
  11. package/recipes/avatar-stack.css +7 -0
  12. package/recipes/avatar-stack.d.ts +1 -1
  13. package/recipes/avatar-stack.layered.css +9 -0
  14. package/recipes/avatar-stack.layered.mjs +1 -0
  15. package/recipes/avatar-stack.mjs +1 -0
  16. package/recipes/avatar.css +10 -0
  17. package/recipes/avatar.d.ts +1 -1
  18. package/recipes/avatar.layered.css +12 -0
  19. package/recipes/avatar.layered.mjs +1 -0
  20. package/recipes/avatar.mjs +1 -0
  21. package/recipes/content-placeholder.css +24 -0
  22. package/recipes/content-placeholder.d.ts +24 -0
  23. package/recipes/content-placeholder.layered.css +27 -0
  24. package/recipes/content-placeholder.layered.mjs +53 -0
  25. package/recipes/content-placeholder.mjs +53 -0
  26. package/recipes/help-bubble.css +1 -0
  27. package/recipes/help-bubble.layered.css +1 -0
  28. package/recipes/image-frame-reaction-button.css +23 -8
  29. package/recipes/image-frame-reaction-button.d.ts +3 -1
  30. package/recipes/image-frame-reaction-button.layered.css +25 -8
  31. package/recipes/image-frame-reaction-button.layered.mjs +22 -4
  32. package/recipes/image-frame-reaction-button.mjs +22 -4
  33. package/recipes/image-frame.css +13 -11
  34. package/recipes/image-frame.d.ts +3 -1
  35. package/recipes/image-frame.layered.css +9 -4
  36. package/recipes/image-frame.layered.mjs +22 -4
  37. package/recipes/image-frame.mjs +22 -4
  38. package/vars/color/bg.d.ts +5 -5
  39. package/vars/component/avatar-stack.d.ts +10 -0
  40. package/vars/component/avatar-stack.mjs +10 -0
  41. package/vars/component/avatar.d.ts +42 -0
  42. package/vars/component/avatar.mjs +16 -0
  43. package/vars/component/content-placeholder.d.ts +28 -0
  44. package/vars/component/content-placeholder.mjs +27 -0
  45. package/vars/component/index.d.ts +1 -0
  46. package/vars/component/index.mjs +1 -0
  47. package/vars/component/text-input.d.ts +1 -0
  48. package/vars/component/text-input.mjs +1 -0
  49. package/recipes/tag-group-tag.css +0 -44
  50. package/recipes/tag-group-tag.d.ts +0 -30
  51. package/recipes/tag-group-tag.mjs +0 -41
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@seed-design/css",
3
- "version": "1.2.5",
3
+ "version": "1.2.7",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/daangn/seed-design.git",
7
7
  "directory": "packages/css"
8
8
  },
9
9
  "scripts": {
10
- "generate": "bun rootage:generate && qvism:generate",
10
+ "generate": "bun rootage:generate && bun qvism:generate",
11
11
  "rootage:generate": "bun rootage token-ts ./vars --prefix seed && rootage component-spec ./vars/component --prefix seed",
12
12
  "qvism:generate": "bun qvism ./ ./recipes",
13
13
  "lint:publish": "bun publint"
@@ -230,6 +230,99 @@
230
230
  opacity: 1;
231
231
  transition: transform 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99), opacity 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99);
232
232
  }
233
+ [data-global-transition-state=enter-active] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top] {
234
+ animation: seed-enter;
235
+ animation-timing-function: cubic-bezier(0.2, 0.1, 0.21, 0.99);
236
+ animation-duration: 350ms;
237
+ --seed-enter-translate-x: 0;
238
+ --seed-enter-translate-y: 0;
239
+ --seed-enter-opacity: 0;
240
+ --seed-enter-scale: 1;
241
+ opacity: 1;
242
+ }
243
+ [data-global-transition-state=exit-active] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top] {
244
+ transform: translate3d(calc(var(--swipe-back-displacement, 0) * 0.15), 0, 0);
245
+ opacity: calc(1 - var(--swipe-back-displacement-ratio, 0) * 3);
246
+ animation: seed-exit;
247
+ animation-timing-function: cubic-bezier(0.2, 0.1, 0.21, 0.99);
248
+ animation-duration: 350ms;
249
+ animation-fill-mode: forwards;
250
+ --seed-exit-translate-x: 0;
251
+ --seed-exit-translate-y: 0;
252
+ --seed-exit-opacity: 0;
253
+ --seed-exit-scale: 1;
254
+ }
255
+ [data-global-transition-state=enter-done] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top] {
256
+ animation: seed-enter;
257
+ animation-timing-function: cubic-bezier(0.2, 0.1, 0.21, 0.99);
258
+ animation-duration: 350ms;
259
+ --seed-enter-translate-x: calc(var(--swipe-back-displacement, 0) * 0.15);
260
+ --seed-enter-translate-y: 0;
261
+ --seed-enter-opacity: calc(1 - var(--swipe-back-displacement-ratio, 0) * 3);
262
+ --seed-enter-scale: 1;
263
+ opacity: 1;
264
+ }
265
+ [data-swipe-back-state=swiping] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top]:not(#\#) {
266
+ animation: none;
267
+ transform: translate3d(calc(var(--swipe-back-displacement, 0) * 0.15), 0, 0);
268
+ opacity: calc(1 - var(--swipe-back-displacement-ratio, 0) * 3);
269
+ }
270
+ [data-swipe-back-state=canceling] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top]:not(#\#) {
271
+ animation: none !important;
272
+ opacity: 1;
273
+ transition: transform 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99), opacity 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99);
274
+ }
275
+ [data-swipe-back-state=completing] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top]:not(#\#) {
276
+ animation: none !important;
277
+ opacity: 0;
278
+ transition: transform 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99), opacity 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99);
279
+ }
280
+ [data-global-transition-state=enter-active][data-top-activity-type="full-screen"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]) {
281
+ opacity: 1;
282
+ animation: seed-exit;
283
+ animation-timing-function: cubic-bezier(0.2, 0.1, 0.21, 0.99);
284
+ animation-duration: 350ms;
285
+ animation-fill-mode: forwards;
286
+ --seed-exit-translate-x: 0;
287
+ --seed-exit-translate-y: 0;
288
+ --seed-exit-opacity: 0;
289
+ --seed-exit-scale: 1;
290
+ }
291
+ [data-global-transition-state=exit-active][data-top-activity-type="full-screen"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]) {
292
+ animation: seed-enter;
293
+ animation-timing-function: cubic-bezier(0.2, 0.1, 0.21, 0.99);
294
+ animation-duration: 350ms;
295
+ --seed-enter-translate-x: 0;
296
+ --seed-enter-translate-y: 0;
297
+ --seed-enter-opacity: calc(var(--swipe-back-displacement-ratio, 0));
298
+ --seed-enter-scale: 1;
299
+ opacity: 1;
300
+ }
301
+ [data-global-transition-state=enter-done][data-top-activity-type="full-screen"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]) {
302
+ opacity: calc(var(--swipe-back-displacement-ratio, 0));
303
+ animation: seed-exit;
304
+ animation-timing-function: cubic-bezier(0.2, 0.1, 0.21, 0.99);
305
+ animation-duration: 350ms;
306
+ animation-fill-mode: forwards;
307
+ --seed-exit-translate-x: 0;
308
+ --seed-exit-translate-y: 0;
309
+ --seed-exit-opacity: 0;
310
+ --seed-exit-scale: 1;
311
+ }
312
+ [data-swipe-back-state=swiping] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]):not(#\#) {
313
+ animation: none;
314
+ opacity: calc(var(--swipe-back-displacement-ratio, 0));
315
+ }
316
+ [data-swipe-back-state=canceling] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]):not(#\#) {
317
+ animation: none !important;
318
+ opacity: 0;
319
+ transition: transform 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99), opacity 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99);
320
+ }
321
+ [data-swipe-back-state=completing] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]):not(#\#) {
322
+ animation: none !important;
323
+ opacity: 1;
324
+ transition: transform 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99), opacity 350ms cubic-bezier(0.2, 0.1, 0.21, 0.99);
325
+ }
233
326
  [data-global-transition-state=enter-active] .seed-app-bar__root--transitionStyle_fadeFromBottomAndroid[data-activity-is-top] {
234
327
  animation: seed-enter;
235
328
  animation-timing-function: cubic-bezier(0.23, 0.1, 0.32, 1);
@@ -23,7 +23,7 @@ declare type AppBarVariantMap = {
23
23
 
24
24
  export declare type AppBarVariantProps = Partial<AppBarVariant>;
25
25
 
26
- export declare type AppBarSlotName = "root" | "left" | "right" | "iconButton" | "icon";
26
+ export declare type AppBarSlotName = "root" | "left" | "right" | "iconButton" | "icon" | "custom";
27
27
 
28
28
  export declare const appBarVariantMap: AppBarVariantMap;
29
29
 
@@ -242,6 +242,96 @@
242
242
  animation: none !important;
243
243
  }
244
244
 
245
+ [data-global-transition-state="enter-active"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top] {
246
+ --seed-enter-translate-x: 0;
247
+ --seed-enter-translate-y: 0;
248
+ --seed-enter-opacity: 0;
249
+ --seed-enter-scale: 1;
250
+ opacity: 1;
251
+ animation: .35s cubic-bezier(.2, .1, .21, .99) seed-enter;
252
+ }
253
+
254
+ [data-global-transition-state="exit-active"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top] {
255
+ transform: translate3d(calc(var(--swipe-back-displacement, 0) * .15), 0, 0);
256
+ opacity: calc(1 - var(--swipe-back-displacement-ratio, 0) * 3);
257
+ --seed-exit-translate-x: 0;
258
+ --seed-exit-translate-y: 0;
259
+ --seed-exit-opacity: 0;
260
+ --seed-exit-scale: 1;
261
+ animation: .35s cubic-bezier(.2, .1, .21, .99) forwards seed-exit;
262
+ }
263
+
264
+ [data-global-transition-state="enter-done"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top] {
265
+ --seed-enter-translate-x: calc(var(--swipe-back-displacement, 0) * .15);
266
+ --seed-enter-translate-y: 0;
267
+ --seed-enter-opacity: calc(1 - var(--swipe-back-displacement-ratio, 0) * 3);
268
+ --seed-enter-scale: 1;
269
+ opacity: 1;
270
+ animation: .35s cubic-bezier(.2, .1, .21, .99) seed-enter;
271
+ }
272
+
273
+ [data-swipe-back-state="swiping"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top]:not(#\#) {
274
+ transform: translate3d(calc(var(--swipe-back-displacement, 0) * .15), 0, 0);
275
+ opacity: calc(1 - var(--swipe-back-displacement-ratio, 0) * 3);
276
+ animation: none;
277
+ }
278
+
279
+ [data-swipe-back-state="canceling"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top]:not(#\#) {
280
+ opacity: 1;
281
+ transition: transform .35s cubic-bezier(.2, .1, .21, .99), opacity .35s cubic-bezier(.2, .1, .21, .99);
282
+ animation: none !important;
283
+ }
284
+
285
+ [data-swipe-back-state="completing"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS[data-activity-is-top]:not(#\#) {
286
+ opacity: 0;
287
+ transition: transform .35s cubic-bezier(.2, .1, .21, .99), opacity .35s cubic-bezier(.2, .1, .21, .99);
288
+ animation: none !important;
289
+ }
290
+
291
+ [data-global-transition-state="enter-active"][data-top-activity-type="full-screen"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]) {
292
+ opacity: 1;
293
+ --seed-exit-translate-x: 0;
294
+ --seed-exit-translate-y: 0;
295
+ --seed-exit-opacity: 0;
296
+ --seed-exit-scale: 1;
297
+ animation: .35s cubic-bezier(.2, .1, .21, .99) forwards seed-exit;
298
+ }
299
+
300
+ [data-global-transition-state="exit-active"][data-top-activity-type="full-screen"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]) {
301
+ --seed-enter-translate-x: 0;
302
+ --seed-enter-translate-y: 0;
303
+ --seed-enter-opacity: calc(var(--swipe-back-displacement-ratio, 0));
304
+ --seed-enter-scale: 1;
305
+ opacity: 1;
306
+ animation: .35s cubic-bezier(.2, .1, .21, .99) seed-enter;
307
+ }
308
+
309
+ [data-global-transition-state="enter-done"][data-top-activity-type="full-screen"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]) {
310
+ opacity: calc(var(--swipe-back-displacement-ratio, 0));
311
+ --seed-exit-translate-x: 0;
312
+ --seed-exit-translate-y: 0;
313
+ --seed-exit-opacity: 0;
314
+ --seed-exit-scale: 1;
315
+ animation: .35s cubic-bezier(.2, .1, .21, .99) forwards seed-exit;
316
+ }
317
+
318
+ [data-swipe-back-state="swiping"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]):not(#\#) {
319
+ opacity: calc(var(--swipe-back-displacement-ratio, 0));
320
+ animation: none;
321
+ }
322
+
323
+ [data-swipe-back-state="canceling"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]):not(#\#) {
324
+ opacity: 0;
325
+ transition: transform .35s cubic-bezier(.2, .1, .21, .99), opacity .35s cubic-bezier(.2, .1, .21, .99);
326
+ animation: none !important;
327
+ }
328
+
329
+ [data-swipe-back-state="completing"] .seed-app-bar__custom--transitionStyle_slideFromRightIOS:not([data-activity-is-top]):not(#\#) {
330
+ opacity: 1;
331
+ transition: transform .35s cubic-bezier(.2, .1, .21, .99), opacity .35s cubic-bezier(.2, .1, .21, .99);
332
+ animation: none !important;
333
+ }
334
+
245
335
  [data-global-transition-state="enter-active"] .seed-app-bar__root--transitionStyle_fadeFromBottomAndroid[data-activity-is-top] {
246
336
  --seed-enter-translate-x: 0;
247
337
  --seed-enter-translate-y: 8vh;
@@ -21,6 +21,10 @@ const appBarSlotNames = [
21
21
  [
22
22
  "icon",
23
23
  "seed-app-bar__icon"
24
+ ],
25
+ [
26
+ "custom",
27
+ "seed-app-bar__custom"
24
28
  ]
25
29
  ];
26
30
 
@@ -21,6 +21,10 @@ const appBarSlotNames = [
21
21
  [
22
22
  "icon",
23
23
  "seed-app-bar__icon"
24
+ ],
25
+ [
26
+ "custom",
27
+ "seed-app-bar__custom"
24
28
  ]
25
29
  ];
26
30
 
@@ -43,6 +43,13 @@
43
43
  clip-path: inset(-2px);
44
44
  box-shadow: 0 0 0 2px var(--seed-color-bg-layer-default)
45
45
  }
46
+ .seed-avatar-stack__item--size_56:not(:first-child) {
47
+ margin-left: -13px
48
+ }
49
+ .seed-avatar-stack__item--size_56 {
50
+ clip-path: inset(-3px);
51
+ box-shadow: 0 0 0 3px var(--seed-color-bg-layer-default)
52
+ }
46
53
  .seed-avatar-stack__item--size_64:not(:first-child) {
47
54
  margin-left: -16px
48
55
  }
@@ -2,7 +2,7 @@ declare interface AvatarStackVariant {
2
2
  /**
3
3
  * @default 48
4
4
  */
5
- size: "20" | "24" | "36" | "42" | "48" | "64" | "80" | "96" | "108";
5
+ size: "20" | "24" | "36" | "42" | "48" | "56" | "64" | "80" | "96" | "108";
6
6
  }
7
7
 
8
8
  declare type AvatarStackVariantMap = {
@@ -56,6 +56,15 @@
56
56
  box-shadow: 0 0 0 2px var(--seed-color-bg-layer-default);
57
57
  }
58
58
 
59
+ .seed-avatar-stack__item--size_56:not(:first-child) {
60
+ margin-left: -13px;
61
+ }
62
+
63
+ .seed-avatar-stack__item--size_56 {
64
+ clip-path: inset(-3px);
65
+ box-shadow: 0 0 0 3px var(--seed-color-bg-layer-default);
66
+ }
67
+
59
68
  .seed-avatar-stack__item--size_64:not(:first-child) {
60
69
  margin-left: -16px;
61
70
  }
@@ -25,6 +25,7 @@ export const avatarStackVariantMap = {
25
25
  "36",
26
26
  "42",
27
27
  "48",
28
+ "56",
28
29
  "64",
29
30
  "80",
30
31
  "96",
@@ -25,6 +25,7 @@ export const avatarStackVariantMap = {
25
25
  "36",
26
26
  "42",
27
27
  "48",
28
+ "56",
28
29
  "64",
29
30
  "80",
30
31
  "96",
@@ -137,6 +137,16 @@
137
137
  --badge-size: 18px;
138
138
  --badge-offset: 30px;
139
139
  }
140
+ .seed-avatar__root--size_56 {
141
+ --avatar-size: 56px;
142
+ --avatar-stroke-width: 1px;
143
+ --badge-mask-size: 24px;
144
+ --badge-mask-offset: 34px;
145
+ }
146
+ .seed-avatar__badge--size_56 {
147
+ --badge-size: 20px;
148
+ --badge-offset: 36px;
149
+ }
140
150
  .seed-avatar__root--size_64 {
141
151
  --avatar-size: 64px;
142
152
  --avatar-stroke-width: 1px;
@@ -2,7 +2,7 @@ declare interface AvatarVariant {
2
2
  /**
3
3
  * @default 48
4
4
  */
5
- size: "20" | "24" | "36" | "42" | "48" | "64" | "80" | "96" | "108";
5
+ size: "20" | "24" | "36" | "42" | "48" | "56" | "64" | "80" | "96" | "108";
6
6
  /**
7
7
  * @default "none"
8
8
  */
@@ -152,6 +152,18 @@
152
152
  --badge-offset: 30px;
153
153
  }
154
154
 
155
+ .seed-avatar__root--size_56 {
156
+ --avatar-size: 56px;
157
+ --avatar-stroke-width: 1px;
158
+ --badge-mask-size: 24px;
159
+ --badge-mask-offset: 34px;
160
+ }
161
+
162
+ .seed-avatar__badge--size_56 {
163
+ --badge-size: 20px;
164
+ --badge-offset: 36px;
165
+ }
166
+
155
167
  .seed-avatar__root--size_64 {
156
168
  --avatar-size: 64px;
157
169
  --avatar-stroke-width: 1px;
@@ -34,6 +34,7 @@ export const avatarVariantMap = {
34
34
  "36",
35
35
  "42",
36
36
  "48",
37
+ "56",
37
38
  "64",
38
39
  "80",
39
40
  "96",
@@ -34,6 +34,7 @@ export const avatarVariantMap = {
34
34
  "36",
35
35
  "42",
36
36
  "48",
37
+ "56",
37
38
  "64",
38
39
  "80",
39
40
  "96",
@@ -0,0 +1,24 @@
1
+ .seed-content-placeholder__root {
2
+ box-sizing: border-box;
3
+ position: relative;
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ vertical-align: top;
8
+ width: 100%;
9
+ height: 100%;
10
+ overflow: hidden;
11
+ background-color: var(--seed-color-palette-gray-200)
12
+ }
13
+ .seed-content-placeholder__asset {
14
+ display: block;
15
+ height: calc(0.5 * 100%);
16
+ min-width: var(--seed-dimension-x4);
17
+ max-width: 64px;
18
+ width: auto;
19
+ aspect-ratio: 1 / 1;
20
+ color: var(--seed-color-palette-gray-400);
21
+ fill: currentColor;
22
+ stroke: currentColor;
23
+ object-fit: contain
24
+ }
@@ -0,0 +1,24 @@
1
+ declare interface ContentPlaceholderVariant {
2
+ /**
3
+ * @default "default"
4
+ */
5
+ type: "default" | "buySell" | "car" | "commerce" | "coupon" | "food" | "group" | "image" | "jobs" | "business" | "post" | "realty";
6
+ }
7
+
8
+ declare type ContentPlaceholderVariantMap = {
9
+ [key in keyof ContentPlaceholderVariant]: Array<ContentPlaceholderVariant[key]>;
10
+ };
11
+
12
+ export declare type ContentPlaceholderVariantProps = Partial<ContentPlaceholderVariant>;
13
+
14
+ export declare type ContentPlaceholderSlotName = "root" | "asset";
15
+
16
+ export declare const contentPlaceholderVariantMap: ContentPlaceholderVariantMap;
17
+
18
+ export declare const contentPlaceholder: ((
19
+ props?: ContentPlaceholderVariantProps,
20
+ ) => Record<ContentPlaceholderSlotName, string>) & {
21
+ splitVariantProps: <T extends ContentPlaceholderVariantProps>(
22
+ props: T,
23
+ ) => [ContentPlaceholderVariantProps, Omit<T, keyof ContentPlaceholderVariantProps>];
24
+ }
@@ -0,0 +1,27 @@
1
+ @layer seed-components {
2
+ .seed-content-placeholder__root {
3
+ box-sizing: border-box;
4
+ vertical-align: top;
5
+ background-color: var(--seed-color-palette-gray-200);
6
+ justify-content: center;
7
+ align-items: center;
8
+ width: 100%;
9
+ height: 100%;
10
+ display: inline-flex;
11
+ position: relative;
12
+ overflow: hidden;
13
+ }
14
+
15
+ .seed-content-placeholder__asset {
16
+ height: 50%;
17
+ min-width: var(--seed-dimension-x4);
18
+ aspect-ratio: 1;
19
+ width: auto;
20
+ max-width: 64px;
21
+ color: var(--seed-color-palette-gray-400);
22
+ fill: currentColor;
23
+ stroke: currentColor;
24
+ object-fit: contain;
25
+ display: block;
26
+ }
27
+ }
@@ -0,0 +1,53 @@
1
+ import './content-placeholder.layered.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const contentPlaceholderSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-content-placeholder__root"
8
+ ],
9
+ [
10
+ "asset",
11
+ "seed-content-placeholder__asset"
12
+ ]
13
+ ];
14
+
15
+ const defaultVariant = {
16
+ "type": "default"
17
+ };
18
+
19
+ const compoundVariants = [];
20
+
21
+ export const contentPlaceholderVariantMap = {
22
+ "type": [
23
+ "default",
24
+ "buySell",
25
+ "car",
26
+ "commerce",
27
+ "coupon",
28
+ "food",
29
+ "group",
30
+ "image",
31
+ "jobs",
32
+ "business",
33
+ "post",
34
+ "realty"
35
+ ]
36
+ };
37
+
38
+ export const contentPlaceholderVariantKeys = Object.keys(contentPlaceholderVariantMap);
39
+
40
+ export function contentPlaceholder(props) {
41
+ return Object.fromEntries(
42
+ contentPlaceholderSlotNames.map(([slot, className]) => {
43
+ return [
44
+ slot,
45
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
46
+ ];
47
+ }),
48
+ );
49
+ }
50
+
51
+ Object.assign(contentPlaceholder, { splitVariantProps: (props) => splitVariantProps(props, contentPlaceholderVariantMap) });
52
+
53
+ // @recipe(seed): content-placeholder
@@ -0,0 +1,53 @@
1
+ import './content-placeholder.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const contentPlaceholderSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-content-placeholder__root"
8
+ ],
9
+ [
10
+ "asset",
11
+ "seed-content-placeholder__asset"
12
+ ]
13
+ ];
14
+
15
+ const defaultVariant = {
16
+ "type": "default"
17
+ };
18
+
19
+ const compoundVariants = [];
20
+
21
+ export const contentPlaceholderVariantMap = {
22
+ "type": [
23
+ "default",
24
+ "buySell",
25
+ "car",
26
+ "commerce",
27
+ "coupon",
28
+ "food",
29
+ "group",
30
+ "image",
31
+ "jobs",
32
+ "business",
33
+ "post",
34
+ "realty"
35
+ ]
36
+ };
37
+
38
+ export const contentPlaceholderVariantKeys = Object.keys(contentPlaceholderVariantMap);
39
+
40
+ export function contentPlaceholder(props) {
41
+ return Object.fromEntries(
42
+ contentPlaceholderSlotNames.map(([slot, className]) => {
43
+ return [
44
+ slot,
45
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
46
+ ];
47
+ }),
48
+ );
49
+ }
50
+
51
+ Object.assign(contentPlaceholder, { splitVariantProps: (props) => splitVariantProps(props, contentPlaceholderVariantMap) });
52
+
53
+ // @recipe(seed): content-placeholder
@@ -77,6 +77,7 @@
77
77
  margin-left: calc(var(--seed-dimension-x1) - ((38px - var(--seed-dimension-x3_5)) / 2));
78
78
  margin-right: calc(-1 * ((38px - var(--seed-dimension-x3_5)) / 2));
79
79
  margin-top: calc(-1 * ((38px - var(--seed-dimension-x3_5)) / 2) + var(--seed-dimension-x0_5));
80
+ margin-bottom: calc(-1 * ((38px - var(--seed-dimension-x3_5)) / 2) + var(--seed-dimension-x0_5));
80
81
  color: var(--seed-color-fg-neutral-inverted);
81
82
  --seed-icon-size: var(--seed-dimension-x3_5);
82
83
  --seed-icon-color: var(--seed-color-fg-neutral-inverted);
@@ -83,6 +83,7 @@
83
83
  margin-left: calc(var(--seed-dimension-x1) - ((38px - var(--seed-dimension-x3_5)) / 2));
84
84
  margin-right: calc(-1 * ((38px - var(--seed-dimension-x3_5)) / 2));
85
85
  margin-top: calc(-1 * ((38px - var(--seed-dimension-x3_5)) / 2) + var(--seed-dimension-x0_5));
86
+ margin-bottom: calc(-1 * ((38px - var(--seed-dimension-x3_5)) / 2) + var(--seed-dimension-x0_5));
86
87
  color: var(--seed-color-fg-neutral-inverted);
87
88
  --seed-icon-size: var(--seed-dimension-x3_5);
88
89
  --seed-icon-color: var(--seed-color-fg-neutral-inverted);
@@ -1,4 +1,4 @@
1
- .seed-image-frame-reaction-button {
1
+ .seed-image-frame-reaction-button__root {
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  justify-content: center;
@@ -10,10 +10,8 @@
10
10
  width: var(--seed-dimension-x6);
11
11
  height: var(--seed-dimension-x6);
12
12
  background: transparent;
13
- --seed-icon-size: var(--seed-dimension-x6);
14
- --seed-icon-color: var(--seed-color-palette-static-white);
15
13
  }
16
- .seed-image-frame-reaction-button::before {
14
+ .seed-image-frame-reaction-button__root::before {
17
15
  content: '';
18
16
  position: absolute;
19
17
  top: calc((var(--seed-dimension-x10) - var(--seed-dimension-x6)) / 2 * -1);
@@ -24,14 +22,31 @@
24
22
  outline-offset: calc(var(--seed-dimension-x0_5) * -1);
25
23
  transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
26
24
  }
27
- .seed-image-frame-reaction-button:is(:focus, [data-focus]) {
25
+ .seed-image-frame-reaction-button__root:is(:focus, [data-focus]) {
28
26
  outline: none;
29
27
  }
30
- .seed-image-frame-reaction-button:is(:focus-visible, [data-focus-visible]):before {
28
+ .seed-image-frame-reaction-button__root:is(:focus-visible, [data-focus-visible]):before {
31
29
  border-radius: var(--seed-radius-r1);
32
30
  outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
33
31
  outline-offset: calc(var(--seed-dimension-x0_5) * -1);
34
32
  }
35
- .seed-image-frame-reaction-button:is([aria-pressed=true], [data-pressed]) {
36
- --seed-icon-color: var(--seed-color-bg-transparent);
33
+ .seed-image-frame-reaction-button__fillIcon {
34
+ position: absolute;
35
+ inset: 0;
36
+ margin: auto;
37
+ width: var(--seed-dimension-x6);
38
+ height: var(--seed-dimension-x6);
39
+ pointer-events: none;
40
+ }
41
+ .seed-image-frame-reaction-button__lineIcon {
42
+ position: absolute;
43
+ inset: 0;
44
+ margin: auto;
45
+ width: var(--seed-dimension-x6);
46
+ height: var(--seed-dimension-x6);
47
+ color: var(--seed-color-palette-static-white);
48
+ pointer-events: none;
49
+ }
50
+ .seed-image-frame-reaction-button__lineIcon:is([aria-pressed=true], [data-pressed]) {
51
+ color: var(--seed-color-bg-transparent);
37
52
  }
@@ -8,11 +8,13 @@ declare type ImageFrameReactionButtonVariantMap = {
8
8
 
9
9
  export declare type ImageFrameReactionButtonVariantProps = Partial<ImageFrameReactionButtonVariant>;
10
10
 
11
+ export declare type ImageFrameReactionButtonSlotName = "root" | "fillIcon" | "lineIcon";
12
+
11
13
  export declare const imageFrameReactionButtonVariantMap: ImageFrameReactionButtonVariantMap;
12
14
 
13
15
  export declare const imageFrameReactionButton: ((
14
16
  props?: ImageFrameReactionButtonVariantProps,
15
- ) => string) & {
17
+ ) => Record<ImageFrameReactionButtonSlotName, string>) & {
16
18
  splitVariantProps: <T extends ImageFrameReactionButtonVariantProps>(
17
19
  props: T,
18
20
  ) => [ImageFrameReactionButtonVariantProps, Omit<T, keyof ImageFrameReactionButtonVariantProps>];