@seed-design/lynx-css 0.10.2 → 0.11.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 (59) hide show
  1. package/all.css +1214 -179
  2. package/all.min.css +1 -1
  3. package/base.css +1 -1
  4. package/base.min.css +1 -1
  5. package/package.json +9 -3
  6. package/recipes/accordion.css +10 -0
  7. package/recipes/accordion.d.ts +1 -1
  8. package/recipes/accordion.mjs +4 -0
  9. package/recipes/action-button.css +21 -13
  10. package/recipes/action-button.mjs +30 -11
  11. package/recipes/callout.css +18 -0
  12. package/recipes/callout.d.ts +4 -0
  13. package/recipes/callout.mjs +30 -1
  14. package/recipes/checkbox.css +18 -6
  15. package/recipes/checkbox.d.ts +1 -1
  16. package/recipes/checkbox.mjs +4 -0
  17. package/recipes/checkmark.css +10 -6
  18. package/recipes/chip.css +18 -0
  19. package/recipes/chip.mjs +30 -0
  20. package/recipes/input-button.css +209 -0
  21. package/recipes/input-button.d.ts +40 -0
  22. package/recipes/input-button.mjs +99 -0
  23. package/recipes/list-header.css +22 -0
  24. package/recipes/list-header.d.ts +22 -0
  25. package/recipes/list-header.mjs +29 -0
  26. package/recipes/list-item.css +120 -0
  27. package/recipes/list-item.d.ts +32 -0
  28. package/recipes/list-item.mjs +93 -0
  29. package/recipes/list.css +5 -0
  30. package/recipes/list.d.ts +19 -0
  31. package/recipes/list.mjs +22 -0
  32. package/recipes/menu-item.css +119 -0
  33. package/recipes/menu-item.d.ts +36 -0
  34. package/recipes/menu-item.mjs +91 -0
  35. package/recipes/menu-sheet-item.css +69 -0
  36. package/recipes/menu-sheet-item.d.ts +32 -0
  37. package/recipes/menu-sheet-item.mjs +69 -0
  38. package/recipes/menu-sheet.css +104 -0
  39. package/recipes/menu-sheet.d.ts +28 -0
  40. package/recipes/menu-sheet.mjs +88 -0
  41. package/recipes/menu.css +101 -0
  42. package/recipes/menu.d.ts +32 -0
  43. package/recipes/menu.mjs +85 -0
  44. package/recipes/page-banner.css +136 -99
  45. package/recipes/page-banner.d.ts +4 -0
  46. package/recipes/page-banner.mjs +61 -1
  47. package/recipes/radio.css +3 -0
  48. package/recipes/radiomark.css +4 -1
  49. package/recipes/reaction-button.css +145 -0
  50. package/recipes/reaction-button.d.ts +40 -0
  51. package/recipes/reaction-button.mjs +101 -0
  52. package/recipes/segmented-control.css +16 -2
  53. package/recipes/segmented-control.d.ts +1 -1
  54. package/recipes/segmented-control.mjs +8 -0
  55. package/recipes/select-box.css +12 -0
  56. package/recipes/select-box.d.ts +1 -1
  57. package/recipes/select-box.mjs +4 -0
  58. package/scale-feedback/index.d.ts +2 -0
  59. package/scale-feedback/index.mjs +3 -0
