@seed-design/lynx-css 0.14.2 → 1.0.1

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 (94) hide show
  1. package/all.css +1078 -373
  2. package/all.min.css +1 -1
  3. package/base.css +10 -0
  4. package/base.min.css +1 -1
  5. package/package.json +1 -1
  6. package/recipes/alert-dialog.css +11 -0
  7. package/recipes/alert-dialog.d.ts +1 -1
  8. package/recipes/alert-dialog.mjs +8 -0
  9. package/recipes/app-bar.css +7 -3
  10. package/recipes/attachment-input-item.css +7 -0
  11. package/recipes/attachment-input.css +2 -1
  12. package/recipes/avatar-stack.css +69 -0
  13. package/recipes/avatar-stack.d.ts +24 -0
  14. package/recipes/avatar-stack.mjs +55 -0
  15. package/recipes/avatar.css +257 -0
  16. package/recipes/avatar.d.ts +28 -0
  17. package/recipes/avatar.mjs +82 -0
  18. package/recipes/badge.css +22 -23
  19. package/recipes/badge.d.ts +0 -4
  20. package/recipes/badge.mjs +1 -14
  21. package/recipes/bottom-sheet.css +33 -2
  22. package/recipes/bottom-sheet.d.ts +5 -1
  23. package/recipes/bottom-sheet.mjs +28 -2
  24. package/recipes/callout.css +1 -8
  25. package/recipes/checkbox.css +7 -1
  26. package/recipes/checkmark.css +17 -26
  27. package/recipes/checkmark.d.ts +1 -5
  28. package/recipes/checkmark.mjs +7 -60
  29. package/recipes/chip-tabs.css +12 -7
  30. package/recipes/chip.css +16 -11
  31. package/recipes/content-placeholder.css +29 -0
  32. package/recipes/content-placeholder.d.ts +21 -0
  33. package/recipes/content-placeholder.mjs +44 -0
  34. package/recipes/dialog.css +4 -2
  35. package/recipes/{input-button.css → field-button.css} +49 -49
  36. package/recipes/field-button.d.ts +40 -0
  37. package/recipes/{input-button.mjs → field-button.mjs} +20 -20
  38. package/recipes/floating-action-button.css +15 -8
  39. package/recipes/image-frame-icon.css +8 -0
  40. package/recipes/image-frame-icon.d.ts +19 -0
  41. package/recipes/image-frame-icon.mjs +22 -0
  42. package/recipes/image-frame-indicator.css +17 -0
  43. package/recipes/image-frame-indicator.d.ts +21 -0
  44. package/recipes/image-frame-indicator.mjs +36 -0
  45. package/recipes/image-frame-reaction-button.css +20 -0
  46. package/recipes/image-frame-reaction-button.d.ts +21 -0
  47. package/recipes/image-frame-reaction-button.mjs +40 -0
  48. package/recipes/image-frame.css +87 -0
  49. package/recipes/image-frame.d.ts +32 -0
  50. package/recipes/image-frame.mjs +72 -0
  51. package/recipes/list-item.css +0 -4
  52. package/recipes/list-item.d.ts +1 -1
  53. package/recipes/list-item.mjs +0 -4
  54. package/recipes/menu-sheet-item.css +5 -1
  55. package/recipes/menu-sheet.css +5 -0
  56. package/recipes/menu-sheet.d.ts +1 -1
  57. package/recipes/menu-sheet.mjs +4 -0
  58. package/recipes/menu.css +1 -13
  59. package/recipes/menu.d.ts +1 -1
  60. package/recipes/menu.mjs +0 -4
  61. package/recipes/progress-circle.css +61 -4
  62. package/recipes/progress-circle.d.ts +1 -1
  63. package/recipes/progress-circle.mjs +1 -0
  64. package/recipes/pull-to-refresh.css +14 -0
  65. package/recipes/pull-to-refresh.d.ts +21 -0
  66. package/recipes/pull-to-refresh.mjs +40 -0
  67. package/recipes/reaction-button.css +19 -19
  68. package/recipes/reaction-button.d.ts +0 -4
  69. package/recipes/reaction-button.mjs +0 -11
  70. package/recipes/scroll-fog.css +4 -17
  71. package/recipes/scroll-fog.d.ts +1 -1
  72. package/recipes/scroll-fog.mjs +0 -8
  73. package/recipes/segmented-control.css +24 -14
  74. package/recipes/segmented-control.d.ts +4 -4
  75. package/recipes/segmented-control.mjs +8 -8
  76. package/recipes/select-box-checkmark.css +4 -7
  77. package/recipes/select-box.css +10 -4
  78. package/recipes/select-item.css +13 -2
  79. package/recipes/select-item.d.ts +1 -1
  80. package/recipes/select-item.mjs +4 -0
  81. package/recipes/select-trigger.css +13 -2
  82. package/recipes/select-trigger.d.ts +1 -1
  83. package/recipes/select-trigger.mjs +4 -0
  84. package/recipes/select.css +1 -13
  85. package/recipes/select.d.ts +1 -1
  86. package/recipes/select.mjs +0 -4
  87. package/recipes/slider-marker.css +2 -2
  88. package/recipes/slider-tick.css +1 -1
  89. package/recipes/slider.css +2 -5
  90. package/recipes/tabs.css +11 -11
  91. package/recipes/wheel-picker.css +151 -0
  92. package/recipes/wheel-picker.d.ts +32 -0
  93. package/recipes/wheel-picker.mjs +90 -0
  94. package/recipes/input-button.d.ts +0 -40
