@seed-design/css 0.1.2 → 0.1.4

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.
@@ -0,0 +1,190 @@
1
+ .seed-chip__root {
2
+ display: inline-flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+ box-sizing: border-box;
6
+ cursor: pointer;
7
+ border: none;
8
+ text-transform: none;
9
+ text-align: start;
10
+ white-space: nowrap;
11
+ -webkit-font-smoothing: antialiased;
12
+ -moz-osx-font-smoothing: grayscale;
13
+ flex-shrink: 0;
14
+ line-height: 1;
15
+ border-radius: var(--seed-radius-full);
16
+ transition-duration: var(--seed-duration-d4);
17
+ transition-timing-function: var(--seed-timing-function-easing);
18
+ transition-property: background-color, color, border-color, box-shadow;
19
+ }
20
+ .seed-chip__root:is(:focus, [data-focus]) {
21
+ outline: none;
22
+ }
23
+ .seed-chip__root:is(:disabled, [disabled], [data-disabled]) {
24
+ cursor: not-allowed;
25
+ }
26
+ .seed-chip__root {
27
+ --seed-icon-color: inherit;
28
+ }
29
+ .seed-chip__label {
30
+ display: inline-flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ font-weight: var(--seed-font-weight-medium);
34
+ padding-inline: var(--seed-dimension-x1_5);
35
+ color: inherit;
36
+ }
37
+ .seed-chip__prefixIcon {
38
+ display: inline-flex;
39
+ align-items: center;
40
+ flex-shrink: 0;
41
+ padding-left: var(--seed-dimension-x1_5);
42
+ --seed-icon-color: inherit;
43
+ }
44
+ .seed-chip__prefixAvatar {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ flex-shrink: 0;
48
+ }
49
+ .seed-chip__suffixIcon {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ flex-shrink: 0;
53
+ padding-right: var(--seed-dimension-x1_5);
54
+ --seed-icon-color: inherit;
55
+ }
56
+ .seed-chip__root--variant_solid {
57
+ background: var(--seed-color-bg-neutral-weak);
58
+ color: var(--seed-color-fg-neutral);
59
+ }
60
+ .seed-chip__root--variant_solid:is(:checked, [data-checked]) {
61
+ box-shadow: none;
62
+ background: var(--seed-color-bg-neutral-inverted);
63
+ color: var(--seed-color-fg-neutral-inverted);
64
+ --seed-icon-color: var(--seed-color-fg-neutral-inverted);
65
+ }
66
+ .seed-chip__root--variant_solid:is(:active, [data-active]):not(:is(:disabled, [disabled], [data-disabled])) {
67
+ background: var(--seed-color-bg-neutral-weak-pressed);
68
+ color: var(--seed-color-fg-neutral);
69
+ --seed-icon-color: var(--seed-color-fg-neutral);
70
+ }
71
+ .seed-chip__root--variant_solid:is(:checked, [data-checked]):is(:active, [data-active]):not(:is(:disabled, [disabled], [data-disabled])) {
72
+ background: var(--seed-color-bg-neutral-inverted-pressed);
73
+ color: var(--seed-color-fg-neutral-inverted);
74
+ --seed-icon-color: var(--seed-color-fg-neutral-inverted);
75
+ }
76
+ .seed-chip__root--variant_solid:is(:disabled, [disabled], [data-disabled]) {
77
+ opacity: 0.5;
78
+ }
79
+ .seed-chip__root--variant_solid {
80
+ --seed-icon-color: var(--seed-color-fg-neutral);
81
+ }
82
+ .seed-chip__root--variant_outlineStrong {
83
+ background: var(--seed-color-bg-layer-default);
84
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral);
85
+ color: var(--seed-color-fg-neutral);
86
+ }
87
+ .seed-chip__root--variant_outlineStrong:is(:active, [data-active]):not(:is(:disabled, [disabled], [data-disabled])) {
88
+ background: var(--seed-color-bg-layer-default-pressed);
89
+ color: var(--seed-color-fg-neutral);
90
+ --seed-icon-color: var(--seed-color-fg-neutral);
91
+ }
92
+ .seed-chip__root--variant_outlineStrong:is(:checked, [data-checked]) {
93
+ background: var(--seed-color-bg-neutral-inverted);
94
+ color: var(--seed-color-fg-neutral-inverted);
95
+ --seed-icon-color: var(--seed-color-fg-neutral-inverted);
96
+ }
97
+ .seed-chip__root--variant_outlineStrong:is(:checked, [data-checked]):is(:active, [data-active]):not(:is(:disabled, [disabled], [data-disabled])) {
98
+ background: var(--seed-color-bg-neutral-inverted-pressed);
99
+ color: var(--seed-color-fg-neutral-inverted);
100
+ --seed-icon-color: var(--seed-color-fg-neutral-inverted);
101
+ }
102
+ .seed-chip__root--variant_outlineStrong:is(:disabled, [disabled], [data-disabled]) {
103
+ opacity: 0.5;
104
+ }
105
+ .seed-chip__root--variant_outlineStrong {
106
+ --seed-icon-color: var(--seed-color-fg-neutral);
107
+ }
108
+ .seed-chip__root--variant_outlineWeak {
109
+ background: var(--seed-color-bg-layer-default);
110
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral);
111
+ color: var(--seed-color-fg-neutral);
112
+ }
113
+ .seed-chip__root--variant_outlineWeak:is(:active, [data-active]):not(:is(:disabled, [disabled], [data-disabled])) {
114
+ background: var(--seed-color-bg-layer-default-pressed);
115
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral);
116
+ color: var(--seed-color-fg-neutral);
117
+ --seed-icon-color: var(--seed-color-fg-neutral);
118
+ }
119
+ .seed-chip__root--variant_outlineWeak:is(:checked, [data-checked]) {
120
+ background: var(--seed-color-bg-neutral-weak);
121
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-field-focused);
122
+ color: var(--seed-color-fg-neutral);
123
+ --seed-icon-color: var(--seed-color-fg-neutral);
124
+ }
125
+ .seed-chip__root--variant_outlineWeak:is(:checked, [data-checked]):is(:active, [data-active]):not(:is(:disabled, [disabled], [data-disabled])) {
126
+ background: var(--seed-color-bg-neutral-weak-pressed);
127
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-field-focused);
128
+ color: var(--seed-color-fg-neutral);
129
+ --seed-icon-color: var(--seed-color-fg-neutral);
130
+ }
131
+ .seed-chip__root--variant_outlineWeak:is(:disabled, [disabled], [data-disabled]) {
132
+ opacity: 0.5;
133
+ }
134
+ .seed-chip__root--variant_outlineWeak {
135
+ --seed-icon-color: var(--seed-color-fg-neutral);
136
+ }
137
+ .seed-chip__root--size_large {
138
+ height: 40px;
139
+ padding-inline: var(--seed-dimension-x2_5);
140
+ --seed-icon-size: var(--seed-dimension-x4);
141
+ }
142
+ .seed-chip__label--size_large {
143
+ font-size: var(--seed-font-size-t4);
144
+ line-height: var(--seed-line-height-t4);
145
+ }
146
+ .seed-chip__prefixIcon--size_large {
147
+ --seed-icon-size: var(--seed-dimension-x4);
148
+ }
149
+ .seed-chip__suffixIcon--size_large {
150
+ --seed-icon-size: var(--seed-dimension-x4);
151
+ }
152
+ .seed-chip__root--size_medium {
153
+ height: 36px;
154
+ padding-inline: var(--seed-dimension-x2);
155
+ --seed-icon-size: var(--seed-dimension-x4);
156
+ }
157
+ .seed-chip__label--size_medium {
158
+ font-size: var(--seed-font-size-t4);
159
+ line-height: var(--seed-line-height-t4);
160
+ }
161
+ .seed-chip__prefixIcon--size_medium {
162
+ --seed-icon-size: var(--seed-dimension-x4);
163
+ }
164
+ .seed-chip__suffixIcon--size_medium {
165
+ --seed-icon-size: var(--seed-dimension-x3_5);
166
+ }
167
+ .seed-chip__root--size_small {
168
+ height: 32px;
169
+ padding-inline: var(--seed-dimension-x1_5);
170
+ --seed-icon-size: var(--seed-dimension-x3_5);
171
+ }
172
+ .seed-chip__label--size_small {
173
+ font-size: var(--seed-font-size-t4);
174
+ line-height: var(--seed-line-height-t4);
175
+ }
176
+ .seed-chip__prefixIcon--size_small {
177
+ --seed-icon-size: var(--seed-dimension-x3_5);
178
+ }
179
+ .seed-chip__suffixIcon--size_small {
180
+ --seed-icon-size: var(--seed-dimension-x3_5);
181
+ }
182
+ .seed-chip__root--size_small-layout_iconOnly {
183
+ min-width: var(--seed-dimension-x8);
184
+ }
185
+ .seed-chip__root--size_medium-layout_iconOnly {
186
+ min-width: var(--seed-dimension-x9);
187
+ }
188
+ .seed-chip__root--size_large-layout_iconOnly {
189
+ min-width: var(--seed-dimension-x10);
190
+ }
@@ -0,0 +1,32 @@
1
+ declare interface ChipVariant {
2
+ /**
3
+ * @default solid
4
+ */
5
+ variant: "solid" | "outlineStrong" | "outlineWeak";
6
+ /**
7
+ * @default medium
8
+ */
9
+ size: "large" | "medium" | "small";
10
+ /**
11
+ * @default withText
12
+ */
13
+ layout: "iconOnly" | "withText";
14
+ }
15
+
16
+ declare type ChipVariantMap = {
17
+ [key in keyof ChipVariant]: Array<ChipVariant[key]>;
18
+ };
19
+
20
+ export declare type ChipVariantProps = Partial<ChipVariant>;
21
+
22
+ export declare type ChipSlotName = "root" | "label" | "prefixIcon" | "suffixIcon" | "prefixAvatar";
23
+
24
+ export declare const chipVariantMap: ChipVariantMap;
25
+
26
+ export declare const chip: ((
27
+ props?: ChipVariantProps,
28
+ ) => Record<ChipSlotName, string>) & {
29
+ splitVariantProps: <T extends ChipVariantProps>(
30
+ props: T,
31
+ ) => [ChipVariantProps, Omit<T, keyof ChipVariantProps>];
32
+ }
@@ -0,0 +1,80 @@
1
+ import './chip.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const chipSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-chip__root"
8
+ ],
9
+ [
10
+ "label",
11
+ "seed-chip__label"
12
+ ],
13
+ [
14
+ "prefixIcon",
15
+ "seed-chip__prefixIcon"
16
+ ],
17
+ [
18
+ "suffixIcon",
19
+ "seed-chip__suffixIcon"
20
+ ],
21
+ [
22
+ "prefixAvatar",
23
+ "seed-chip__prefixAvatar"
24
+ ]
25
+ ];
26
+
27
+ const defaultVariant = {
28
+ "variant": "solid",
29
+ "size": "medium",
30
+ "layout": "withText"
31
+ };
32
+
33
+ const compoundVariants = [
34
+ {
35
+ "size": "small",
36
+ "layout": "iconOnly"
37
+ },
38
+ {
39
+ "size": "medium",
40
+ "layout": "iconOnly"
41
+ },
42
+ {
43
+ "size": "large",
44
+ "layout": "iconOnly"
45
+ }
46
+ ];
47
+
48
+ export const chipVariantMap = {
49
+ "variant": [
50
+ "solid",
51
+ "outlineStrong",
52
+ "outlineWeak"
53
+ ],
54
+ "size": [
55
+ "large",
56
+ "medium",
57
+ "small"
58
+ ],
59
+ "layout": [
60
+ "iconOnly",
61
+ "withText"
62
+ ]
63
+ };
64
+
65
+ export const chipVariantKeys = Object.keys(chipVariantMap);
66
+
67
+ export function chip(props) {
68
+ return Object.fromEntries(
69
+ chipSlotNames.map(([slot, className]) => {
70
+ return [
71
+ slot,
72
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
73
+ ];
74
+ }),
75
+ );
76
+ }
77
+
78
+ Object.assign(chip, { splitVariantProps: (props) => splitVariantProps(props, chipVariantMap) });
79
+
80
+ // @recipe(seed): chip
package/theming/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  const { DefaultColorModeValue, isValidColorMode } = require("./mode.cjs");
2
2
 