@@ -0,0 +1,145 @@
1
+ .seed-reaction-button__root {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: row;
5
+ align-items: center;
6
+ justify-content: center;
7
+ flex-shrink: 0;
8
+ background: var(--seed-color-bg-transparent);
9
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral-muted);
10
+ transform: scale(1);
11
+ --track-color: var(--seed-color-palette-gray-500);
12
+ --range-color: var(--seed-color-fg-neutral);
13
+ 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), transform var(--seed-duration-pressed-scale) var(--seed-timing-function-pressed-scale)
14
+ }
15
+ .seed-reaction-button__content {
16
+ display: flex;
17
+ flex-direction: row;
18
+ align-items: center;
19
+ justify-content: center;
20
+ opacity: 1
21
+ }
22
+ .seed-reaction-button__label {
23
+ color: var(--seed-color-fg-neutral);
24
+ font-weight: var(--seed-font-weight-medium)
25
+ }
26
+ .seed-reaction-button__count {
27
+ color: var(--seed-color-fg-neutral);
28
+ font-weight: var(--seed-font-weight-bold)
29
+ }
30
+ .seed-reaction-button__prefixIcon {
31
+ color: var(--seed-color-fg-neutral);
32
+ flex-shrink: 0
33
+ }
34
+ .seed-reaction-button__loadingIndicator {
35
+ position: absolute;
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ top: 0;
40
+ right: 0;
41
+ bottom: 0;
42
+ left: 0
43
+ }
44
+ .seed-reaction-button__root--size_xsmall {
45
+ height: var(--seed-dimension-x8);
46
+ border-radius: var(--seed-radius-full);
47
+ padding-left: var(--seed-dimension-x3);
48
+ padding-right: var(--seed-dimension-x3);
49
+ padding-top: var(--seed-dimension-x1_5);
50
+ padding-bottom: var(--seed-dimension-x1_5)
51
+ }
52
+ .seed-reaction-button__content--size_xsmall {
53
+ gap: var(--seed-dimension-x1)
54
+ }
55
+ .seed-reaction-button__label--size_xsmall {
56
+ font-size: var(--seed-font-size-t3);
57
+ line-height: var(--seed-line-height-t3)
58
+ }
59
+ .seed-reaction-button__count--size_xsmall {
60
+ font-size: var(--seed-font-size-t3);
61
+ line-height: var(--seed-line-height-t3)
62
+ }
63
+ .seed-reaction-button__prefixIcon--size_xsmall {
64
+ width: 18px;
65
+ height: 18px
66
+ }
67
+ .seed-reaction-button__root--size_small {
68
+ height: var(--seed-dimension-x9);
69
+ border-radius: var(--seed-radius-full);
70
+ padding-left: var(--seed-dimension-x3_5);
71
+ padding-right: var(--seed-dimension-x3_5);
72
+ padding-top: var(--seed-dimension-x2);
73
+ padding-bottom: var(--seed-dimension-x2)
74
+ }
75
+ .seed-reaction-button__content--size_small {
76
+ gap: var(--seed-dimension-x1)
77
+ }
78
+ .seed-reaction-button__label--size_small {
79
+ font-size: var(--seed-font-size-t3);
80
+ line-height: var(--seed-line-height-t3)
81
+ }
82
+ .seed-reaction-button__count--size_small {
83
+ font-size: var(--seed-font-size-t3);
84
+ line-height: var(--seed-line-height-t3)
85
+ }
86
+ .seed-reaction-button__prefixIcon--size_small {
87
+ width: 18px;
88
+ height: 18px
89
+ }
90
+ .seed-reaction-button__root--selected_true {
91
+ background: var(--seed-color-bg-transparent);
92
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-brand-weak);
93
+ --track-color: var(--seed-color-palette-carrot-200);
94
+ --range-color: var(--seed-color-fg-brand)
95
+ }
96
+ .seed-reaction-button__label--selected_true {
97
+ color: var(--seed-color-fg-brand)
98
+ }
99
+ .seed-reaction-button__count--selected_true {
100
+ color: var(--seed-color-fg-brand)
101
+ }
102
+ .seed-reaction-button__prefixIcon--selected_true {
103
+ color: var(--seed-color-fg-brand)
104
+ }
105
+ .seed-reaction-button__root--pressed_true {
106
+ background: var(--seed-color-bg-transparent-pressed)
107
+ }
108
+ .seed-reaction-button__root--disabled_true {
109
+ background: var(--seed-color-bg-disabled);
110
+ box-shadow: inset 0 0 0 0px var(--seed-color-stroke-neutral-muted)
111
+ }
112
+ .seed-reaction-button__label--disabled_true {
113
+ color: var(--seed-color-fg-disabled)
114
+ }
115
+ .seed-reaction-button__count--disabled_true {
116
+ color: var(--seed-color-fg-disabled)
117
+ }
118
+ .seed-reaction-button__prefixIcon--disabled_true {
119
+ color: var(--seed-color-fg-disabled)
120
+ }
121
+ .seed-reaction-button__root--loading_true {
122
+ background: var(--seed-color-bg-neutral-weak-pressed);
123
+ transition: box-shadow var(--seed-duration-color-transition) var(--seed-timing-function-easing), transform var(--seed-duration-pressed-scale) var(--seed-timing-function-pressed-scale)
124
+ }
125
+ .seed-reaction-button__content--loading_true {
126
+ opacity: 0
127
+ }
128
+ .seed-reaction-button__root--selected_true-pressed_true {
129
+ background: var(--seed-color-bg-transparent-pressed)
130
+ }
131
+ .seed-reaction-button__root--size_xsmall-pressed_true {
132
+ transform: scale(var(--seed-scale-s95))
133
+ }
134
+ .seed-reaction-button__root--size_small-pressed_true {
135
+ transform: scale(var(--seed-scale-s97))
136
+ }
137
+ .seed-reaction-button__root--selected_true-pressed_false-loading_false {
138
+ transition: box-shadow var(--seed-duration-color-transition) var(--seed-timing-function-easing), transform var(--seed-duration-pressed-scale) var(--seed-timing-function-pressed-scale)
139
+ }
140
+ .seed-reaction-button__root--selected_true-loading_true {
141
+ background: var(--seed-color-bg-transparent-pressed);
142
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-brand-weak);
143
+ --track-color: var(--seed-color-palette-carrot-200);
144
+ --range-color: var(--seed-color-fg-brand)
145
+ }
@@ -0,0 +1,40 @@
1
+ declare interface ReactionButtonVariant {
2
+ /**
3
+ * @default "small"
4
+ */
5
+ size: "xsmall" | "small";
6
+ /**
7
+ * @default false
8
+ */
9
+ selected: boolean;
10
+ /**
11
+ * @default false
12
+ */
13
+ pressed: boolean;
14
+ /**
15
+ * @default false
16
+ */
17
+ disabled: boolean;
18
+ /**
19
+ * @default false
20
+ */
21
+ loading: boolean;
22
+ }
23
+
24
+ declare type ReactionButtonVariantMap = {
25
+ [key in keyof ReactionButtonVariant]: Array<ReactionButtonVariant[key]>;
26
+ };
27
+
28
+ export declare type ReactionButtonVariantProps = Partial<ReactionButtonVariant>;
29
+
30
+ export declare type ReactionButtonSlotName = "root" | "content" | "label" | "count" | "prefixIcon" | "loadingIndicator";
31
+
32
+ export declare const reactionButtonVariantMap: ReactionButtonVariantMap;
33
+
34
+ export declare const reactionButton: ((
35
+ props?: ReactionButtonVariantProps,
36
+ ) => Record<ReactionButtonSlotName, string>) & {
37
+ splitVariantProps: <T extends ReactionButtonVariantProps>(
38
+ props: T,
39
+ ) => [ReactionButtonVariantProps, Omit<T, keyof ReactionButtonVariantProps>];
40
+ }
@@ -0,0 +1,101 @@
1
+ import './reaction-button.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const reactionButtonSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-reaction-button__root"
8
+ ],
9
+ [
10
+ "content",
11
+ "seed-reaction-button__content"
12
+ ],
13
+ [
14
+ "label",
15
+ "seed-reaction-button__label"
16
+ ],
17
+ [
18
+ "count",
19
+ "seed-reaction-button__count"
20
+ ],
21
+ [
22
+ "prefixIcon",
23
+ "seed-reaction-button__prefixIcon"
24
+ ],
25
+ [
26
+ "loadingIndicator",
27
+ "seed-reaction-button__loadingIndicator"
28
+ ]
29
+ ];
30
+
31
+ const defaultVariant = {
32
+ "size": "small",
33
+ "selected": false,
34
+ "pressed": false,
35
+ "disabled": false,
36
+ "loading": false
37
+ };
38
+
39
+ const compoundVariants = [
40
+ {
41
+ "selected": true,
42
+ "pressed": true
43
+ },
44
+ {
45
+ "size": "xsmall",
46
+ "pressed": true
47
+ },
48
+ {
49
+ "size": "small",
50
+ "pressed": true
51
+ },
52
+ {
53
+ "selected": true,
54
+ "pressed": false,
55
+ "loading": false
56
+ },
57
+ {
58
+ "selected": true,
59
+ "loading": true
60
+ }
61
+ ];
62
+
63
+ export const reactionButtonVariantMap = {
64
+ "size": [
65
+ "xsmall",
66
+ "small"
67
+ ],
68
+ "selected": [
69
+ true,
70
+ false
71
+ ],
72
+ "pressed": [
73
+ true,
74
+ false
75
+ ],
76
+ "disabled": [
77
+ true,
78
+ false
79
+ ],
80
+ "loading": [
81
+ true,
82
+ false
83
+ ]
84
+ };
85
+
86
+ export const reactionButtonVariantKeys = Object.keys(reactionButtonVariantMap);
87
+
88
+ export function reactionButton(props) {
89
+ return Object.fromEntries(
90
+ reactionButtonSlotNames.map(([slot, className]) => {
91
+ return [
92
+ slot,
93
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
94
+ ];
95
+ }),
96
+ );
97
+ }
98
+
99
+ Object.assign(reactionButton, { splitVariantProps: (props) => splitVariantProps(props, reactionButtonVariantMap) });
100
+
101
+ // @recipe(seed): reaction-button
@@ -36,12 +36,20 @@
36
36
  min-width: 86px;
