ingred-ui 25.13.3 → 26.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.
package/bin/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # ingred-ui-codemod
2
+
3
+ INGRED UI のメジャーバージョンアップに伴う破壊的変更を、利用側プロジェクトのコードに自動適用するための CLI ツールです。
4
+
5
+ ## インストール不要
6
+
7
+ `npx` で直接実行できます(`ingred-ui` がインストールされていれば利用可能)。
8
+
9
+ ```bash
10
+ npx ingred-ui-codemod <codemod名> <対象ディレクトリ> [オプション]
11
+ ```
12
+
13
+ ## 利用可能な codemod
14
+
15
+ ### `palette-v2`
16
+
17
+ カラーパレット v2 への移行を自動化します。`.ts` / `.tsx` ファイルを対象に、旧パレット参照を新しい命名体系に一括置換します。
18
+
19
+ **実行例:**
20
+
21
+ ```bash
22
+ # まず dry-run で変更箇所を確認
23
+ npx ingred-ui-codemod palette-v2 ./src --dry-run
24
+
25
+ # 問題なければ実行
26
+ npx ingred-ui-codemod palette-v2 ./src
27
+ ```
28
+
29
+ **主な置換内容:**
30
+
31
+ | 旧 | 新 |
32
+ | -------------------------- | --------------------------- |
33
+ | `palette.gray.*` | `palette.neutral.*` |
34
+ | `palette.*.main` | `palette.*.base` |
35
+ | `palette.gray.light` | `palette.neutral.softLight` |
36
+ | `palette.gray.dark` | `palette.neutral.base` |
37
+ | `palette.gray.deepDark` | `palette.neutral.dark` |
38
+ | `palette.primary.light` | `palette.primary.softLight` |
39
+ | `palette.primary.deepDark` | `palette.primary.darker` |
40
+ | `palette.success.light` | `palette.success.lighter` |
41
+ | `palette.danger.light` | `palette.danger.lighter` |
42
+ | `palette.warning.deepDark` | `palette.warning.ultraDark` |
43
+ | `colors.basic` | `colors.gray` |
44
+ | `color="gray"` | `color="neutral"` |
45
+
46
+ **手動対応が必要なもの:**
47
+
48
+ 以下のパターンは自動置換せず、警告のみ表示します。
49
+
50
+ - `primaryPale` — 廃止。`palette.primary` の適切なスロットに置き換えてください。
51
+ - `basicDark` — 廃止。`color="neutral"` に置き換えてください。
52
+ - `colors.blue[40]` — 廃止。`colors.blue[50]` に置き換えてください。
53
+
54
+ ## オプション
55
+
56
+ | オプション | 説明 |
57
+ | ----------- | ------------------------------------------ |
58
+ | `--dry-run` | ファイルを変更せず、変更箇所のみ表示します |
59
+ | `--help` | ヘルプを表示します |
60
+
61
+ ## 対象ファイル
62
+
63
+ - `.ts` / `.tsx` ファイルのみ
64
+ - `node_modules`、`dist`、`build` ディレクトリは自動的に除外されます
65
+
66
+ ## 実行後の確認
67
+
68
+ 1. TypeScript のビルドを実行して型エラーがないか確認
69
+ 2. 見た目に変化がないか Storybook や画面で確認
@@ -0,0 +1,315 @@
1
+ import { readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
2
+ import { join, relative } from "node:path";
3
+
4
+ // ----------------------------------------------------------
5
+ // ファイル探索
6
+ // ----------------------------------------------------------
7
+
8
+ const EXTENSIONS = new Set([".ts", ".tsx"]);
9
+ const EXCLUDE_DIRS = new Set(["node_modules", "dist", "build"]);
10
+
11
+ function findFiles(dir) {
12
+ const results = [];
13
+
14
+ function walk(current) {
15
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
16
+ if (entry.isDirectory()) {
17
+ if (!EXCLUDE_DIRS.has(entry.name)) {
18
+ walk(join(current, entry.name));
19
+ }
20
+ } else if (entry.isFile()) {
21
+ const name = entry.name;
22
+ const dotIdx = name.lastIndexOf(".");
23
+ if (dotIdx !== -1 && EXTENSIONS.has(name.slice(dotIdx))) {
24
+ results.push(join(current, name));
25
+ }
26
+ }
27
+ }
28
+ }
29
+
30
+ walk(dir);
31
+ return results;
32
+ }
33
+
34
+ // ----------------------------------------------------------
35
+ // 置換ルール(順序が重要: 特殊 → 汎用)
36
+ // ----------------------------------------------------------
37
+
38
+ const STEPS = [
39
+ {
40
+ label: "[1/6] palette.gray → palette.neutral(段名変更含む)",
41
+ replacements: [
42
+ {
43
+ pattern: /palette\.gray\.deepDark/g,
44
+ replacement: "palette.neutral.dark",
45
+ description: "gray.deepDark → neutral.dark",
46
+ },
47
+ {
48
+ pattern: /palette\.gray\.dark/g,
49
+ replacement: "palette.neutral.base",
50
+ description: "gray.dark → neutral.base",
51
+ },
52
+ {
53
+ pattern: /palette\.gray\.main/g,
54
+ replacement: "palette.neutral.lighter",
55
+ description: "gray.main → neutral.lighter",
56
+ },
57
+ {
58
+ pattern: /palette\.gray\.light/g,
59
+ replacement: "palette.neutral.softLight",
60
+ description: "gray.light → neutral.softLight",
61
+ },
62
+ {
63
+ pattern: /palette\.gray\./g,
64
+ replacement: "palette.neutral.",
65
+ description: "gray.* → neutral.*(残りの段名はそのまま)",
66
+ },
67
+ {
68
+ pattern: /palette\.gray(?![.\w])/g,
69
+ replacement: "palette.neutral",
70
+ description: "palette.gray → palette.neutral(プロパティアクセスなし)",
71
+ },
72
+ ],
73
+ },
74
+ {
75
+ label: "[2/6] colors.basic → colors.gray",
76
+ replacements: [
77
+ {
78
+ pattern: /colors\.basic/g,
79
+ replacement: "colors.gray",
80
+ description: "colors.basic → colors.gray",
81
+ },
82
+ ],
83
+ },
84
+ {
85
+ label: "[3/6] palette.*.main → palette.*.base",
86
+ replacements: [
87
+ {
88
+ pattern: /palette\.primary\.main/g,
89
+ replacement: "palette.primary.base",
90
+ description: "primary.main → primary.base",
91
+ },
92
+ {
93
+ pattern: /palette\.success\.main/g,
94
+ replacement: "palette.success.base",
95
+ description: "success.main → success.base",
96
+ },
97
+ {
98
+ pattern: /palette\.warning\.main/g,
99
+ replacement: "palette.warning.base",
100
+ description: "warning.main → warning.base",
101
+ },
102
+ {
103
+ pattern: /palette\.danger\.main/g,
104
+ replacement: "palette.danger.base",
105
+ description: "danger.main → danger.base",
106
+ },
107
+ {
108
+ pattern: /palette\.neutral\.main/g,
109
+ replacement: "palette.neutral.base",
110
+ description: "neutral.main → neutral.base",
111
+ },
112
+ ],
113
+ },
114
+ {
115
+ label: "[4/6] 段名の修正(旧色値を維持するための付け替え)",
116
+ replacements: [
117
+ {
118
+ pattern: /palette\.primary\.light/g,
119
+ replacement: "palette.primary.softLight",
120
+ description: "primary.light → primary.softLight",
121
+ },
122
+ {
123
+ pattern: /palette\.primary\.deepDark/g,
124
+ replacement: "palette.primary.darker",
125
+ description: "primary.deepDark → primary.darker",
126
+ },
127
+ {
128
+ pattern: /palette\.success\.light/g,
129
+ replacement: "palette.success.lighter",
130
+ description: "success.light → success.lighter",
131
+ },
132
+ {
133
+ pattern: /palette\.success\.deepDark/g,
134
+ replacement: "palette.success.darker",
135
+ description: "success.deepDark → success.darker",
136
+ },
137
+ {
138
+ pattern: /palette\.warning\.deepDark/g,
139
+ replacement: "palette.warning.ultraDark",
140
+ description: "warning.deepDark → warning.ultraDark",
141
+ },
142
+ {
143
+ pattern: /palette\.danger\.light/g,
144
+ replacement: "palette.danger.lighter",
145
+ description: "danger.light → danger.lighter",
146
+ },
147
+ {
148
+ pattern: /palette\.danger\.deepDark/g,
149
+ replacement: "palette.danger.darker",
150
+ description: "danger.deepDark → danger.darker",
151
+ },
152
+ ],
153
+ },
154
+ {
155
+ label: "[5/6] Button color prop",
156
+ replacements: [
157
+ {
158
+ pattern: /color="gray"/g,
159
+ replacement: 'color="neutral"',
160
+ description: 'color="gray" → color="neutral"',
161
+ },
162
+ {
163
+ pattern: /color='gray'/g,
164
+ replacement: "color='neutral'",
165
+ description: "color='gray' → color='neutral'",
166
+ },
167
+ ],
168
+ },
169
+ ];
170
+
171
+ const WARNING_PATTERNS = [
172
+ {
173
+ pattern: /primaryPale/,
174
+ description:
175
+ "primaryPale は廃止されました。palette.primary の適切なスロットに置き換えてください。",
176
+ },
177
+ {
178
+ pattern: /basicDark/,
179
+ description:
180
+ "basicDark は廃止されました。color=\"neutral\" に置き換えてください。",
181
+ },
182
+ {
183
+ pattern: /blue\[40\]/,
184
+ description:
185
+ "colors.blue[40] は廃止されました。colors.blue[50] に置き換えてください。",
186
+ },
187
+ ];
188
+
189
+ // ----------------------------------------------------------
190
+ // メイン処理
191
+ // ----------------------------------------------------------
192
+
193
+ export async function run(targetDir, options = {}) {
194
+ const { dryRun = false } = options;
195
+
196
+ console.log("");
197
+ console.log("==========================================");
198
+ console.log(" INGRED UI パレット v2 移行");
199
+ console.log("==========================================");
200
+ console.log("");
201
+ console.log(`対象: ${targetDir}`);
202
+ if (dryRun) {
203
+ console.log("モード: dry-run(ファイルを変更しません)");
204
+ }
205
+ console.log("");
206
+
207
+ const files = findFiles(targetDir);
208
+ let totalModified = 0;
209
+
210
+ for (const step of STEPS) {
211
+ console.log(step.label);
212
+
213
+ for (const rule of step.replacements) {
214
+ let matchCount = 0;
215
+ const matchedFiles = [];
216
+
217
+ for (const filePath of files) {
218
+ const content = readFileSync(filePath, "utf8");
219
+
220
+ if (rule.pattern.test(content)) {
221
+ // Reset lastIndex after test() for global regex
222
+ rule.pattern.lastIndex = 0;
223
+ const newContent = content.replace(rule.pattern, rule.replacement);
224
+
225
+ if (newContent !== content) {
226
+ matchCount++;
227
+ matchedFiles.push(filePath);
228
+
229
+ if (!dryRun) {
230
+ writeFileSync(filePath, newContent, "utf8");
231
+ }
232
+ }
233
+ }
234
+
235
+ // Reset lastIndex for next file
236
+ rule.pattern.lastIndex = 0;
237
+ }
238
+
239
+ if (matchCount === 0) {
240
+ console.log(` ✓ ${rule.description} — 該当なし`);
241
+ } else {
242
+ console.log(
243
+ ` ✓ ${rule.description} — ${matchCount} ファイル${dryRun ? "(変更予定)" : "置換"}`,
244
+ );
245
+ if (dryRun) {
246
+ for (const f of matchedFiles) {
247
+ console.log(` ${relative(targetDir, f)}`);
248
+ }
249
+ }
250
+ }
251
+ }
252
+
253
+ console.log("");
254
+ }
255
+
256
+ // --- 警告パターン ---
257
+ console.log("[6/6] 手動対応が必要な箇所の検出");
258
+
259
+ let warningCount = 0;
260
+
261
+ for (const warn of WARNING_PATTERNS) {
262
+ const matches = [];
263
+
264
+ for (const filePath of files) {
265
+ const content = readFileSync(filePath, "utf8");
266
+ const lines = content.split("\n");
267
+
268
+ for (let i = 0; i < lines.length; i++) {
269
+ if (warn.pattern.test(lines[i])) {
270
+ matches.push({
271
+ file: relative(targetDir, filePath),
272
+ line: i + 1,
273
+ content: lines[i].trim(),
274
+ });
275
+ }
276
+ }
277
+ }
278
+
279
+ if (matches.length > 0) {
280
+ warningCount += matches.length;
281
+ console.log("");
282
+ console.log(` ⚠ ${warn.description}`);
283
+ for (const m of matches) {
284
+ console.log(` ${m.file}:${m.line}: ${m.content}`);
285
+ }
286
+ }
287
+ }
288
+
289
+ if (warningCount === 0) {
290
+ console.log(" 手動対応が必要な箇所はありません。");
291
+ }
292
+
293
+ // --- 完了 ---
294
+ console.log("");
295
+ console.log("==========================================");
296
+ console.log(" 完了");
297
+ console.log("==========================================");
298
+ console.log("");
299
+
300
+ if (dryRun) {
301
+ console.log("dry-run モードで実行しました。ファイルは変更されていません。");
302
+ console.log("実際に置換するには --dry-run を外して再実行してください。");
303
+ } else {
304
+ console.log("自動置換が完了しました。");
305
+ if (warningCount > 0) {
306
+ console.log("上記で ⚠ が表示された箇所は手動での対応が必要です。");
307
+ }
308
+ }
309
+
310
+ console.log("");
311
+ console.log("置換後の確認:");
312
+ console.log(" 1. TypeScript のビルドを実行して型エラーがないか確認");
313
+ console.log(" 2. 見た目に変化がないか Storybook や画面で確認");
314
+ console.log("");
315
+ }
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { existsSync, statSync, readdirSync } from "node:fs";
4
+ import { resolve, join, basename } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+
7
+ const __dirname = fileURLToPath(new URL(".", import.meta.url));
8
+ const codemodsDir = join(__dirname, "codemods");
9
+
10
+ function listCodemods() {
11
+ try {
12
+ return readdirSync(codemodsDir)
13
+ .filter((f) => f.endsWith(".mjs"))
14
+ .map((f) => f.replace(/\.mjs$/, ""));
15
+ } catch {
16
+ return [];
17
+ }
18
+ }
19
+
20
+ function printHelp() {
21
+ const codemods = listCodemods();
22
+
23
+ console.log(`
24
+ Usage: ingred-ui-codemod <codemod> <target-dir> [options]
25
+
26
+ Options:
27
+ --dry-run 変更を書き込まず、変更箇所のみ表示します
28
+ --help このヘルプを表示します
29
+
30
+ 利用可能な codemod:
31
+ ${codemods.length > 0 ? codemods.map((c) => ` - ${c}`).join("\n") : " (なし)"}
32
+
33
+ 例:
34
+ npx ingred-ui-codemod palette-v2 ./src
35
+ npx ingred-ui-codemod palette-v2 ./src --dry-run
36
+ `);
37
+ }
38
+
39
+ // --- Parse arguments ---
40
+ const args = process.argv.slice(2);
41
+
42
+ if (args.includes("--help") || args.length === 0) {
43
+ printHelp();
44
+ process.exit(0);
45
+ }
46
+
47
+ const flags = args.filter((a) => a.startsWith("--"));
48
+ const positional = args.filter((a) => !a.startsWith("--"));
49
+
50
+ const codemodName = positional[0];
51
+ const targetDir = positional[1];
52
+
53
+ if (!codemodName) {
54
+ console.error("エラー: codemod 名を指定してください。\n");
55
+ printHelp();
56
+ process.exit(1);
57
+ }
58
+
59
+ if (!targetDir) {
60
+ console.error("エラー: 対象ディレクトリを指定してください。\n");
61
+ printHelp();
62
+ process.exit(1);
63
+ }
64
+
65
+ const resolvedTarget = resolve(targetDir);
66
+
67
+ if (!existsSync(resolvedTarget) || !statSync(resolvedTarget).isDirectory()) {
68
+ console.error(`エラー: ディレクトリが見つかりません: ${resolvedTarget}`);
69
+ process.exit(1);
70
+ }
71
+
72
+ const codemodPath = join(codemodsDir, `${codemodName}.mjs`);
73
+
74
+ if (!existsSync(codemodPath)) {
75
+ const available = listCodemods();
76
+ console.error(`エラー: 不明な codemod "${codemodName}"\n`);
77
+ if (available.length > 0) {
78
+ console.error("利用可能な codemod:");
79
+ available.forEach((c) => console.error(` - ${c}`));
80
+ }
81
+ process.exit(1);
82
+ }
83
+
84
+ const dryRun = flags.includes("--dry-run");
85
+
86
+ try {
87
+ const mod = await import(codemodPath);
88
+ await mod.run(resolvedTarget, { dryRun });
89
+ } catch (err) {
90
+ console.error(`エラー: codemod "${codemodName}" の実行に失敗しました。`);
91
+ console.error(err);
92
+ process.exit(1);
93
+ }
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { Theme } from "../../themes";
3
3
  export type ButtonSize = "small" | "medium" | "large";