3
- function generateThemingScript({ mode = DefaultColorModeValue }) {
3
+ function generateThemingScript({ mode = DefaultColorModeValue, fontScaling = false }) {
4
4
  if (!isValidColorMode(mode)) {
5
5
  throw new Error(`Invalid color mode: ${mode}`);
6
6
  }
@@ -41,6 +41,12 @@ function generateThemingScript({ mode = DefaultColorModeValue }) {
41
41
  document.documentElement.dataset.seedPlatform = 'ios';
42
42
  }
43
43
  } catch (e) {}
44
+
45
+ try {
46
+ if (${fontScaling} && document.documentElement.dataset.seedPlatform === 'ios') {
47
+ document.documentElement.dataset.seedFontScaling = 'enabled';
48
+ }
49
+ } catch (e) {}
44
50
  })(window, document, '${mode}');
45
51
  `;
46
52
  }
@@ -2,6 +2,8 @@ import type { ColorMode } from "./mode";
2
2
  export type { ColorMode };
3
3
  export declare const generateThemingScript: ({
4
4
  mode,
5
+ fontScaling,
5
6
  }: {
6
7
  mode?: ColorMode;
8
+ fontScaling?: boolean;
7
9
  }) => string;
package/theming/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { DefaultColorModeValue, isValidColorMode } from "./mode.mjs";
2
2
 
3
- export const generateThemingScript = ({ mode = DefaultColorModeValue }) => {
3
+ export const generateThemingScript = ({ mode = DefaultColorModeValue, fontScaling = false }) => {
4
4
  if (!isValidColorMode(mode)) {
5
5
  throw new Error(`Invalid color mode: ${mode}`);
6
6
  }
@@ -41,6 +41,12 @@ export const generateThemingScript = ({ mode = DefaultColorModeValue }) => {
41
41
  document.documentElement.dataset.seedPlatform = 'ios';
42
42
  }
43
43
  } catch (e) {}
44
+
45
+ try {
46
+ if (${fontScaling} && document.documentElement.dataset.seedPlatform === 'ios') {
47
+ document.documentElement.dataset.seedFontScaling = 'enabled';
48
+ }
49
+ } catch (e) {}
44
50
  })(window, document, '${mode}');
45
51
  `;
46
52
  };