@seed-design/css 1.0.7 → 1.1.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 (64) hide show
  1. package/all.css +874 -512
  2. package/all.min.css +1 -1
  3. package/base.css +32 -0
  4. package/base.min.css +1 -1
  5. package/package.json +1 -1
  6. package/recipes/action-button.css +8 -1
  7. package/recipes/app-screen.css +16 -0
  8. package/recipes/app-screen.d.ts +4 -0
  9. package/recipes/app-screen.mjs +6 -1
  10. package/recipes/bottom-sheet-handle.css +24 -0
  11. package/recipes/bottom-sheet-handle.d.ts +21 -0
  12. package/recipes/bottom-sheet-handle.mjs +36 -0
  13. package/recipes/bottom-sheet.css +55 -32
  14. package/recipes/field-label.css +29 -0
  15. package/recipes/field-label.d.ts +24 -0
  16. package/recipes/field-label.mjs +47 -0
  17. package/recipes/field.css +63 -0
  18. package/recipes/field.d.ts +21 -0
  19. package/recipes/field.mjs +60 -0
  20. package/recipes/input-button.css +98 -0
  21. package/recipes/input-button.d.ts +21 -0
  22. package/recipes/input-button.mjs +64 -0
  23. package/recipes/page-banner.css +5 -4
  24. package/recipes/page-banner.d.ts +1 -1
  25. package/recipes/page-banner.mjs +6 -2
  26. package/recipes/slider-marker.css +42 -0
  27. package/recipes/slider-marker.d.ts +22 -0
  28. package/recipes/slider-marker.mjs +30 -0
  29. package/recipes/slider-tick.css +19 -0
  30. package/recipes/slider-tick.d.ts +22 -0
  31. package/recipes/slider-tick.mjs +29 -0
  32. package/recipes/slider.css +174 -0
  33. package/recipes/slider.d.ts +21 -0
  34. package/recipes/slider.mjs +68 -0
  35. package/recipes/text-input.css +156 -0
  36. package/recipes/text-input.d.ts +24 -0
  37. package/recipes/text-input.mjs +59 -0
  38. package/vars/component/bottom-sheet-handle.d.ts +24 -0
  39. package/vars/component/bottom-sheet-handle.mjs +24 -0
  40. package/vars/component/bottom-sheet.d.ts +2 -2
  41. package/vars/component/bottom-sheet.mjs +2 -2
  42. package/vars/component/field-label.d.ts +25 -0
  43. package/vars/component/field-label.mjs +25 -0
  44. package/vars/component/field.d.ts +72 -0
  45. package/vars/component/field.mjs +72 -0
  46. package/vars/component/index.d.ts +8 -1
  47. package/vars/component/index.mjs +8 -1
  48. package/vars/component/input-button.d.ts +78 -0
  49. package/vars/component/input-button.mjs +78 -0
  50. package/vars/component/page-banner.d.ts +1 -1
  51. package/vars/component/page-banner.mjs +1 -1
  52. package/vars/component/slider-thumb.d.ts +25 -0
  53. package/vars/component/slider-thumb.mjs +25 -0
  54. package/vars/component/slider-tick.d.ts +23 -0
  55. package/vars/component/slider-tick.mjs +23 -0
  56. package/vars/component/slider.d.ts +74 -0
  57. package/vars/component/slider.mjs +74 -0
  58. package/vars/component/text-input.d.ts +162 -0
  59. package/vars/component/text-input.mjs +162 -0
  60. package/recipes/text-field.css +0 -385
  61. package/recipes/text-field.d.ts +0 -24
  62. package/recipes/text-field.mjs +0 -104
  63. package/vars/component/text-field.d.ts +0 -294
  64. package/vars/component/text-field.mjs +0 -294