4
- export type ButtonColor = "primary" | "primaryPale" | "basicLight" | "basicDark" | "danger" | "clear";
4
+ export type ButtonColor = "primary" | "primaryPale" | "basicLight" | "neutral" | "danger" | "clear";
5
5
  export type ButtonColorStyle = {
6
6
  normal: {
7
7
  background: string;
@@ -11,7 +11,7 @@ export type TableAction = {
11
11
  label: string;
12
12
  icon?: React.ReactNode;
13
13
  onClick: (selectedRows: string[]) => void;
14
- color?: "danger" | "primary" | "primaryPale" | "basicLight" | "basicDark" | "clear";
14
+ color?: "danger" | "primary" | "primaryPale" | "basicLight" | "neutral" | "clear";
15
15
  displayIn?: "toolbar" | "dropdown";
16
16
  enabledWhen?: "checked" | "unchecked" | "custom";
17
17
  /** 追加の無効化条件。enabledWhenの基本条件に加えて評価される(customの場合はこの関数の結果のみで決定) */
@@ -28,7 +28,7 @@ export type TableAction = {
28
28
  label: string;
29
29
  icon?: React.ReactNode;
30
30
  onClick: (selectedRows: string[]) => void;
31
- color?: "danger" | "primary" | "primaryPale" | "basicLight" | "basicDark" | "clear";
31
+ color?: "danger" | "primary" | "primaryPale" | "basicLight" | "neutral" | "clear";
32
32
  enabledWhen?: "checked" | "unchecked" | "custom";
33
33
  /** 追加の無効化条件。enabledWhenの基本条件に加えて評価される(customの場合はこの関数の結果のみで決定) */
34
34
  disabled?: (checkedRows: string[]) => boolean;
@@ -22,7 +22,7 @@ export default meta;
22
22
  * selectOptions={ [
23
23
  * {
24
24
  * icon: (
25
- * <Icon name="operator_match" type="line" color={colors.basic[900]} />
25
+ * <Icon name="operator_match" type="line" color={colors.gray[900]} />
26
26
  * ),
27
27
  * label: "含む",
28
28
  * },
@@ -31,7 +31,7 @@ export default meta;
31
31
  * <Icon
32
32
  * name="operator_does_not_match"
33
33
  * type="line"
34
- * color={colors.basic[900]}
34
+ * color={colors.gray[900]}
35
35
  * />
36
36
  * ),
37
37
  * label: "含まない",
@@ -30,7 +30,7 @@ export declare const SelectLabelIcon: import("styled-components").StyledComponen
30
30
  export declare const TagContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
31
31
  $tagOverflow?: "wrap" | "truncate" | undefined;
32
32
  }, never>;
33
- export declare const StyledTag: import("styled-components").StyledComponent<({ label, size, variant, onRemove, className, disabled, boldText, onClick, "aria-label": ariaLabel, "data-tag": dataTag, }: import("../Tag").TagProps) => JSX.Element, import("styled-components").DefaultTheme, {}, never>;
33
+ export declare const StyledTag: import("styled-components").StyledComponent<({ label, size, variant, onRemove, className, disabled, boldText, onClick, "aria-label": ariaLabel, "data-tag": dataTag, prepend, }: import("../Tag").TagProps) => JSX.Element, import("styled-components").DefaultTheme, {}, never>;
34
34
  export declare const Placeholder: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {
35
35
  $variant?: Select2Props["variant"];
36
36
  $disabled?: boolean | undefined;
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { TagProps } from "./types";
3
- export declare const Tag: ({ label, size, variant, onRemove, className, disabled, boldText, onClick, "aria-label": ariaLabel, "data-tag": dataTag, }: TagProps) => JSX.Element;
3
+ export declare const Tag: ({ label, size, variant, onRemove, className, disabled, boldText, onClick, "aria-label": ariaLabel, "data-tag": dataTag, prepend, }: TagProps) => JSX.Element;
@@ -2,7 +2,7 @@
2
2
  import { StoryObj } from "@storybook/react";
3
3
  declare const meta: {
4
4
  title: string;
5
- component: ({ label, size, variant, onRemove, className, disabled, boldText, onClick, "aria-label": ariaLabel, "data-tag": dataTag, }: import("./types").TagProps) => JSX.Element;
5
+ component: ({ label, size, variant, onRemove, className, disabled, boldText, onClick, "aria-label": ariaLabel, "data-tag": dataTag, prepend, }: import("./types").TagProps) => JSX.Element;
6
6
  argTypes: {};
7
7
  };
8
8
  export default meta;
@@ -16,3 +16,5 @@ export declare const BoldText: Story;
16
16
  export declare const Clickable: Story;
17
17
  export declare const BoldAndClickable: Story;
18
18
  export declare const AllFeatures: Story;
19
+ export declare const PrependSizes: Story;
20
+ export declare const PrependWithClickable: Story;
@@ -5,7 +5,14 @@ type StyledTagProps = {
5
5
  $disabled?: boolean;
6
6
  $clickable?: boolean;
7
7
  };
8
+ type PrependSlotProps = {
9
+ $size: TagSize;
10
+ };
8
11
  export declare const Tag: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, StyledTagProps, never>;
9
- export declare const Text: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, StyledTagProps, never>;
12
+ export declare const PrependSlot: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, PrependSlotProps, never>;
13
+ export declare const Text: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, StyledTagProps & {
14
+ /** 削除ボタンなど後続要素があるとき、itemGap を付与 */
15
+ $hasTrailing?: boolean | undefined;
16
+ }, never>;
10
17
  export declare const RemoveButton: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, StyledTagProps, never>;
11
18
  export {};
@@ -1,3 +1,4 @@
1
+ import type { ReactNode } from "react";
1
2
  export type TagSize = "small" | "medium" | "large";
2
3
  export type TagVariant = "light" | "dark";
3
4
  export type TagProps = {
@@ -11,28 +12,37 @@ export type TagProps = {
11
12
  onClick?: () => void;
12
13
  "aria-label"?: string;
13
14
  "data-tag"?: string;
15
+ prepend?: ReactNode;
14
16
  };
15
17
  export declare const TAG_SIZES: {
16
18
  readonly small: {
17
19
  readonly height: "20px";
18
20
  readonly fontSize: "11px";
19
- readonly padding: "2px 6px";
20
- readonly iconSize: "14px";
21
- readonly borderRadius: "2px";
21
+ readonly padding: "2px 4px";
22
+ readonly iconSize: "12px";
23
+ readonly borderRadius: "4px";
24
+ /** prepend とラベルテキストの間 */
25
+ readonly prependGap: "2px";
26
+ /** ラベルと削除ボタンなど、従来ルート gap で取っていた間隔 */
27
+ readonly itemGap: "4px";
22
28
  };
23
29
  readonly medium: {
24
30
  readonly height: "22px";
25
31
  readonly fontSize: "12px";
26
- readonly padding: "2px 7px";
27
- readonly iconSize: "16px";
32
+ readonly padding: "2px 4px";
33
+ readonly iconSize: "14px";
28
34
  readonly borderRadius: "4px";
35
+ readonly prependGap: "2px";
36
+ readonly itemGap: "6px";
29
37
  };
30
38
  readonly large: {
31
39
  readonly height: "26px";
32
40
  readonly fontSize: "13px";
33
- readonly padding: "3px 8px";
34
- readonly iconSize: "18px";
41
+ readonly padding: "4px 6px";
42
+ readonly iconSize: "16px";
35
43
  readonly borderRadius: "4px";
44
+ readonly prependGap: "4px";
45
+ readonly itemGap: "8px";
36
46
  };
37
47
  };
38
48
  export declare const TAG_VARIANTS: {