37
37
  min-height: 34px;
38
38
  height: 100%;
39
+ border-radius: var(--seed-radius-full)
40
+ }
41
+ .seed-segmented-control__itemContent {
42
+ display: flex;
43
+ flex-direction: row;
44
+ align-items: center;
45
+ justify-content: center;
46
+ width: 100%;
47
+ height: 100%;
39
48
  gap: var(--seed-dimension-x1_5);
40
49
  padding-left: var(--seed-dimension-x6);
41
50
  padding-right: var(--seed-dimension-x6);
42
51
  padding-top: var(--seed-dimension-x1_5);
43
- padding-bottom: var(--seed-dimension-x1_5);
44
- border-radius: var(--seed-radius-full)
52
+ padding-bottom: var(--seed-dimension-x1_5)
45
53
  }
46
54
  .seed-segmented-control__itemBackground {
47
55
  position: absolute;
@@ -79,12 +87,18 @@
79
87
  .seed-segmented-control__label--disabled_true {
80
88
  color: var(--seed-color-fg-disabled)
81
89
  }
90
+ .seed-segmented-control__item--disabled_false:active .seed-segmented-control__itemBackground {
91
+ opacity: 1
92
+ }
82
93
  .seed-segmented-control__itemBackground--pressed_true {
83
94
  opacity: 1
84
95
  }
85
96
  .seed-segmented-control__indicator--hasSelection_false {
86
97
  opacity: 0
87
98
  }
99
+ .seed-segmented-control__itemBackground--disabled_true-pressed_true {
100
+ opacity: 0
101
+ }
88
102
  .seed-segmented-control__item--selected_true-disabled_true {
89
103
  background-color: var(--seed-color-bg-disabled);
90
104
  box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral-muted)
@@ -23,7 +23,7 @@ declare type SegmentedControlVariantMap = {
23
23
 
24
24
  export declare type SegmentedControlVariantProps = Partial<SegmentedControlVariant>;
25
25
 
26
- export declare type SegmentedControlSlotName = "root" | "indicator" | "item" | "itemBackground" | "label";
26
+ export declare type SegmentedControlSlotName = "root" | "indicator" | "item" | "itemContent" | "itemBackground" | "label";
27
27
 
28
28
  export declare const segmentedControlVariantMap: SegmentedControlVariantMap;
29
29
 
@@ -14,6 +14,10 @@ const segmentedControlSlotNames = [
14
14
  "item",
15
15
  "seed-segmented-control__item"
16
16
  ],
17
+ [
18
+ "itemContent",
19
+ "seed-segmented-control__itemContent"
20
+ ],
17
21
  [
18
22
  "itemBackground",
19
23
  "seed-segmented-control__itemBackground"
@@ -32,6 +36,10 @@ const defaultVariant = {
32
36
  };
33
37
 
34
38
  const compoundVariants = [
39
+ {
40
+ "disabled": true,
41
+ "pressed": true
42
+ },
35
43
  {
36
44
  "selected": true,
37
45
  "disabled": true
@@ -20,6 +20,15 @@
20
20
  overflow: hidden;
21
21
  transition: background-color var(--seed-duration-color-transition) var(--seed-timing-function-easing)
22
22
  }
23
+ .seed-select-box__scaleContent {
24
+ display: flex;
25
+ flex-direction: column;
26
+ align-items: stretch;
27
+ width: 100%;
28
+ height: 100%;
29
+ min-height: 0;
30
+ flex-grow: 1
31
+ }
23
32
  .seed-select-box__selectedStroke {
24
33
  position: absolute;
25
34
  top: 0;
@@ -133,6 +142,9 @@
133
142
  .seed-select-box__description--disabled_true {
134
143
  color: var(--seed-color-fg-disabled)
135
144
  }
145
+ .seed-select-box__root--disabled_false:active {
146
+ background-color: var(--seed-color-bg-transparent-pressed)
147
+ }
136
148
  .seed-select-box__footer--footerOpen_true {
137
149
  opacity: 1;
138
150
  transition: height 400ms var(--seed-timing-function-easing), opacity var(--seed-duration-d6) var(--seed-timing-function-easing)
@@ -27,7 +27,7 @@ declare type SelectBoxVariantMap = {
27
27
 
28
28
  export declare type SelectBoxVariantProps = Partial<SelectBoxVariant>;
29
29
 
30
- export declare type SelectBoxSlotName = "interactionRoot" | "root" | "selectedStroke" | "trigger" | "content" | "prefixIcon" | "body" | "label" | "description" | "footer" | "footerInner";
30
+ export declare type SelectBoxSlotName = "interactionRoot" | "root" | "scaleContent" | "selectedStroke" | "trigger" | "content" | "prefixIcon" | "body" | "label" | "description" | "footer" | "footerInner";
31
31
 
32
32
  export declare const selectBoxVariantMap: SelectBoxVariantMap;
33
33
 
@@ -10,6 +10,10 @@ const selectBoxSlotNames = [
10
10
  "root",
11
11
  "seed-select-box__root"
12
12
  ],
13
+ [
14
+ "scaleContent",
15
+ "seed-select-box__scaleContent"
16
+ ],
13
17
  [
14
18
  "selectedStroke",
15
19
  "seed-select-box__selectedStroke"
@@ -0,0 +1,2 @@
1
+ export declare const feedbackScaleDuration: 150;
2
+ export declare const feedbackScaleTimingFunction: "cubic-bezier(0, 0, 0.15, 1)";
@@ -0,0 +1,3 @@
1
+ // Generated from Rootage pressed-scale motion tokens. Do not edit directly.
2
+ export const feedbackScaleDuration = 150;
3
+ export const feedbackScaleTimingFunction = "cubic-bezier(0, 0, 0.15, 1)";