sh-ui-cli 0.58.1 → 0.58.3
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/data/changelog/versions.json +30 -0
- package/data/registry/react/components/accordion/index.tailwind.tsx +1 -1
- package/data/registry/react/components/accordion/styles.css +1 -1
- package/data/registry/react/components/accordion/styles.module.css +1 -1
- package/data/registry/react/components/breadcrumb/index.tailwind.tsx +1 -1
- package/data/registry/react/components/breadcrumb/styles.css +1 -1
- package/data/registry/react/components/breadcrumb/styles.module.css +1 -1
- package/data/registry/react/components/button/index.tailwind.tsx +1 -1
- package/data/registry/react/components/button/styles.css +1 -2
- package/data/registry/react/components/button/styles.css.ts +1 -2
- package/data/registry/react/components/button/styles.module.css +1 -2
- package/data/registry/react/components/calendar/index.tailwind.tsx +3 -3
- package/data/registry/react/components/calendar/styles.css +3 -3
- package/data/registry/react/components/calendar/styles.module.css +3 -3
- package/data/registry/react/components/card/index.tailwind.tsx +1 -1
- package/data/registry/react/components/card/styles.css +1 -0
- package/data/registry/react/components/card/styles.css.ts +1 -0
- package/data/registry/react/components/card/styles.module.css +1 -0
- package/data/registry/react/components/carousel/index.tailwind.tsx +2 -2
- package/data/registry/react/components/carousel/styles.css +2 -2
- package/data/registry/react/components/carousel/styles.module.css +2 -2
- package/data/registry/react/components/checkbox/index.tailwind.tsx +1 -1
- package/data/registry/react/components/checkbox/styles.css +1 -1
- package/data/registry/react/components/checkbox/styles.module.css +1 -1
- package/data/registry/react/components/code-editor/index.tailwind.tsx +1 -1
- package/data/registry/react/components/code-editor/styles.css +1 -1
- package/data/registry/react/components/code-editor/styles.module.css +1 -1
- package/data/registry/react/components/code-panel/styles.css +1 -1
- package/data/registry/react/components/code-panel/styles.module.css +1 -1
- package/data/registry/react/components/color-picker/index.tailwind.tsx +1 -1
- package/data/registry/react/components/color-picker/styles.css +1 -1
- package/data/registry/react/components/color-picker/styles.module.css +1 -1
- package/data/registry/react/components/combobox/index.tailwind.tsx +1 -1
- package/data/registry/react/components/combobox/styles.css +1 -1
- package/data/registry/react/components/combobox/styles.module.css +1 -1
- package/data/registry/react/components/dialog/index.tailwind.tsx +2 -2
- package/data/registry/react/components/dialog/styles.css +2 -2
- package/data/registry/react/components/dialog/styles.module.css +2 -2
- package/data/registry/react/components/dropdown-menu/index.tailwind.tsx +1 -1
- package/data/registry/react/components/dropdown-menu/styles.css +1 -1
- package/data/registry/react/components/dropdown-menu/styles.module.css +1 -1
- package/data/registry/react/components/file-upload/index.tailwind.tsx +3 -3
- package/data/registry/react/components/file-upload/styles.css +3 -3
- package/data/registry/react/components/file-upload/styles.module.css +3 -3
- package/data/registry/react/components/header/index.tailwind.tsx +3 -3
- package/data/registry/react/components/header/styles.css +3 -3
- package/data/registry/react/components/header/styles.module.css +3 -3
- package/data/registry/react/components/input/index.tailwind.tsx +1 -1
- package/data/registry/react/components/input/styles.css +1 -1
- package/data/registry/react/components/input/styles.css.ts +1 -1
- package/data/registry/react/components/input/styles.module.css +1 -1
- package/data/registry/react/components/menubar/styles.css +1 -1
- package/data/registry/react/components/menubar/styles.module.css +1 -1
- package/data/registry/react/components/page-toc/index.tailwind.tsx +1 -1
- package/data/registry/react/components/page-toc/styles.css +1 -1
- package/data/registry/react/components/page-toc/styles.module.css +1 -1
- package/data/registry/react/components/pagination/index.tailwind.tsx +1 -1
- package/data/registry/react/components/pagination/styles.css +1 -1
- package/data/registry/react/components/pagination/styles.module.css +1 -1
- package/data/registry/react/components/popover/index.tailwind.tsx +1 -1
- package/data/registry/react/components/popover/styles.css +1 -1
- package/data/registry/react/components/popover/styles.module.css +1 -1
- package/data/registry/react/components/radio/index.tailwind.tsx +1 -1
- package/data/registry/react/components/radio/styles.css +1 -1
- package/data/registry/react/components/radio/styles.module.css +1 -1
- package/data/registry/react/components/rich-text-editor/index.tailwind.tsx +2 -2
- package/data/registry/react/components/rich-text-editor/styles.css +2 -2
- package/data/registry/react/components/rich-text-editor/styles.module.css +2 -2
- package/data/registry/react/components/select/index.tailwind.tsx +1 -1
- package/data/registry/react/components/select/styles.css +2 -2
- package/data/registry/react/components/select/styles.module.css +2 -2
- package/data/registry/react/components/sidebar/index.tailwind.tsx +3 -3
- package/data/registry/react/components/sidebar/styles.css +3 -3
- package/data/registry/react/components/sidebar/styles.module.css +3 -3
- package/data/registry/react/components/slider/index.tailwind.tsx +1 -1
- package/data/registry/react/components/slider/styles.css +1 -1
- package/data/registry/react/components/slider/styles.module.css +1 -1
- package/data/registry/react/components/switch/index.tailwind.tsx +1 -1
- package/data/registry/react/components/switch/styles.css +1 -1
- package/data/registry/react/components/switch/styles.module.css +1 -1
- package/data/registry/react/components/tabs/index.tailwind.tsx +2 -2
- package/data/registry/react/components/tabs/styles.css +2 -2
- package/data/registry/react/components/tabs/styles.module.css +2 -2
- package/data/registry/react/components/toast/index.tailwind.tsx +1 -1
- package/data/registry/react/components/toast/styles.css +1 -1
- package/data/registry/react/components/toast/styles.module.css +1 -1
- package/data/registry/react/components/toggle/index.tailwind.tsx +1 -1
- package/data/registry/react/components/toggle/styles.css +1 -1
- package/data/registry/react/components/toggle/styles.module.css +1 -1
- package/package.json +1 -1
- package/templates/nextjs-standalone/_arch/flat/lib/styles/tokens.css +1 -0
- package/templates/nextjs-standalone/_arch/fsd/src/shared/styles/tokens.css +1 -0
- package/templates/nextjs-standalone/app/globals.css +1 -0
- package/templates/ui-app-template/src/styles/globals.css +1 -0
- package/templates/ui-app-template/src/styles/tokens.css +1 -0
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
.sh-ui-file-upload__dropzone:focus-visible {
|
|
32
|
-
outline: var(--border-width-strong) solid var(--
|
|
32
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
33
33
|
outline-offset: 2px;
|
|
34
34
|
border-color: var(--foreground);
|
|
35
35
|
}
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
border-color: var(--border-strong);
|
|
94
94
|
}
|
|
95
95
|
.sh-ui-file-upload__trigger:focus-visible {
|
|
96
|
-
outline: var(--border-width-strong) solid var(--
|
|
96
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
97
97
|
outline-offset: 2px;
|
|
98
98
|
}
|
|
99
99
|
.sh-ui-file-upload__trigger:disabled {
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
background: var(--background-muted);
|
|
162
162
|
}
|
|
163
163
|
.sh-ui-file-upload__remove:focus-visible {
|
|
164
|
-
outline: var(--border-width-strong) solid var(--
|
|
164
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
165
165
|
outline-offset: 2px;
|
|
166
166
|
}
|
|
167
167
|
.sh-ui-file-upload__remove:disabled {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
.file-upload__dropzone:focus-visible {
|
|
32
|
-
outline: var(--border-width-strong) solid var(--
|
|
32
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
33
33
|
outline-offset: 2px;
|
|
34
34
|
border-color: var(--foreground);
|
|
35
35
|
}
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
border-color: var(--border-strong);
|
|
94
94
|
}
|
|
95
95
|
.file-upload__trigger:focus-visible {
|
|
96
|
-
outline: var(--border-width-strong) solid var(--
|
|
96
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
97
97
|
outline-offset: 2px;
|
|
98
98
|
}
|
|
99
99
|
.file-upload__trigger:disabled {
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
background: var(--background-muted);
|
|
162
162
|
}
|
|
163
163
|
.file-upload__remove:focus-visible {
|
|
164
|
-
outline: var(--border-width-strong) solid var(--
|
|
164
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
165
165
|
outline-offset: 2px;
|
|
166
166
|
}
|
|
167
167
|
.file-upload__remove:disabled {
|
|
@@ -197,7 +197,7 @@ export const HeaderTrigger = React.forwardRef<HTMLButtonElement, React.ButtonHTM
|
|
|
197
197
|
ref={setRefs}
|
|
198
198
|
type="button"
|
|
199
199
|
className={cn(
|
|
200
|
-
"hidden items-center justify-center w-9 h-9 p-0 bg-transparent border-0 text-foreground rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[background-color] duration-[var(--duration-fast)] hover:bg-[var(--sh-ui-header-hover-bg)] focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
200
|
+
"hidden items-center justify-center w-9 h-9 p-0 bg-transparent border-0 text-foreground rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[background-color] duration-[var(--duration-fast)] hover:bg-[var(--sh-ui-header-hover-bg)] focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 max-md:inline-flex max-md:order-[-1]",
|
|
201
201
|
className,
|
|
202
202
|
)}
|
|
203
203
|
aria-label={open ? "메뉴 닫기" : "메뉴 열기"}
|
|
@@ -292,7 +292,7 @@ export const HeaderItem = React.forwardRef<
|
|
|
292
292
|
ref={ref}
|
|
293
293
|
href={href}
|
|
294
294
|
className={cn(
|
|
295
|
-
"inline-flex items-center gap-[var(--space-1)] py-[var(--space-2)] px-[var(--space-3)] text-[length:var(--text-sm)] font-medium text-foreground-muted no-underline bg-transparent border-0 rounded-[calc(var(--radius)-2px)] cursor-pointer whitespace-nowrap transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-[var(--sh-ui-header-hover-bg)] data-[active]:text-foreground data-[active]:font-semibold focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
295
|
+
"inline-flex items-center gap-[var(--space-1)] py-[var(--space-2)] px-[var(--space-3)] text-[length:var(--text-sm)] font-medium text-foreground-muted no-underline bg-transparent border-0 rounded-[calc(var(--radius)-2px)] cursor-pointer whitespace-nowrap transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-[var(--sh-ui-header-hover-bg)] data-[active]:text-foreground data-[active]:font-semibold focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 motion-reduce:transition-none max-md:py-[var(--space-3)] max-md:px-[var(--space-3)]",
|
|
296
296
|
className,
|
|
297
297
|
)}
|
|
298
298
|
data-active={computedActive ? "" : undefined}
|
|
@@ -437,7 +437,7 @@ export const HeaderMenuTrigger = React.forwardRef<HTMLButtonElement, React.Butto
|
|
|
437
437
|
aria-controls={contentId}
|
|
438
438
|
data-open={open ? "" : undefined}
|
|
439
439
|
className={cn(
|
|
440
|
-
"inline-flex items-center gap-[var(--space-1)] py-[var(--space-2)] px-[var(--space-3)] text-[length:var(--text-sm)] font-medium text-foreground-muted bg-transparent border-0 rounded-[calc(var(--radius)-2px)] cursor-pointer whitespace-nowrap transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-[var(--sh-ui-header-hover-bg)] data-[open]:text-foreground data-[open]:bg-[var(--sh-ui-header-hover-bg)] focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
440
|
+
"inline-flex items-center gap-[var(--space-1)] py-[var(--space-2)] px-[var(--space-3)] text-[length:var(--text-sm)] font-medium text-foreground-muted bg-transparent border-0 rounded-[calc(var(--radius)-2px)] cursor-pointer whitespace-nowrap transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-[var(--sh-ui-header-hover-bg)] data-[open]:text-foreground data-[open]:bg-[var(--sh-ui-header-hover-bg)] focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 motion-reduce:transition-none",
|
|
441
441
|
location === "drawer" && "max-md:justify-between max-md:w-full max-md:py-[var(--space-3)] max-md:px-[var(--space-3)]",
|
|
442
442
|
className,
|
|
443
443
|
)}
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
background: var(--sh-ui-header-hover-bg);
|
|
92
92
|
}
|
|
93
93
|
.sh-ui-header__trigger:focus-visible {
|
|
94
|
-
outline: var(--border-width-strong) solid var(--
|
|
94
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
95
95
|
outline-offset: 2px;
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
font-weight: var(--weight-semibold);
|
|
136
136
|
}
|
|
137
137
|
.sh-ui-header__item:focus-visible {
|
|
138
|
-
outline: var(--border-width-strong) solid var(--
|
|
138
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
139
139
|
outline-offset: 2px;
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
background: var(--sh-ui-header-hover-bg);
|
|
217
217
|
}
|
|
218
218
|
.sh-ui-header__menu-trigger:focus-visible {
|
|
219
|
-
outline: var(--border-width-strong) solid var(--
|
|
219
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
220
220
|
outline-offset: 2px;
|
|
221
221
|
}
|
|
222
222
|
.sh-ui-header__chevron {
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
background: var(--sh-ui-header-hover-bg);
|
|
92
92
|
}
|
|
93
93
|
.header__trigger:focus-visible {
|
|
94
|
-
outline: var(--border-width-strong) solid var(--
|
|
94
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
95
95
|
outline-offset: 2px;
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
font-weight: var(--weight-semibold);
|
|
136
136
|
}
|
|
137
137
|
.header__item:focus-visible {
|
|
138
|
-
outline: var(--border-width-strong) solid var(--
|
|
138
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
139
139
|
outline-offset: 2px;
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
background: var(--sh-ui-header-hover-bg);
|
|
217
217
|
}
|
|
218
218
|
.header__menu-trigger:focus-visible {
|
|
219
|
-
outline: var(--border-width-strong) solid var(--
|
|
219
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
220
220
|
outline-offset: 2px;
|
|
221
221
|
}
|
|
222
222
|
.header__chevron {
|
|
@@ -149,7 +149,7 @@ Input.displayName = "Input";
|
|
|
149
149
|
/* ───────── PasswordInput ───────── */
|
|
150
150
|
|
|
151
151
|
const passwordToggleClasses =
|
|
152
|
-
"inline-flex items-center justify-center w-8 h-8 p-0 bg-transparent border-none rounded-[calc(var(--radius)-2px)] text-foreground-muted cursor-pointer transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-background-muted focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
152
|
+
"inline-flex items-center justify-center w-8 h-8 p-0 bg-transparent border-none rounded-[calc(var(--radius)-2px)] text-foreground-muted cursor-pointer transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-background-muted focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2";
|
|
153
153
|
|
|
154
154
|
function EyeIcon() {
|
|
155
155
|
return (
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
}
|
|
103
103
|
.sh-ui-input__toggle:hover { color: var(--foreground); background: var(--background-muted); }
|
|
104
104
|
.sh-ui-input__toggle:focus-visible {
|
|
105
|
-
outline: var(--border-width-strong) solid var(--
|
|
105
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
106
106
|
outline-offset: 2px;
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -137,7 +137,7 @@ export const toggle = style({
|
|
|
137
137
|
background: "var(--background-muted)",
|
|
138
138
|
},
|
|
139
139
|
"&:focus-visible": {
|
|
140
|
-
outline: "var(--border-width-strong) solid var(--
|
|
140
|
+
outline: "var(--border-width-strong) solid var(--ring)",
|
|
141
141
|
outlineOffset: "2px",
|
|
142
142
|
},
|
|
143
143
|
},
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
}
|
|
101
101
|
.toggle:hover { color: var(--foreground); background: var(--background-muted); }
|
|
102
102
|
.toggle:focus-visible {
|
|
103
|
-
outline: var(--border-width-strong) solid var(--
|
|
103
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
104
104
|
outline-offset: 2px;
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -32,7 +32,7 @@ const cx = (...args: (string | undefined | false | null)[]) =>
|
|
|
32
32
|
args.filter(Boolean).join(" ");
|
|
33
33
|
|
|
34
34
|
const linkBase =
|
|
35
|
-
"block px-2 py-1 rounded-[calc(var(--radius)-4px)] text-foreground-muted no-underline leading-snug transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-background-subtle focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
35
|
+
"block px-2 py-1 rounded-[calc(var(--radius)-4px)] text-foreground-muted no-underline leading-snug transition-[color,background-color] duration-[var(--duration-fast)] hover:text-foreground hover:bg-background-subtle focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 data-[active=true]:text-foreground data-[active=true]:font-semibold data-[active=true]:bg-background-subtle motion-reduce:transition-none";
|
|
36
36
|
|
|
37
37
|
export function PageTOC({
|
|
38
38
|
containerSelector = "main",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
background: var(--background-subtle);
|
|
60
60
|
}
|
|
61
61
|
.sh-ui-page-toc__link:focus-visible {
|
|
62
|
-
outline: var(--border-width-strong) solid var(--
|
|
62
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
63
63
|
outline-offset: 2px;
|
|
64
64
|
}
|
|
65
65
|
.sh-ui-page-toc__link[data-active="true"] {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
background: var(--background-subtle);
|
|
60
60
|
}
|
|
61
61
|
.page-toc__link:focus-visible {
|
|
62
|
-
outline: var(--border-width-strong) solid var(--
|
|
62
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
63
63
|
outline-offset: 2px;
|
|
64
64
|
}
|
|
65
65
|
.page-toc__link[data-active="true"] {
|
|
@@ -34,7 +34,7 @@ export const PaginationItem = React.forwardRef<HTMLLIElement, React.LiHTMLAttrib
|
|
|
34
34
|
);
|
|
35
35
|
|
|
36
36
|
const linkBase =
|
|
37
|
-
"inline-flex items-center justify-center gap-1.5 min-w-9 h-9 px-3 rounded-[calc(var(--radius)-2px)] border border-transparent bg-transparent text-foreground no-underline transition-[background-color,border-color,color] duration-[var(--duration-fast)] cursor-pointer select-none hover:bg-background-muted focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
37
|
+
"inline-flex items-center justify-center gap-1.5 min-w-9 h-9 px-3 rounded-[calc(var(--radius)-2px)] border border-transparent bg-transparent text-foreground no-underline transition-[background-color,border-color,color] duration-[var(--duration-fast)] cursor-pointer select-none hover:bg-background-muted focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 data-[active]:bg-foreground data-[active]:text-background data-[active]:font-medium data-[active]:hover:opacity-90 aria-disabled:pointer-events-none aria-disabled:opacity-45 data-[disabled]:pointer-events-none data-[disabled]:opacity-45 data-[size=sm]:min-w-8 data-[size=sm]:h-8 data-[size=sm]:px-2 motion-reduce:transition-none";
|
|
38
38
|
|
|
39
39
|
export interface PaginationLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
40
40
|
isActive?: boolean;
|
|
@@ -34,7 +34,7 @@ export const PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentPro
|
|
|
34
34
|
<BasePopover.Popup
|
|
35
35
|
ref={ref}
|
|
36
36
|
className={cn(
|
|
37
|
-
"min-w-48 p-[var(--space-2)] bg-background text-foreground border border-border rounded-[var(--radius)] shadow-[0_8px_24px_rgba(0,0,0,0.12)] outline-none text-[length:var(--text-sm)] leading-snug origin-[var(--transform-origin)] transition-[opacity,transform] duration-[140ms] ease-out motion-reduce:transition-none data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[ending-style]:opacity-0 data-[ending-style]:scale-95 motion-reduce:data-[starting-style]:scale-100 motion-reduce:data-[ending-style]:scale-100 focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
37
|
+
"min-w-48 p-[var(--space-2)] bg-background text-foreground border border-border rounded-[var(--radius)] shadow-[0_8px_24px_rgba(0,0,0,0.12)] outline-none text-[length:var(--text-sm)] leading-snug origin-[var(--transform-origin)] transition-[opacity,transform] duration-[140ms] ease-out motion-reduce:transition-none data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[ending-style]:opacity-0 data-[ending-style]:scale-95 motion-reduce:data-[starting-style]:scale-100 motion-reduce:data-[ending-style]:scale-100 focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2",
|
|
38
38
|
className,
|
|
39
39
|
)}
|
|
40
40
|
{...props}
|
|
@@ -16,7 +16,7 @@ export const Radio = React.forwardRef<HTMLElement, RadioProps>(
|
|
|
16
16
|
<BaseRadio.Root
|
|
17
17
|
ref={ref}
|
|
18
18
|
className={cn(
|
|
19
|
-
"inline-flex items-center justify-center w-[1.125rem] h-[1.125rem] border border-border-strong rounded-full bg-background cursor-pointer shrink-0 transition-[border-color] duration-[var(--duration-fast)] hover:not-data-[disabled]:border-foreground focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
19
|
+
"inline-flex items-center justify-center w-[1.125rem] h-[1.125rem] border border-border-strong rounded-full bg-background cursor-pointer shrink-0 transition-[border-color] duration-[var(--duration-fast)] hover:not-data-[disabled]:border-foreground focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 data-[checked]:border-primary data-[disabled]:opacity-[var(--opacity-disabled)] data-[disabled]:cursor-not-allowed motion-reduce:transition-none [@media(hover:none)_and_(pointer:coarse)]:w-5 [@media(hover:none)_and_(pointer:coarse)]:h-5",
|
|
20
20
|
className,
|
|
21
21
|
)}
|
|
22
22
|
{...props}
|
|
@@ -67,7 +67,7 @@ export function RichTextEditor({
|
|
|
67
67
|
return (
|
|
68
68
|
<div
|
|
69
69
|
className={cn(
|
|
70
|
-
"sh-ui-rte flex flex-col border border-border rounded-[var(--radius)] bg-background overflow-hidden transition-[border-color] duration-[var(--duration-fast)] focus-within:border-foreground focus-within:outline-[length:var(--border-width-strong)] focus-within:outline-
|
|
70
|
+
"sh-ui-rte flex flex-col border border-border rounded-[var(--radius)] bg-background overflow-hidden transition-[border-color] duration-[var(--duration-fast)] focus-within:border-foreground focus-within:outline-[length:var(--border-width-strong)] focus-within:outline-ring focus-within:outline-offset-2 data-[readonly]:bg-background-subtle motion-reduce:transition-none",
|
|
71
71
|
className,
|
|
72
72
|
)}
|
|
73
73
|
data-readonly={readOnly || undefined}
|
|
@@ -157,7 +157,7 @@ function ToolbarButton({ editor, label, icon, isActive, canRun, run, disabled }:
|
|
|
157
157
|
<button
|
|
158
158
|
type="button"
|
|
159
159
|
className={cn(
|
|
160
|
-
"inline-flex items-center justify-center w-7 h-7 p-0 bg-transparent text-foreground-muted border border-transparent rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[color,background-color,border-color] duration-[var(--duration-fast)] hover:not-disabled:text-foreground hover:not-disabled:bg-background hover:not-disabled:border-border focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
160
|
+
"inline-flex items-center justify-center w-7 h-7 p-0 bg-transparent text-foreground-muted border border-transparent rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[color,background-color,border-color] duration-[var(--duration-fast)] hover:not-disabled:text-foreground hover:not-disabled:bg-background hover:not-disabled:border-border focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-1 disabled:opacity-50 disabled:cursor-not-allowed motion-reduce:transition-none",
|
|
161
161
|
isActive && "text-foreground bg-background border-border-strong",
|
|
162
162
|
)}
|
|
163
163
|
aria-label={label}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
}
|
|
10
10
|
.sh-ui-rte:focus-within {
|
|
11
11
|
border-color: var(--foreground);
|
|
12
|
-
outline: var(--border-width-strong) solid var(--
|
|
12
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
13
13
|
outline-offset: 2px;
|
|
14
14
|
}
|
|
15
15
|
.sh-ui-rte[data-readonly] {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
border-color: var(--border);
|
|
51
51
|
}
|
|
52
52
|
.sh-ui-rte__btn:focus-visible {
|
|
53
|
-
outline: var(--border-width-strong) solid var(--
|
|
53
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
54
54
|
outline-offset: 1px;
|
|
55
55
|
}
|
|
56
56
|
.sh-ui-rte__btn.is-active {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
}
|
|
10
10
|
.rte:focus-within {
|
|
11
11
|
border-color: var(--foreground);
|
|
12
|
-
outline: var(--border-width-strong) solid var(--
|
|
12
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
13
13
|
outline-offset: 2px;
|
|
14
14
|
}
|
|
15
15
|
.rte[data-readonly] {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
border-color: var(--border);
|
|
51
51
|
}
|
|
52
52
|
.rte__btn:focus-visible {
|
|
53
|
-
outline: var(--border-width-strong) solid var(--
|
|
53
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
54
54
|
outline-offset: 1px;
|
|
55
55
|
}
|
|
56
56
|
.rte__btn.is-active {
|
|
@@ -30,7 +30,7 @@ export const SelectTrigger = React.forwardRef<
|
|
|
30
30
|
<BaseSelect.Trigger
|
|
31
31
|
ref={ref}
|
|
32
32
|
className={cn(
|
|
33
|
-
"inline-flex items-center justify-between gap-[var(--space-2)] min-w-40 h-[var(--control-md)] px-[var(--space-3)] bg-background text-foreground border border-border rounded-[var(--radius)] text-[length:var(--text-sm)] leading-none cursor-pointer transition-[border-color,background-color] duration-[var(--duration-fast)] select-none hover:not-disabled:border-border-strong focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
33
|
+
"inline-flex items-center justify-between gap-[var(--space-2)] min-w-40 h-[var(--control-md)] px-[var(--space-3)] bg-background text-foreground border border-border rounded-[var(--radius)] text-[length:var(--text-sm)] leading-none cursor-pointer transition-[border-color,background-color] duration-[var(--duration-fast)] select-none hover:not-disabled:border-border-strong focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 data-[popup-open]:border-border-strong disabled:opacity-[var(--opacity-disabled)] disabled:pointer-events-none",
|
|
34
34
|
className,
|
|
35
35
|
)}
|
|
36
36
|
{...props}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
.sh-ui-select__trigger:focus-visible {
|
|
26
|
-
outline: var(--border-width-strong) solid var(--
|
|
26
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
27
27
|
outline-offset: 2px;
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -188,6 +188,6 @@
|
|
|
188
188
|
color: var(--foreground);
|
|
189
189
|
}
|
|
190
190
|
.sh-ui-select__chip-remove:focus-visible {
|
|
191
|
-
outline: var(--border-width-strong) solid var(--
|
|
191
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
192
192
|
outline-offset: 1px;
|
|
193
193
|
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
.select__trigger:focus-visible {
|
|
26
|
-
outline: var(--border-width-strong) solid var(--
|
|
26
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
27
27
|
outline-offset: 2px;
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -188,6 +188,6 @@
|
|
|
188
188
|
color: var(--foreground);
|
|
189
189
|
}
|
|
190
190
|
.select__chip-remove:focus-visible {
|
|
191
|
-
outline: var(--border-width-strong) solid var(--
|
|
191
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
192
192
|
outline-offset: 1px;
|
|
193
193
|
}
|
|
@@ -233,7 +233,7 @@ export function SidebarTrigger({ className, onClick, ...props }: SidebarTriggerP
|
|
|
233
233
|
<button
|
|
234
234
|
type="button"
|
|
235
235
|
aria-label="Toggle Sidebar"
|
|
236
|
-
className={cn("inline-flex items-center justify-center w-8 h-8 border border-transparent bg-transparent text-foreground-muted rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[background-color,color,border-color] duration-[var(--duration-fast)] hover:bg-[var(--sidebar-accent)] hover:text-foreground focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
236
|
+
className={cn("inline-flex items-center justify-center w-8 h-8 border border-transparent bg-transparent text-foreground-muted rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[background-color,color,border-color] duration-[var(--duration-fast)] hover:bg-[var(--sidebar-accent)] hover:text-foreground focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 motion-reduce:transition-none",
|
|
237
237
|
className)}
|
|
238
238
|
onClick={(e) => { onClick?.(e); toggleSidebar(); }}
|
|
239
239
|
{...props}
|
|
@@ -340,7 +340,7 @@ export function SidebarGroupContent({ className, ...props }: React.HTMLAttribute
|
|
|
340
340
|
}
|
|
341
341
|
|
|
342
342
|
export function SidebarMenu({ className, ...props }: React.HTMLAttributes<HTMLUListElement>) {
|
|
343
|
-
return <ul className={cn("list-none m-0 p-0 flex flex-col min-w-0 gap-0", className)} {...props} />;
|
|
343
|
+
return <ul className={cn("list-none m-0 p-0 flex flex-col min-w-0 gap-0.5", className)} {...props} />;
|
|
344
344
|
}
|
|
345
345
|
|
|
346
346
|
export function SidebarMenuItem({ className, ...props }: React.HTMLAttributes<HTMLLIElement>) {
|
|
@@ -356,7 +356,7 @@ export interface SidebarMenuButtonProps extends React.ButtonHTMLAttributes<HTMLB
|
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
const menuButtonBase =
|
|
359
|
-
"flex w-full items-center gap-[var(--space-2)] p-[var(--space-2)] text-left text-[length:var(--text-sm)] text-[var(--sidebar-fg)] bg-transparent border-none rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[background-color,color] duration-[var(--duration-fast)] no-underline font-[inherit] leading-snug [&>svg]:w-4 [&>svg]:h-4 [&>svg]:shrink-0 [&>span]:flex-1 [&>span]:min-w-0 [&>span]:overflow-hidden [&>span]:[text-overflow:ellipsis] [&>span]:whitespace-nowrap hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-fg)] focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
359
|
+
"flex w-full items-center gap-[var(--space-2)] p-[var(--space-2)] text-left text-[length:var(--text-sm)] text-[var(--sidebar-fg)] bg-transparent border-none rounded-[calc(var(--radius)-2px)] cursor-pointer transition-[background-color,color] duration-[var(--duration-fast)] no-underline font-[inherit] leading-snug [&>svg]:w-4 [&>svg]:h-4 [&>svg]:shrink-0 [&>span]:flex-1 [&>span]:min-w-0 [&>span]:overflow-hidden [&>span]:[text-overflow:ellipsis] [&>span]:whitespace-nowrap hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-fg)] focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:[outline-offset:-2px] data-[active]:bg-primary data-[active]:text-primary-foreground data-[active]:font-semibold data-[active]:hover:bg-primary-hover disabled:opacity-[var(--opacity-disabled)] disabled:pointer-events-none aria-disabled:opacity-[var(--opacity-disabled)] aria-disabled:pointer-events-none [[data-state=collapsed][data-collapsible=icon]_&]:justify-center [[data-state=collapsed][data-collapsible=icon]_&]:p-[var(--space-2)] [[data-state=collapsed][data-collapsible=icon]_&>span]:hidden motion-reduce:transition-none";
|
|
360
360
|
|
|
361
361
|
const menuButtonSize = {
|
|
362
362
|
sm: "h-7 py-[var(--space-1)] px-[var(--space-2)] text-[0.8125rem]",
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
color: var(--foreground);
|
|
164
164
|
}
|
|
165
165
|
.sh-ui-sidebar__trigger:focus-visible {
|
|
166
|
-
outline: var(--border-width-strong) solid var(--
|
|
166
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
167
167
|
outline-offset: 2px;
|
|
168
168
|
}
|
|
169
169
|
|
|
@@ -321,7 +321,7 @@
|
|
|
321
321
|
display: flex;
|
|
322
322
|
flex-direction: column;
|
|
323
323
|
min-width: 0;
|
|
324
|
-
gap:
|
|
324
|
+
gap: 2px;
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
.sh-ui-sidebar__menu-item {
|
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
color: var(--sidebar-accent-fg);
|
|
365
365
|
}
|
|
366
366
|
.sh-ui-sidebar__menu-button:focus-visible {
|
|
367
|
-
outline: var(--border-width-strong) solid var(--
|
|
367
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
368
368
|
outline-offset: -2px;
|
|
369
369
|
}
|
|
370
370
|
.sh-ui-sidebar__menu-button[data-active] {
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
color: var(--foreground);
|
|
164
164
|
}
|
|
165
165
|
.sidebar__trigger:focus-visible {
|
|
166
|
-
outline: var(--border-width-strong) solid var(--
|
|
166
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
167
167
|
outline-offset: 2px;
|
|
168
168
|
}
|
|
169
169
|
|
|
@@ -321,7 +321,7 @@
|
|
|
321
321
|
display: flex;
|
|
322
322
|
flex-direction: column;
|
|
323
323
|
min-width: 0;
|
|
324
|
-
gap:
|
|
324
|
+
gap: 2px;
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
.sidebar__menu-item {
|
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
color: var(--sidebar-accent-fg);
|
|
365
365
|
}
|
|
366
366
|
.sidebar__menu-button:focus-visible {
|
|
367
|
-
outline: var(--border-width-strong) solid var(--
|
|
367
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
368
368
|
outline-offset: -2px;
|
|
369
369
|
}
|
|
370
370
|
.sidebar__menu-button[data-active] {
|
|
@@ -242,7 +242,7 @@ export const SliderThumb = React.forwardRef<
|
|
|
242
242
|
aria-disabled={disabled || undefined}
|
|
243
243
|
onKeyDown={onKeyDown}
|
|
244
244
|
className={cn(
|
|
245
|
-
"absolute top-1/2 w-4 h-4 -ml-2 -translate-y-1/2 bg-background border-2 border-primary rounded-full shadow-[0_1px_2px_rgba(0,0,0,0.1)] cursor-grab transition-transform duration-[80ms] active:cursor-grabbing active:scale-110 active:-translate-y-1/2 focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
245
|
+
"absolute top-1/2 w-4 h-4 -ml-2 -translate-y-1/2 bg-background border-2 border-primary rounded-full shadow-[0_1px_2px_rgba(0,0,0,0.1)] cursor-grab transition-transform duration-[80ms] active:cursor-grabbing active:scale-110 active:-translate-y-1/2 focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 [@media(hover:none)_and_(pointer:coarse)]:w-5 [@media(hover:none)_and_(pointer:coarse)]:h-5 [@media(hover:none)_and_(pointer:coarse)]:-ml-2.5",
|
|
246
246
|
className,
|
|
247
247
|
)}
|
|
248
248
|
style={{ left: percent, ...style }}
|
|
@@ -5,7 +5,7 @@ import { cva, type VariantProps } from "class-variance-authority";
|
|
|
5
5
|
|
|
6
6
|
import { cn } from "@SH_UI_UTILS@";
|
|
7
7
|
const switchRoot = cva(
|
|
8
|
-
"inline-flex items-center border-none rounded-full bg-background-muted cursor-pointer shrink-0 p-0.5 transition-colors duration-150 hover:not-data-[disabled]:bg-border-strong focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
8
|
+
"inline-flex items-center border-none rounded-full bg-background-muted cursor-pointer shrink-0 p-0.5 transition-colors duration-150 hover:not-data-[disabled]:bg-border-strong focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 data-[checked]:bg-primary data-[checked]:hover:not-data-[disabled]:bg-primary-hover data-[disabled]:opacity-[var(--opacity-disabled)] data-[disabled]:cursor-not-allowed motion-reduce:transition-none",
|
|
9
9
|
{
|
|
10
10
|
variants: {
|
|
11
11
|
size: {
|
|
@@ -65,7 +65,7 @@ export const TabsTrigger = React.forwardRef<
|
|
|
65
65
|
<BaseTabs.Tab
|
|
66
66
|
ref={ref}
|
|
67
67
|
className={cn(
|
|
68
|
-
"relative z-[1] inline-flex items-center justify-center gap-1.5 py-[var(--space-2)] px-[var(--space-3)] bg-transparent text-foreground-muted border-0 text-[length:var(--text-sm)] font-medium leading-none cursor-pointer transition-[color,background-color] duration-[var(--duration-fast)] select-none whitespace-nowrap hover:not-disabled:not-data-[selected]:text-foreground focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
68
|
+
"relative z-[1] inline-flex items-center justify-center gap-1.5 py-[var(--space-2)] px-[var(--space-3)] bg-transparent text-foreground-muted border-0 text-[length:var(--text-sm)] font-medium leading-none cursor-pointer transition-[color,background-color] duration-[var(--duration-fast)] select-none whitespace-nowrap hover:not-disabled:not-data-[selected]:text-foreground focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 data-[selected]:text-foreground disabled:opacity-[var(--opacity-disabled)] disabled:cursor-not-allowed",
|
|
69
69
|
triggerVariantClasses,
|
|
70
70
|
className,
|
|
71
71
|
)}
|
|
@@ -100,7 +100,7 @@ export const TabsContent = React.forwardRef<
|
|
|
100
100
|
<BaseTabs.Panel
|
|
101
101
|
ref={ref}
|
|
102
102
|
className={cn(
|
|
103
|
-
"outline-none focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-
|
|
103
|
+
"outline-none focus-visible:outline-[length:var(--border-width-strong)] focus-visible:outline-ring focus-visible:outline-offset-2 focus-visible:rounded-[var(--radius)]",
|
|
104
104
|
className,
|
|
105
105
|
)}
|
|
106
106
|
{...props}
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
.sh-ui-tabs__trigger:focus-visible {
|
|
51
|
-
outline: var(--border-width-strong) solid var(--
|
|
51
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
52
52
|
outline-offset: 2px;
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.sh-ui-tabs__content:focus-visible {
|
|
80
|
-
outline: var(--border-width-strong) solid var(--
|
|
80
|
+
outline: var(--border-width-strong) solid var(--ring);
|
|
81
81
|
outline-offset: 2px;
|
|
82
82
|
border-radius: var(--radius);
|
|
83
83
|
}
|