@@ -0,0 +1,63 @@
1
+ .seed-field__root {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ gap: var(--seed-dimension-x2);
6
+ }
7
+ .seed-field__header {
8
+ display: flex;
9
+ justify-content: space-between;
10
+ align-items: center;
11
+ padding-inline: var(--seed-dimension-x0_5);
12
+ gap: var(--seed-dimension-x2_5);
13
+ }
14
+ .seed-field__footer {
15
+ display: flex;
16
+ justify-content: space-between;
17
+ align-items: flex-start;
18
+ padding-inline: var(--seed-dimension-x0_5);
19
+ gap: var(--seed-dimension-x2);
20
+ }
21
+ .seed-field__description {
22
+ display: flex;
23
+ color: var(--seed-color-fg-neutral-subtle);
24
+ font-weight: var(--seed-font-weight-regular);
25
+ font-size: var(--seed-font-size-t4);
26
+ line-height: var(--seed-line-height-t4);
27
+ --seed-prefix-icon-size: var(--seed-dimension-x4);
28
+ --seed-prefix-icon-color: var(--seed-color-fg-neutral-subtle);
29
+ --seed-prefix-icon-margin-right: var(--seed-dimension-x1_5);
30
+ --seed-prefix-icon-margin-top: calc((var(--seed-line-height-t4) - var(--seed-dimension-x4)) / 2);
31
+ }
32
+ .seed-field__errorMessage {
33
+ display: flex;
34
+ color: var(--seed-color-fg-critical);
35
+ font-weight: var(--seed-font-weight-regular);
36
+ font-size: var(--seed-font-size-t4);
37
+ line-height: var(--seed-line-height-t4);
38
+ --seed-prefix-icon-size: var(--seed-dimension-x4);
39
+ --seed-prefix-icon-color: var(--seed-color-fg-critical);
40
+ --seed-prefix-icon-margin-right: var(--seed-dimension-x1_5);
41
+ --seed-prefix-icon-margin-top: calc((var(--seed-line-height-t4) - var(--seed-dimension-x4)) / 2);
42
+ }
43
+ .seed-field__characterCount {
44
+ color: var(--seed-color-fg-neutral);
45
+ font-weight: var(--seed-font-weight-regular);
46
+ font-size: var(--seed-font-size-t4);
47
+ line-height: var(--seed-line-height-t4);
48
+ }
49
+ .seed-field__characterCount[data-empty]:not(:is(:invalid, [data-invalid])) {
50
+ color: var(--seed-color-fg-neutral-subtle);
51
+ }
52
+ .seed-field__characterCount:is(:invalid, [data-invalid]) {
53
+ color: var(--seed-color-fg-critical);
54
+ }
55
+ .seed-field__maxCharacterCount {
56
+ color: var(--seed-color-fg-neutral-subtle);
57
+ font-weight: var(--seed-font-weight-regular);
58
+ font-size: var(--seed-font-size-t4);
59
+ line-height: var(--seed-line-height-t4);
60
+ }
61
+ .seed-field__maxCharacterCount:is(:invalid, [data-invalid]) {
62
+ color: var(--seed-color-fg-critical);
63
+ }
@@ -0,0 +1,21 @@
1
+ declare interface FieldVariant {
2
+
3
+ }
4
+
5
+ declare type FieldVariantMap = {
6
+ [key in keyof FieldVariant]: Array<FieldVariant[key]>;
7
+ };
8
+
9
+ export declare type FieldVariantProps = Partial<FieldVariant>;
10
+
11
+ export declare type FieldSlotName = "root" | "header" | "footer" | "description" | "errorMessage" | "characterCountArea" | "characterCount" | "maxCharacterCount";
12
+
13
+ export declare const fieldVariantMap: FieldVariantMap;
14
+
15
+ export declare const field: ((
16
+ props?: FieldVariantProps,
17
+ ) => Record<FieldSlotName, string>) & {
18
+ splitVariantProps: <T extends FieldVariantProps>(
19
+ props: T,
20
+ ) => [FieldVariantProps, Omit<T, keyof FieldVariantProps>];
21
+ }
@@ -0,0 +1,60 @@
1
+ import './field.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const fieldSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-field__root"
8
+ ],
9
+ [
10
+ "header",
11
+ "seed-field__header"
12
+ ],
13
+ [
14
+ "footer",
15
+ "seed-field__footer"
16
+ ],
17
+ [
18
+ "description",
19
+ "seed-field__description"
20
+ ],
21
+ [
22
+ "errorMessage",
23
+ "seed-field__errorMessage"
24
+ ],
25
+ [
26
+ "characterCountArea",
27
+ "seed-field__characterCountArea"
28
+ ],
29
+ [
30
+ "characterCount",
31
+ "seed-field__characterCount"
32
+ ],
33
+ [
34
+ "maxCharacterCount",
35
+ "seed-field__maxCharacterCount"
36
+ ]
37
+ ];
38
+
39
+ const defaultVariant = {};
40
+
41
+ const compoundVariants = [];
42
+
43
+ export const fieldVariantMap = {};
44
+
45
+ export const fieldVariantKeys = Object.keys(fieldVariantMap);
46
+
47
+ export function field(props) {
48
+ return Object.fromEntries(
49
+ fieldSlotNames.map(([slot, className]) => {
50
+ return [
51
+ slot,
52
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
53
+ ];
54
+ }),
55
+ );
56
+ }
57
+
58
+ Object.assign(field, { splitVariantProps: (props) => splitVariantProps(props, fieldVariantMap) });
59
+
60
+ // @recipe(seed): field
@@ -0,0 +1,98 @@
1
+ .seed-input-button__root {
2
+ display: flex;
3
+ width: 100%;
4
+ align-items: center;
5
+ box-sizing: border-box;
6
+ position: relative;
7
+ isolation: isolate;
8
+ height: var(--seed-dimension-x13);
9
+ gap: var(--seed-dimension-x2_5);
10
+ padding-inline: var(--seed-dimension-x4);
11
+ }
12
+ .seed-input-button__button {
13
+ position: absolute;
14
+ z-index: -1;
15
+ inset: 0;
16
+ cursor: pointer;
17
+ border: none;
18
+ border-radius: var(--seed-radius-r3);
19
+ background-color: transparent;
20
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral-weak);
21
+ transition: box-shadow var(--seed-duration-d3) var(--seed-timing-function-easing), background-color var(--seed-duration-d3) var(--seed-timing-function-easing);
22
+ }
23
+ .seed-input-button__button:is(:disabled, [disabled], [data-disabled]) {
24
+ cursor: not-allowed;
25
+ background-color: var(--seed-color-bg-disabled);
26
+ }
27
+ .seed-input-button__button:is(:active, [data-active]) {
28
+ background-color: var(--seed-color-bg-layer-default-pressed);
29
+ }
30
+ .seed-input-button__button:is(:focus, [data-focus]) {
31
+ outline: none;
32
+ }
33
+ .seed-input-button__button:is(:invalid, [data-invalid]) {
34
+ box-shadow: inset 0 0 0 2px var(--seed-color-stroke-critical-solid);
35
+ }
36
+ .seed-input-button__value {
37
+ font-size: var(--seed-font-size-t5);
38
+ line-height: var(--seed-line-height-t5);
39
+ font-weight: var(--seed-font-weight-regular);
40
+ color: var(--seed-color-fg-neutral);
41
+ overflow: hidden;
42
+ text-overflow: ellipsis;
43
+ white-space: nowrap;
44
+ flex-grow: 1;
45
+ pointer-events: none;
46
+ }
47
+ .seed-input-button__value:is(:disabled, [disabled], [data-disabled]) {
48
+ color: var(--seed-color-fg-disabled);
49
+ }
50
+ .seed-input-button__placeholder {
51
+ font-size: var(--seed-font-size-t5);
52
+ line-height: var(--seed-line-height-t5);
53
+ font-weight: var(--seed-font-weight-regular);
54
+ color: var(--seed-color-fg-placeholder);
55
+ overflow: hidden;
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ flex-grow: 1;
59
+ pointer-events: none;
60
+ }
61
+ .seed-input-button__placeholder:is(:disabled, [disabled], [data-disabled]) {
62
+ color: var(--seed-color-fg-disabled);
63
+ }
64
+ .seed-input-button__prefixText {
65
+ font-size: var(--seed-font-size-t5);
66
+ line-height: var(--seed-line-height-t5);
67
+ font-weight: var(--seed-font-weight-regular);
68
+ color: var(--seed-color-fg-neutral-muted);
69
+ pointer-events: none;
70
+ }
71
+ .seed-input-button__prefixIcon {
72
+ width: var(--seed-dimension-x5);
73
+ height: var(--seed-dimension-x5);
74
+ flex-shrink: 0;
75
+ color: var(--seed-color-fg-neutral-muted);
76
+ pointer-events: none;
77
+ }
78
+ .seed-input-button__suffixText {
79
+ font-size: var(--seed-font-size-t5);
80
+ line-height: var(--seed-line-height-t5);
81
+ font-weight: var(--seed-font-weight-regular);
82
+ color: var(--seed-color-fg-neutral-muted);
83
+ pointer-events: none;
84
+ }
85
+ .seed-input-button__suffixIcon {
86
+ width: var(--seed-dimension-x5);
87
+ height: var(--seed-dimension-x5);
88
+ flex-shrink: 0;
89
+ color: var(--seed-color-fg-neutral-muted);
90
+ pointer-events: none;
91
+ }
92
+ .seed-input-button__clearButton {
93
+ cursor: pointer;
94
+ border: none;
95
+ background-color: transparent;
96
+ --seed-icon-size: 22px;
97
+ --seed-icon-color: var(--seed-color-fg-neutral-subtle);
98
+ }
@@ -0,0 +1,21 @@
1
+ declare interface InputButtonVariant {
2
+
3
+ }
4
+
5
+ declare type InputButtonVariantMap = {
6
+ [key in keyof InputButtonVariant]: Array<InputButtonVariant[key]>;
7
+ };
8
+
9
+ export declare type InputButtonVariantProps = Partial<InputButtonVariant>;
10
+
11
+ export declare type InputButtonSlotName = "root" | "value" | "placeholder" | "button" | "prefixText" | "prefixIcon" | "suffixText" | "suffixIcon" | "clearButton";
12
+
13
+ export declare const inputButtonVariantMap: InputButtonVariantMap;
14
+
15
+ export declare const inputButton: ((
16
+ props?: InputButtonVariantProps,
17
+ ) => Record<InputButtonSlotName, string>) & {
18
+ splitVariantProps: <T extends InputButtonVariantProps>(
19
+ props: T,
20
+ ) => [InputButtonVariantProps, Omit<T, keyof InputButtonVariantProps>];
21
+ }
@@ -0,0 +1,64 @@
1
+ import './input-button.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const inputButtonSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-input-button__root"
8
+ ],
9
+ [
10
+ "value",
11
+ "seed-input-button__value"
12
+ ],
13
+ [
14
+ "placeholder",
15
+ "seed-input-button__placeholder"
16
+ ],
17
+ [
18
+ "button",
19
+ "seed-input-button__button"
20
+ ],
21
+ [
22
+ "prefixText",
23
+ "seed-input-button__prefixText"
24
+ ],
25
+ [
26
+ "prefixIcon",
27
+ "seed-input-button__prefixIcon"
28
+ ],
29
+ [
30
+ "suffixText",
31
+ "seed-input-button__suffixText"
32
+ ],
33
+ [
34
+ "suffixIcon",
35
+ "seed-input-button__suffixIcon"
36
+ ],
37
+ [
38
+ "clearButton",
39
+ "seed-input-button__clearButton"
40
+ ]
41
+ ];
42
+
43
+ const defaultVariant = {};
44
+
45
+ const compoundVariants = [];
46
+
47
+ export const inputButtonVariantMap = {};
48
+
49
+ export const inputButtonVariantKeys = Object.keys(inputButtonVariantMap);
50
+
51
+ export function inputButton(props) {
52
+ return Object.fromEntries(
53
+ inputButtonSlotNames.map(([slot, className]) => {
54
+ return [
55
+ slot,
56
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
57
+ ];
58
+ }),
59
+ );
60
+ }
61
+
62
+ Object.assign(inputButton, { splitVariantProps: (props) => splitVariantProps(props, inputButtonVariantMap) });
63
+
64
+ // @recipe(seed): input-button
@@ -22,10 +22,7 @@
22
22
  .seed-page-banner__root:is(button) {
23
23
  cursor: pointer;
24
24
  }