@@ -0,0 +1,40 @@
1
+ import './image-frame-reaction-button.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const imageFrameReactionButtonSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-image-frame-reaction-button__root"
8
+ ],
9
+ [
10
+ "fillIcon",
11
+ "seed-image-frame-reaction-button__fillIcon"
12
+ ],
13
+ [
14
+ "lineIcon",
15
+ "seed-image-frame-reaction-button__lineIcon"
16
+ ]
17
+ ];
18
+
19
+ const defaultVariant = {};
20
+
21
+ const compoundVariants = [];
22
+
23
+ export const imageFrameReactionButtonVariantMap = {};
24
+
25
+ export const imageFrameReactionButtonVariantKeys = Object.keys(imageFrameReactionButtonVariantMap);
26
+
27
+ export function imageFrameReactionButton(props) {
28
+ return Object.fromEntries(
29
+ imageFrameReactionButtonSlotNames.map(([slot, className]) => {
30
+ return [
31
+ slot,
32
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
33
+ ];
34
+ }),
35
+ );
36
+ }
37
+
38
+ Object.assign(imageFrameReactionButton, { splitVariantProps: (props) => splitVariantProps(props, imageFrameReactionButtonVariantMap) });
39
+
40
+ // @recipe(seed): image-frame-reaction-button
@@ -0,0 +1,87 @@
1
+ .seed-image-frame__root {
2
+ position: relative;
3
+ overflow: hidden;
4
+ flex-shrink: 0;
5
+ aspect-ratio: var(--seed-image-frame-ratio)
6
+ }
7
+ .seed-image-frame__content {
8
+ position: absolute;
9
+ top: 0;
10
+ right: 0;
11
+ bottom: 0;
12
+ left: 0;
13
+ width: 100%;
14
+ height: 100%;
15
+ opacity: 0;
16
+ pointer-events: none
17
+ }
18
+ .seed-image-frame__fallback {
19
+ position: absolute;
20
+ top: 0;
21
+ right: 0;
22
+ bottom: 0;
23
+ left: 0
24
+ }
25
+ .seed-image-frame__stroke {
26
+ position: absolute;
27
+ top: 0;
28
+ right: 0;
29
+ bottom: 0;
30
+ left: 0;
31
+ border-radius: var(--seed-image-frame-radius);
32
+ pointer-events: none
33
+ }
34
+ .seed-image-frame__floater {
35
+ position: absolute;
36
+ display: flex
37
+ }
38
+ .seed-image-frame__stroke--stroke_true {
39
+ border-width: 1px;
40
+ border-style: solid;
41
+ border-color: var(--seed-color-stroke-neutral-subtle)
42
+ }
43
+ .seed-image-frame__content--loaded_true {
44
+ opacity: 1;
45
+ pointer-events: auto
46
+ }
47
+ .seed-image-frame__floater--placement_top-start {
48
+ top: var(--seed-image-frame-offset-y);
49
+ left: var(--seed-image-frame-offset-x)
50
+ }
51
+ .seed-image-frame__floater--placement_top-center {
52
+ top: var(--seed-image-frame-offset-y);
53
+ left: calc(50% + var(--seed-image-frame-offset-x));
54
+ transform: translateX(-50%)
55
+ }
56
+ .seed-image-frame__floater--placement_top-end {
57
+ top: var(--seed-image-frame-offset-y);
58
+ right: var(--seed-image-frame-offset-x)
59
+ }
60
+ .seed-image-frame__floater--placement_middle-start {
61
+ top: calc(50% + var(--seed-image-frame-offset-y));
62
+ left: var(--seed-image-frame-offset-x);
63
+ transform: translateY(-50%)
64
+ }
65
+ .seed-image-frame__floater--placement_middle-center {
66
+ top: calc(50% + var(--seed-image-frame-offset-y));
67
+ left: calc(50% + var(--seed-image-frame-offset-x));
68
+ transform: translate(-50%, -50%)
69
+ }
70
+ .seed-image-frame__floater--placement_middle-end {
71
+ top: calc(50% + var(--seed-image-frame-offset-y));
72
+ right: var(--seed-image-frame-offset-x);
73
+ transform: translateY(-50%)
74
+ }
75
+ .seed-image-frame__floater--placement_bottom-start {
76
+ bottom: var(--seed-image-frame-offset-y);
77
+ left: var(--seed-image-frame-offset-x)
78
+ }
79
+ .seed-image-frame__floater--placement_bottom-center {
80
+ bottom: var(--seed-image-frame-offset-y);
81
+ left: calc(50% + var(--seed-image-frame-offset-x));
82
+ transform: translateX(-50%)
83
+ }
84
+ .seed-image-frame__floater--placement_bottom-end {
85
+ bottom: var(--seed-image-frame-offset-y);
86
+ right: var(--seed-image-frame-offset-x)
87
+ }
@@ -0,0 +1,32 @@
1
+ declare interface ImageFrameVariant {
2
+ /**
3
+ * @default false
4
+ */
5
+ stroke: boolean;
6
+ /**
7
+ * @default false
8
+ */
9
+ loaded: boolean;
10
+ /**
11
+ * @default "bottom-end"
12
+ */
13
+ placement: "top-start" | "top-center" | "top-end" | "middle-start" | "middle-center" | "middle-end" | "bottom-start" | "bottom-center" | "bottom-end";
14
+ }
15
+
16
+ declare type ImageFrameVariantMap = {
17
+ [key in keyof ImageFrameVariant]: Array<ImageFrameVariant[key]>;
18
+ };
19
+
20
+ export declare type ImageFrameVariantProps = Partial<ImageFrameVariant>;
21
+
22
+ export declare type ImageFrameSlotName = "root" | "content" | "fallback" | "stroke" | "floater";
23
+
24
+ export declare const imageFrameVariantMap: ImageFrameVariantMap;
25
+
26
+ export declare const imageFrame: ((
27
+ props?: ImageFrameVariantProps,
28
+ ) => Record<ImageFrameSlotName, string>) & {
29
+ splitVariantProps: <T extends ImageFrameVariantProps>(
30
+ props: T,
31
+ ) => [ImageFrameVariantProps, Omit<T, keyof ImageFrameVariantProps>];
32
+ }
@@ -0,0 +1,72 @@
1
+ import './image-frame.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const imageFrameSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-image-frame__root"
8
+ ],
9
+ [
10
+ "content",
11
+ "seed-image-frame__content"
12
+ ],
13
+ [
14
+ "fallback",
15
+ "seed-image-frame__fallback"
16
+ ],
17
+ [
18
+ "stroke",
19
+ "seed-image-frame__stroke"
20
+ ],
21
+ [
22
+ "floater",
23
+ "seed-image-frame__floater"
24
+ ]
25
+ ];
26
+
27
+ const defaultVariant = {
28
+ "stroke": false,
29
+ "loaded": false,
30
+ "placement": "bottom-end"
31
+ };
32
+
33
+ const compoundVariants = [];
34
+
35
+ export const imageFrameVariantMap = {
36
+ "stroke": [
37
+ true,
38
+ false
39
+ ],
40
+ "loaded": [
41
+ true,
42
+ false
43
+ ],
44
+ "placement": [
45
+ "top-start",
46
+ "top-center",
47
+ "top-end",
48
+ "middle-start",
49
+ "middle-center",
50
+ "middle-end",
51
+ "bottom-start",
52
+ "bottom-center",
53
+ "bottom-end"
54
+ ]
55
+ };
56
+
57
+ export const imageFrameVariantKeys = Object.keys(imageFrameVariantMap);
58
+
59
+ export function imageFrame(props) {
60
+ return Object.fromEntries(
61
+ imageFrameSlotNames.map(([slot, className]) => {
62
+ return [
63
+ slot,
64
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
65
+ ];
66
+ }),
67
+ );
68
+ }
69
+
70
+ Object.assign(imageFrame, { splitVariantProps: (props) => splitVariantProps(props, imageFrameVariantMap) });
71
+
72
+ // @recipe(seed): image-frame
@@ -1,7 +1,3 @@
1
- .seed-list-item__interactionRoot {
2
- display: flex;
3
- width: 100%
4
- }
5
1
  .seed-list-item__root {
6
2
  position: relative;
7
3
  display: flex;
@@ -23,7 +23,7 @@ declare type ListItemVariantMap = {
23
23
 
24
24
  export declare type ListItemVariantProps = Partial<ListItemVariant>;
25
25
 
26
- export declare type ListItemSlotName = "interactionRoot" | "root" | "highlightedOverlay" | "pressedOverlay" | "layout" | "content" | "title" | "detail" | "prefix" | "suffix" | "prefixIcon" | "suffixIcon";
26
+ export declare type ListItemSlotName = "root" | "highlightedOverlay" | "pressedOverlay" | "layout" | "content" | "title" | "detail" | "prefix" | "suffix" | "prefixIcon" | "suffixIcon";
27
27
 
28
28
  export declare const listItemVariantMap: ListItemVariantMap;
29
29
 
@@ -2,10 +2,6 @@ import './list-item.css';
2
2
  import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
3
 
4
4
  const listItemSlotNames = [
5
- [
6
- "interactionRoot",
7
- "seed-list-item__interactionRoot"
8
- ],
9
5
  [
10
6
  "root",
11
7
  "seed-list-item__root"
@@ -3,6 +3,7 @@
3
3
  flex-direction: row;
4
4
  align-items: center;
5
5
  justify-content: flex-start;
6
+ position: relative;
6
7
  width: 100%;
7
8
  min-height: 52px;
8
9
  padding-top: var(--seed-dimension-x3_5);
@@ -48,7 +49,10 @@
48
49
  height: 22px;
49
50
  }
50
51
  .seed-menu-sheet-item__divider {
51
- width: 100%;
52
+ position: absolute;
53
+ right: 0;
54
+ bottom: 0;
55
+ left: 0;
52
56
  height: 1px;
53
57
  background-color: var(--seed-color-stroke-neutral-muted);
54
58
  }
@@ -45,6 +45,7 @@
45
45
  flex-direction: column;
46
46
  align-items: center;
47
47
  text-align: center;
48
+ flex-shrink: 0;
48
49
  gap: var(--seed-dimension-x1);
49
50
  padding-bottom: var(--seed-dimension-x4);
50
51
  }
@@ -63,6 +64,9 @@
63
64
  margin: 0;
64
65
  }
65
66
  .seed-menu-sheet__list {
67
+ flex-shrink: 1;
68
+ }
69
+ .seed-menu-sheet__listContent {
66
70
  display: flex;
67
71
  flex-direction: column;
68
72
  align-items: stretch;
@@ -79,6 +83,7 @@
79
83
  display: flex;
80
84
  flex-direction: column;
81
85
  align-items: stretch;
86
+ flex-shrink: 0;
82
87
  padding-top: var(--seed-dimension-x2_5);
83
88
  }
84
89
  .seed-menu-sheet__closeButton {
@@ -15,7 +15,7 @@ declare type MenuSheetVariantMap = {
15
15
 
16
16
  export declare type MenuSheetVariantProps = Partial<MenuSheetVariant>;
17
17
 
18
- export declare type MenuSheetSlotName = "positioner" | "backdrop" | "content" | "contentInner" | "header" | "title" | "description" | "list" | "group" | "footer" | "closeButton" | "closeButtonLabel";
18
+ export declare type MenuSheetSlotName = "positioner" | "backdrop" | "content" | "contentInner" | "header" | "title" | "description" | "list" | "listContent" | "group" | "footer" | "closeButton" | "closeButtonLabel";
19
19
 
20
20
  export declare const menuSheetVariantMap: MenuSheetVariantMap;
21
21
 
@@ -34,6 +34,10 @@ const menuSheetSlotNames = [
34
34
  "list",
35
35
  "seed-menu-sheet__list"
36
36
  ],
37
+ [
38
+ "listContent",
39
+ "seed-menu-sheet__listContent"
40
+ ],
37
41
  [
38
42
  "group",
39
43
  "seed-menu-sheet__group"
package/recipes/menu.css CHANGED
@@ -1,17 +1,5 @@
1
1
  .seed-menu__positioner {
2
- position: absolute;
3
- top: 0;
4
- left: 0;
5
- width: 100%;
6
- height: 100%;
7
- z-index: 0
8
- }
9
- .seed-menu__backdrop {
10
- position: absolute;
11
- top: 0;
12
- right: 0;
13
- bottom: 0;
14
- left: 0
2
+ z-index: 99
15
3
  }
16
4
  .seed-menu__content {
17
5
  position: absolute;
package/recipes/menu.d.ts CHANGED
@@ -19,7 +19,7 @@ declare type MenuVariantMap = {
19
19
 
20
20
  export declare type MenuVariantProps = Partial<MenuVariant>;
21
21
 
22
- export declare type MenuSlotName = "positioner" | "backdrop" | "content" | "scrollArea" | "scrollContent" | "group" | "groupLabel" | "separator";
22
+ export declare type MenuSlotName = "positioner" | "content" | "scrollArea" | "scrollContent" | "group" | "groupLabel" | "separator";
23
23
 
24
24
  export declare const menuVariantMap: MenuVariantMap;
25
25
 
package/recipes/menu.mjs CHANGED
@@ -6,10 +6,6 @@ const menuSlotNames = [
6
6
  "positioner",
7
7
  "seed-menu__positioner"
8
8
  ],
9
- [
10
- "backdrop",
11
- "seed-menu__backdrop"
12
- ],
13
9
  [
14
10
  "content",
15
11
  "seed-menu__content"
@@ -36,21 +36,78 @@
36
36
  clip-path: path("M7 0 A7 7 0 1 1 7 14 A7 7 0 1 1 7 0 Z M7 2 A5 5 0 1 0 7 12 A5 5 0 1 0 7 2 Z");
37
37
  }
38
38
 
39
+ .seed-progress-circle__track {
40
+ position: absolute;
41
+ top: 0;
42
+ left: 0;
43
+ width: 100%;
44
+ height: 100%;
45
+ }
46
+
39
47
  .seed-progress-circle__cap {
40
48
  position: absolute;
41
49
  border-radius: 50%;
42
50
  z-index: 1;
43
51
  }
44
52
 
45
- .seed-progress-circle__root--tone_neutral {
53
+ .seed-progress-circle__spinner,
54
+ .seed-progress-circle__indeterminate-range {
55
+ position: absolute;
56
+ top: 0;
57
+ left: 0;
58
+ width: 100%;
59
+ height: 100%;
60
+ }
61
+
62
+ .seed-progress-circle__range.seed-progress-circle__indeterminate-range {
63
+ background-color: transparent;
64
+ }
65
+
66
+ /* Android는 clip-path를 가진 부모가 transform 애니메이션 중인 자식을 자르지 않는다.
67
+ 반쪽 영역은 폭 50% 박스의 overflow로 자르고, 반원은 그 안에서 링 크기로 둔다. */
68
+ .seed-progress-circle__half {
69
+ position: absolute;
70
+ top: 0;
71
+ width: 50%;
72
+ height: 100%;
73
+ overflow: hidden;
74
+ }
75
+
76
+ .seed-progress-circle__half--first {
77
+ left: 50%;
78
+ }
79
+
80
+ .seed-progress-circle__half--second {
81
+ left: 0;
82
+ }
83
+
84
+ .seed-progress-circle__semicircle--first,
85
+ .seed-progress-circle__semicircle--second {
86
+ position: absolute;
87
+ top: 0;
88
+ width: 200%;
89
+ height: 100%;
90
+ }
91
+
92
+ .seed-progress-circle__semicircle--first {
93
+ left: -100%;
94
+ clip-path: inset(0 50% 0 0);
95
+ }
96
+
97
+ .seed-progress-circle__semicircle--second {
98
+ left: 0;
99
+ clip-path: inset(0 0 0 50%);
100
+ }
101
+
102
+ .seed-progress-circle__track--tone_neutral {
46
103
  background-color: var(--seed-color-palette-gray-200);
47
104
  }
48
105
 
49
- .seed-progress-circle__root--tone_brand {
106
+ .seed-progress-circle__track--tone_brand {
50
107
  background-color: var(--seed-color-palette-carrot-200);
51
108
  }
52
109
 
53
- .seed-progress-circle__root--tone_staticWhite {
110
+ .seed-progress-circle__track--tone_staticWhite {
54
111
  background-color: var(--seed-color-palette-static-white-alpha-300);
55
112
  }
56
113
 
@@ -70,7 +127,7 @@
70
127
  }
71
128
 
72
129
  /* inherit: inherits --track-color / --range-color from parent (e.g. action-button) */
73
- .seed-progress-circle__root--tone_inherit {
130
+ .seed-progress-circle__track--tone_inherit {
74
131
  background-color: var(--track-color);
75
132
  }
76
133
 
@@ -17,7 +17,7 @@ declare type ProgressCircleVariantMap = {
17
17
 
18
18
  export declare type ProgressCircleVariantProps = Partial<ProgressCircleVariant>;
19
19
 
20
- export declare type ProgressCircleSlotName = "root" | "range" | "cap";
20
+ export declare type ProgressCircleSlotName = "root" | "track" | "range" | "cap";
21
21
 
22
22
  export declare const progressCircleVariantMap: ProgressCircleVariantMap;
23
23
 
@@ -4,6 +4,7 @@ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs"
4
4
 
5
5
  const progressCircleSlotNames = [
6
6
  ["root", "seed-progress-circle__root"],
7
+ ["track", "seed-progress-circle__track"],
7
8
  ["range", "seed-progress-circle__range"],
8
9
  ["cap", "seed-progress-circle__cap"],
9
10
  ];
@@ -0,0 +1,14 @@
1
+ .seed-pull-to-refresh__root {
2
+ height: 100%
3
+ }
4
+ .seed-pull-to-refresh__indicator {
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ padding-top: var(--seed-dimension-x8);
9
+ padding-bottom: var(--seed-dimension-x8)
10
+ }
11
+ .seed-pull-to-refresh__content {
12
+ height: 100%;
13
+ width: 100%
14
+ }
@@ -0,0 +1,21 @@
1
+ declare interface PullToRefreshVariant {
2
+
3
+ }
4
+
5
+ declare type PullToRefreshVariantMap = {
6
+ [key in keyof PullToRefreshVariant]: Array<PullToRefreshVariant[key]>;
7
+ };
8
+
9
+ export declare type PullToRefreshVariantProps = Partial<PullToRefreshVariant>;
10
+
11
+ export declare type PullToRefreshSlotName = "root" | "indicator" | "content";
12
+
13
+ export declare const pullToRefreshVariantMap: PullToRefreshVariantMap;
14
+
15
+ export declare const pullToRefresh: ((
16
+ props?: PullToRefreshVariantProps,
17
+ ) => Record<PullToRefreshSlotName, string>) & {
18
+ splitVariantProps: <T extends PullToRefreshVariantProps>(
19
+ props: T,
20
+ ) => [PullToRefreshVariantProps, Omit<T, keyof PullToRefreshVariantProps>];
21
+ }
@@ -0,0 +1,40 @@
1
+ import './pull-to-refresh.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const pullToRefreshSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-pull-to-refresh__root"
8
+ ],
9
+ [
10
+ "indicator",
11
+ "seed-pull-to-refresh__indicator"
12
+ ],
13
+ [
14
+ "content",
15
+ "seed-pull-to-refresh__content"
16
+ ]
17
+ ];
18
+
19
+ const defaultVariant = {};
20
+
21
+ const compoundVariants = [];
22
+
23
+ export const pullToRefreshVariantMap = {};
24
+
25
+ export const pullToRefreshVariantKeys = Object.keys(pullToRefreshVariantMap);
26
+
27
+ export function pullToRefresh(props) {
28
+ return Object.fromEntries(
29
+ pullToRefreshSlotNames.map(([slot, className]) => {
30
+ return [
31
+ slot,
32
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
33
+ ];
34
+ }),
35
+ );
36
+ }
37
+
38
+ Object.assign(pullToRefresh, { splitVariantProps: (props) => splitVariantProps(props, pullToRefreshVariantMap) });
39
+
40
+ // @recipe(seed): pull-to-refresh
@@ -6,10 +6,13 @@
6
6
  justify-content: center;
7
7
  flex-shrink: 0;
8
8
  background: var(--seed-color-bg-transparent);
9
- box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral-muted);
9
+ border-width: var(--seed-reaction-button-stroke-width);
10
+ border-style: solid;
11
+ --seed-reaction-button-stroke-width: 1px;
12
+ border-color: var(--seed-color-stroke-neutral-muted);
10
13
  --track-color: var(--seed-color-palette-gray-500);
11
14
  --range-color: var(--seed-color-fg-neutral);
12
- transition: background-color var(--seed-duration-color-transition) var(--seed-timing-function-easing), box-shadow var(--seed-duration-color-transition) var(--seed-timing-function-easing)
15
+ transition: background-color var(--seed-duration-color-transition) var(--seed-timing-function-easing), border-color var(--seed-duration-color-transition) var(--seed-timing-function-easing)
13
16
  }
14
17
  .seed-reaction-button__content {
15
18
  display: flex;
@@ -43,10 +46,10 @@
43
46
  .seed-reaction-button__root--size_xsmall {
44
47
  height: var(--seed-dimension-x8);
45
48
  border-radius: var(--seed-radius-full);
46
- padding-left: var(--seed-dimension-x3);
47
- padding-right: var(--seed-dimension-x3);
48
- padding-top: var(--seed-dimension-x1_5);
49
- padding-bottom: var(--seed-dimension-x1_5)
49
+ padding-left: calc(var(--seed-dimension-x3) - var(--seed-reaction-button-stroke-width));
50
+ padding-right: calc(var(--seed-dimension-x3) - var(--seed-reaction-button-stroke-width));
51
+ padding-top: calc(var(--seed-dimension-x1_5) - var(--seed-reaction-button-stroke-width));
52
+ padding-bottom: calc(var(--seed-dimension-x1_5) - var(--seed-reaction-button-stroke-width))
50
53
  }
51
54
  .seed-reaction-button__content--size_xsmall {
52
55
  gap: var(--seed-dimension-x1)
@@ -66,10 +69,10 @@
66
69
  .seed-reaction-button__root--size_small {
67
70
  height: var(--seed-dimension-x9);
68
71
  border-radius: var(--seed-radius-full);
69
- padding-left: var(--seed-dimension-x3_5);
70
- padding-right: var(--seed-dimension-x3_5);
71
- padding-top: var(--seed-dimension-x2);
72
- padding-bottom: var(--seed-dimension-x2)
72
+ padding-left: calc(var(--seed-dimension-x3_5) - var(--seed-reaction-button-stroke-width));
73
+ padding-right: calc(var(--seed-dimension-x3_5) - var(--seed-reaction-button-stroke-width));
74
+ padding-top: calc(var(--seed-dimension-x2) - var(--seed-reaction-button-stroke-width));
75
+ padding-bottom: calc(var(--seed-dimension-x2) - var(--seed-reaction-button-stroke-width))
73
76
  }
74
77
  .seed-reaction-button__content--size_small {
75
78
  gap: var(--seed-dimension-x1)
@@ -88,7 +91,8 @@
88
91
  }
89
92
  .seed-reaction-button__root--selected_true {
90
93
  background: var(--seed-color-bg-transparent);
91
- box-shadow: inset 0 0 0 1px var(--seed-color-stroke-brand-weak);
94
+ --seed-reaction-button-stroke-width: 1px;
95
+ border-color: var(--seed-color-stroke-brand-weak);
92
96
  --track-color: var(--seed-color-palette-carrot-200);
93
97
  --range-color: var(--seed-color-fg-brand)
94
98
  }
@@ -101,12 +105,10 @@
101
105
  .seed-reaction-button__prefixIcon--selected_true {
102
106
  color: var(--seed-color-fg-brand)
103
107
  }
104
- .seed-reaction-button__root--pressed_true {
105
- background: var(--seed-color-bg-transparent-pressed)
106
- }
107
108
  .seed-reaction-button__root--disabled_true {
108
109
  background: var(--seed-color-bg-disabled);
109
- box-shadow: inset 0 0 0 0px var(--seed-color-stroke-neutral-muted)
110
+ --seed-reaction-button-stroke-width: 0px;
111
+ border-color: var(--seed-color-stroke-neutral-muted)
110
112
  }
111
113
  .seed-reaction-button__label--disabled_true {
112
114
  color: var(--seed-color-fg-disabled)
@@ -123,9 +125,6 @@
123
125
  .seed-reaction-button__content--loading_true {
124
126
  opacity: 0
125
127
  }
126
- .seed-reaction-button__root--selected_true-pressed_true-disabled_false-loading_false {
127
- background: var(--seed-color-bg-transparent-pressed)
128
- }
129
128
  .seed-reaction-button__root--selected_false-disabled_false-loading_false:active {
130
129
  background: var(--seed-color-bg-transparent-pressed)
131
130
  }
@@ -134,7 +133,8 @@
134
133
  }
135
134
  .seed-reaction-button__root--selected_true-loading_true {
136
135
  background: var(--seed-color-bg-transparent-pressed);
137
- box-shadow: inset 0 0 0 1px var(--seed-color-stroke-brand-weak);
136
+ --seed-reaction-button-stroke-width: 1px;
137
+ border-color: var(--seed-color-stroke-brand-weak);
138
138
  --track-color: var(--seed-color-palette-carrot-200);
139
139
  --range-color: var(--seed-color-fg-brand)
140
140
  }
@@ -7,10 +7,6 @@ declare interface ReactionButtonVariant {
7
7
  * @default false
8
8
  */
9
9
  selected: boolean;
10
- /**
11
- * @default false
12
- */
13
- pressed: boolean;
14
10
  /**
15
11
  * @default false
16
12
  */