25
- .seed-page-banner__root .seed-box {
26
- line-height: var(--seed-line-height-t4);
27
- }
28
- .seed-page-banner__textContent {
25
+ .seed-page-banner__content {
29
26
  display: flex;
30
27
  flex-wrap: wrap;
31
28
  align-items: center;
@@ -33,6 +30,10 @@
33
30
  flex-grow: 1;
34
31
  gap: var(--seed-dimension-x1_5);
35
32
  }
33
+ .seed-page-banner__body {
34
+ line-height: var(--seed-line-height-t4);
35
+ flex-grow: 1;
36
+ }
36
37
  .seed-page-banner__title {
37
38
  flex-shrink: 0;
38
39
  font-size: var(--seed-font-size-t4);
@@ -15,7 +15,7 @@ declare type PageBannerVariantMap = {
15
15
 
16
16
  export declare type PageBannerVariantProps = Partial<PageBannerVariant>;
17
17
 
18
- export declare type PageBannerSlotName = "root" | "textContent" | "title" | "description" | "button" | "closeButton";
18
+ export declare type PageBannerSlotName = "root" | "content" | "body" | "title" | "description" | "button" | "closeButton";
19
19
 
20
20
  export declare const pageBannerVariantMap: PageBannerVariantMap;
21
21
 
@@ -7,8 +7,12 @@ const pageBannerSlotNames = [
7
7
  "seed-page-banner__root"
8
8
  ],
9
9
  [
10
- "textContent",
11
- "seed-page-banner__textContent"
10
+ "content",
11
+ "seed-page-banner__content"
12
+ ],
13
+ [
14
+ "body",
15
+ "seed-page-banner__body"
12
16
  ],
13
17
  [
14
18
  "title",
@@ -0,0 +1,42 @@
1
+ .seed-slider-marker {
2
+ position: absolute;
3
+ top: 0;
4
+ bottom: 0;
5
+ width: max-content;
6
+ color: var(--seed-color-fg-neutral-muted);
7
+ font-weight: var(--seed-font-weight-regular);
8
+ font-size: var(--seed-font-size-t3);
9
+ line-height: var(--seed-line-height-t3);
10
+ }
11
+ .seed-slider-marker[data-dir='ltr'] {
12
+ left: calc(var(--marker-position) * 1% + var(--marker-offset));
13
+ }
14
+ .seed-slider-marker[data-dir='rtl'] {
15
+ right: calc(var(--marker-position) * 1% + var(--marker-offset));
16
+ }
17
+ .seed-slider-marker:is(:disabled, [disabled], [data-disabled]) {
18
+ color: var(--seed-color-fg-disabled);
19
+ }
20
+ .seed-slider-marker--align_start[data-dir='ltr'] {
21
+ text-align: left;
22
+ }
23
+ .seed-slider-marker--align_start[data-dir='rtl'] {
24
+ text-align: right;
25
+ }
26
+ .seed-slider-marker--align_center {
27
+ text-align: center;
28
+ }
29
+ .seed-slider-marker--align_center[data-dir='ltr'] {
30
+ transform: translateX(-50%);
31
+ }
32
+ .seed-slider-marker--align_center[data-dir='rtl'] {
33
+ transform: translateX(50%);
34
+ }
35
+ .seed-slider-marker--align_end[data-dir='ltr'] {
36
+ text-align: right;
37
+ transform: translateX(-100%);
38
+ }
39
+ .seed-slider-marker--align_end[data-dir='rtl'] {
40
+ text-align: left;
41
+ transform: translateX(100%);
42
+ }
@@ -0,0 +1,22 @@
1
+ declare interface SliderMarkerVariant {
2
+ /**
3
+ * @default "center"
4
+ */
5
+ align: "start" | "center" | "end";
6
+ }
7
+
8
+ declare type SliderMarkerVariantMap = {
9
+ [key in keyof SliderMarkerVariant]: Array<SliderMarkerVariant[key]>;
10
+ };
11
+
12
+ export declare type SliderMarkerVariantProps = Partial<SliderMarkerVariant>;
13
+
14
+ export declare const sliderMarkerVariantMap: SliderMarkerVariantMap;
15
+
16
+ export declare const sliderMarker: ((
17
+ props?: SliderMarkerVariantProps,
18
+ ) => string) & {
19
+ splitVariantProps: <T extends SliderMarkerVariantProps>(
20
+ props: T,
21
+ ) => [SliderMarkerVariantProps, Omit<T, keyof SliderMarkerVariantProps>];
22
+ }
@@ -0,0 +1,30 @@
1
+ import './slider-marker.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const defaultVariant = {
5
+ "align": "center"
6
+ };
7
+
8
+ const compoundVariants = [];
9
+
10
+ export const sliderMarkerVariantMap = {
11
+ "align": [
12
+ "start",
13
+ "center",
14
+ "end"
15
+ ]
16
+ };
17
+
18
+ export const sliderMarkerVariantKeys = Object.keys(sliderMarkerVariantMap);
19
+
20
+ export function sliderMarker(props) {
21
+ return createClassName(
22
+ "seed-slider-marker",
23
+ mergeVariants(defaultVariant, props),
24
+ compoundVariants,
25
+ );
26
+ }
27
+
28
+ Object.assign(sliderMarker, { splitVariantProps: (props) => splitVariantProps(props, sliderMarkerVariantMap) });
29
+
30
+ // @recipe(seed): slider-marker
@@ -0,0 +1,19 @@
1
+ .seed-slider-tick {
2
+ position: absolute;
3
+ top: 50%;
4
+ height: 100%;
5
+ background-color: var(--seed-color-fg-neutral-inverted);
6
+ transform: translate(-50%, -50%);
7
+ }
8
+ .seed-slider-tick[data-dir='ltr'] {
9
+ left: calc(var(--tick-position) * 1% + var(--tick-offset));
10
+ }
11
+ .seed-slider-tick[data-dir='rtl'] {
12
+ right: calc(var(--tick-position) * 1% + var(--tick-offset));
13
+ }
14
+ .seed-slider-tick--weight_thin {
15
+ width: 1px;
16
+ }
17
+ .seed-slider-tick--weight_thick {
18
+ width: var(--seed-dimension-x1);
19
+ }
@@ -0,0 +1,22 @@
1
+ declare interface SliderTickVariant {
2
+ /**
3
+ * @default "thin"
4
+ */
5
+ weight: "thin" | "thick";
6
+ }
7
+
8
+ declare type SliderTickVariantMap = {
9
+ [key in keyof SliderTickVariant]: Array<SliderTickVariant[key]>;
10
+ };
11
+
12
+ export declare type SliderTickVariantProps = Partial<SliderTickVariant>;
13
+
14
+ export declare const sliderTickVariantMap: SliderTickVariantMap;
15
+
16
+ export declare const sliderTick: ((
17
+ props?: SliderTickVariantProps,
18
+ ) => string) & {
19
+ splitVariantProps: <T extends SliderTickVariantProps>(
20
+ props: T,
21
+ ) => [SliderTickVariantProps, Omit<T, keyof SliderTickVariantProps>];
22
+ }
@@ -0,0 +1,29 @@
1
+ import './slider-tick.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const defaultVariant = {
5
+ "weight": "thin"
6
+ };
7
+
8
+ const compoundVariants = [];
9
+
10
+ export const sliderTickVariantMap = {
11
+ "weight": [
12
+ "thin",
13
+ "thick"
14
+ ]
15
+ };
16
+
17
+ export const sliderTickVariantKeys = Object.keys(sliderTickVariantMap);
18
+
19
+ export function sliderTick(props) {
20
+ return createClassName(
21
+ "seed-slider-tick",
22
+ mergeVariants(defaultVariant, props),
23
+ compoundVariants,
24
+ );
25
+ }
26
+
27
+ Object.assign(sliderTick, { splitVariantProps: (props) => splitVariantProps(props, sliderTickVariantMap) });
28
+
29
+ // @recipe(seed): slider-tick