@nexus-cross/design-system 1.0.0 → 1.0.2
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/cursor-rules/nexus-project-setup.mdc +150 -150
- package/cursor-rules/nexus-ui-api.mdc +659 -316
- package/cursor-rules/nexus-ui-components.mdc +162 -96
- package/dist/chunks/chunk-55IEEVNR.js +7 -0
- package/dist/chunks/{chunk-D6FII7HW.js → chunk-BBLBTOP4.js} +8 -5
- package/dist/chunks/{chunk-5JHN4FCY.mjs → chunk-K2TBLM3F.mjs} +1 -4
- package/dist/chunks/{chunk-MTX7GD3H.js → chunk-PEIEVKD5.js} +1 -4
- package/dist/chunks/{chunk-54RBL7J4.mjs → chunk-UKRU46PH.mjs} +8 -5
- package/dist/chunks/chunk-XMG7ZEYY.mjs +5 -0
- package/dist/data-list.js +2 -2
- package/dist/data-list.mjs +1 -1
- package/dist/error-boundary.d.mts +1 -1
- package/dist/error-boundary.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/index.mjs +2 -2
- package/dist/schemas/_all.json +870 -373
- package/dist/schemas/accordion.json +12 -12
- package/dist/schemas/avatar.json +9 -9
- package/dist/schemas/button.json +27 -9
- package/dist/schemas/carousel.json +6 -6
- package/dist/schemas/carouselButton.json +3 -3
- package/dist/schemas/carouselDots.json +2 -2
- package/dist/schemas/carouselSlide.json +3 -3
- package/dist/schemas/checkBox.json +28 -10
- package/dist/schemas/chip.json +13 -7
- package/dist/schemas/clientOnly.json +3 -3
- package/dist/schemas/countdown.json +8 -8
- package/dist/schemas/counter.json +13 -10
- package/dist/schemas/dataList.json +10 -10
- package/dist/schemas/divider.json +8 -5
- package/dist/schemas/drawer.json +22 -3
- package/dist/schemas/drawerClose.json +24 -0
- package/dist/schemas/drawerContent.json +7 -7
- package/dist/schemas/drawerDescription.json +20 -0
- package/dist/schemas/drawerTitle.json +20 -0
- package/dist/schemas/drawerTrigger.json +24 -0
- package/dist/schemas/ellipsis.json +9 -9
- package/dist/schemas/errorBoundary.json +4 -4
- package/dist/schemas/infiniteScroll.json +12 -12
- package/dist/schemas/marquee.json +10 -7
- package/dist/schemas/modalCall.json +81 -3
- package/dist/schemas/modalTemplate.json +28 -25
- package/dist/schemas/numberInput.json +32 -14
- package/dist/schemas/pagination.json +8 -8
- package/dist/schemas/popover.json +12 -12
- package/dist/schemas/radioGroup.json +17 -10
- package/dist/schemas/radioItem.json +12 -5
- package/dist/schemas/select.json +11 -11
- package/dist/schemas/selectItem.json +5 -5
- package/dist/schemas/skeleton.json +10 -7
- package/dist/schemas/spinner.json +11 -4
- package/dist/schemas/switch.json +18 -7
- package/dist/schemas/tab.json +15 -15
- package/dist/schemas/table.json +14 -14
- package/dist/schemas/tableRow.json +5 -5
- package/dist/schemas/tdColumn.json +17 -17
- package/dist/schemas/textArea.json +42 -9
- package/dist/schemas/textInput.json +55 -15
- package/dist/schemas/themeProvider.json +10 -10
- package/dist/schemas/toastOptions.json +81 -0
- package/dist/schemas/toaster.json +48 -3
- package/dist/schemas/tooltip.json +10 -10
- package/dist/schemas/virtualGrid.json +19 -16
- package/dist/schemas/virtualList.json +12 -9
- package/dist/schemas.d.mts +420 -56
- package/dist/schemas.d.ts +420 -56
- package/dist/schemas.js +502 -367
- package/dist/schemas.mjs +498 -368
- package/dist/styles/layer.js +2 -2
- package/dist/styles/layer.mjs +1 -1
- package/dist/styles.css +56 -45
- package/dist/styles.js +2 -2
- package/dist/styles.layered.css +56 -45
- package/dist/styles.mjs +1 -1
- package/dist/text-input.d.mts +1 -1
- package/dist/text-input.d.ts +1 -1
- package/dist/text-input.js +3 -3
- package/dist/text-input.mjs +1 -1
- package/package.json +8 -6
- package/scripts/setup-cursor-rules.cjs +6 -6
- package/dist/chunks/chunk-7AISZYWL.js +0 -7
- package/dist/chunks/chunk-V5OTJP6H.mjs +0 -5
|
@@ -1,117 +1,182 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: "@nexus-cross/design-system component usage rules — mandatory guidelines for AI code generation"
|
|
3
3
|
alwaysApply: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# @nexus-cross/design-system
|
|
7
|
-
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
1. **
|
|
14
|
-
2.
|
|
15
|
-
3.
|
|
16
|
-
4.
|
|
17
|
-
5. **
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
|
43
|
-
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
`
|
|
6
|
+
# @nexus-cross/design-system Component Rules
|
|
7
|
+
|
|
8
|
+
> This project uses `@nexus-cross/design-system`.
|
|
9
|
+
> All generated code MUST follow the rules below.
|
|
10
|
+
|
|
11
|
+
## Core Principles
|
|
12
|
+
|
|
13
|
+
1. **If a UI element matches any component in the mapping guide below, you MUST import and use it from `@nexus-cross/design-system`.**
|
|
14
|
+
2. **Never re-implement a component that already exists.** e.g. use `<Button>` instead of `<button className="...">`.
|
|
15
|
+
3. **Use the `className` prop for style overrides.** Do not add wrapper divs.
|
|
16
|
+
4. **Use `asChild` prop** to change the rendered element (supported by Button, Chip).
|
|
17
|
+
5. **Variant functions can be used standalone** (e.g. `buttonVariants({ variant: 'primary', size: 'lg' })`).
|
|
18
|
+
|
|
19
|
+
## Component Mapping Pre-step (MANDATORY)
|
|
20
|
+
|
|
21
|
+
**Before writing a single line of code**, map every UI element in the design to a NEXUS component.
|
|
22
|
+
|
|
23
|
+
1. Identify **all interactive and visual elements** from the design (Figma / MCP output / screenshot).
|
|
24
|
+
2. For each element, ask: **"Does this map to a component in the mapping guide below?"**
|
|
25
|
+
3. Document the mapping as a table or list, then start coding.
|
|
26
|
+
4. Before using any native HTML element (`<button>`, `<img>`, `<span>`, etc.), you MUST verify there is no NEXUS replacement.
|
|
27
|
+
|
|
28
|
+
Example mapping:
|
|
29
|
+
```
|
|
30
|
+
Detected Element → NEXUS Component
|
|
31
|
+
──────────────────────────────────────────
|
|
32
|
+
Circular profile images (8) → <Avatar>
|
|
33
|
+
Category filter tabs (5) → <Tab>
|
|
34
|
+
Icon-only buttons (4) → <Button variant="ghost">
|
|
35
|
+
Yes/No status badges (12) → <Chip variant="filled" size="sm">
|
|
36
|
+
Search input field (1) → <TextInput>
|
|
37
|
+
Dividers (2) → <Divider>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Component Mapping Guide
|
|
41
|
+
|
|
42
|
+
| UI Element | Component | import |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| Button | `<Button>` | `import { Button } from '@nexus-cross/design-system'` |
|
|
45
|
+
| Text input | `<TextInput>` | `import { TextInput } from '@nexus-cross/design-system'` |
|
|
46
|
+
| Text area | `<TextArea>` | `import { TextArea } from '@nexus-cross/design-system'` |
|
|
47
|
+
| Select / Dropdown | `<Select>` + `<SelectItem>` | `import { Select, SelectItem } from '@nexus-cross/design-system'` |
|
|
48
|
+
| Checkbox | `<CheckBox>` | `import { CheckBox } from '@nexus-cross/design-system'` |
|
|
49
|
+
| Radio group | `<RadioGroup>` + `<RadioItem>` | `import { RadioGroup, RadioItem } from '@nexus-cross/design-system'` |
|
|
50
|
+
| Toggle / Switch | `<Switch>` | `import { Switch } from '@nexus-cross/design-system'` |
|
|
51
|
+
| Chip / Tag / Badge | `<Chip>` | `import { Chip } from '@nexus-cross/design-system'` |
|
|
52
|
+
| Loading spinner | `<Spinner>` | `import { Spinner } from '@nexus-cross/design-system'` |
|
|
53
|
+
| Divider | `<Divider>` | `import { Divider } from '@nexus-cross/design-system'` |
|
|
54
|
+
| Tooltip | `<Tooltip>` | `import { Tooltip } from '@nexus-cross/design-system'` |
|
|
55
|
+
| Popover | `<Popover>` | `import { Popover } from '@nexus-cross/design-system'` |
|
|
56
|
+
| Accordion / Collapsible | `<Accordion>` | `import { Accordion } from '@nexus-cross/design-system'` |
|
|
57
|
+
| Drawer / Bottom sheet | `<Drawer>` | `import { Drawer } from '@nexus-cross/design-system'` |
|
|
58
|
+
| Modal / Dialog | `openModal()` | `import { openModal } from '@nexus-cross/design-system'` |
|
|
59
|
+
| Toast / Notification | `toast()` | `import { toast } from '@nexus-cross/design-system'` |
|
|
60
|
+
| Table | `<Table>` | `import { Table, TableRow, TdColumn } from '@nexus-cross/design-system'` |
|
|
61
|
+
| Infinite scroll | `<InfiniteScroll>` | `import { InfiniteScroll } from '@nexus-cross/design-system'` |
|
|
62
|
+
| Text ellipsis | `<Ellipsis>` | `import { Ellipsis } from '@nexus-cross/design-system'` |
|
|
63
|
+
| Pagination | `<Pagination>` | `import { Pagination } from '@nexus-cross/design-system'` |
|
|
64
|
+
| Number input | `<NumberInput>` | `import { NumberInput } from '@nexus-cross/design-system'` |
|
|
65
|
+
| Avatar / Profile | `<Avatar>` | `import { Avatar } from '@nexus-cross/design-system'` |
|
|
66
|
+
| Counter | `<Counter>` | `import { Counter } from '@nexus-cross/design-system'` |
|
|
67
|
+
| Countdown | `<Countdown>` | `import { Countdown } from '@nexus-cross/design-system'` |
|
|
68
|
+
| Marquee | `<Marquee>` | `import { Marquee } from '@nexus-cross/design-system'` |
|
|
69
|
+
| Tab | `<Tab>` | `import { Tab } from '@nexus-cross/design-system'` |
|
|
70
|
+
| Carousel / Slider | `<Carousel>` | `import { Carousel, CarouselSlide } from '@nexus-cross/design-system'` |
|
|
71
|
+
| Virtual scroll list | `<VirtualList>` | `import { VirtualList } from '@nexus-cross/design-system'` |
|
|
72
|
+
| Virtual scroll grid | `<VirtualGrid>` | `import { VirtualGrid } from '@nexus-cross/design-system'` |
|
|
73
|
+
| Data list | `<DataList>` | `import { DataList } from '@nexus-cross/design-system'` |
|
|
74
|
+
| Skeleton loader | `<Skeleton>` | `import { Skeleton } from '@nexus-cross/design-system'` |
|
|
75
|
+
|
|
76
|
+
## Visual Pattern → Component Mapping
|
|
77
|
+
|
|
78
|
+
The table above maps by Figma element name, which can miss **visual patterns**. If you see any pattern below, you MUST use the corresponding component.
|
|
79
|
+
|
|
80
|
+
| Visual Pattern on Screen | Component | Common Mistake |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| Circular/square profile image, user icon | `<Avatar>` | Using `<Image>` + `rounded-full` manually |
|
|
83
|
+
| Icon-only button (hamburger, X, settings, app launcher, etc.) | `<Button variant="ghost">` or `<Button variant="outlined">` | Using native `<button>` |
|
|
84
|
+
| Horizontal filter/tab group (single selection) | `<Tab>` | Repeating `<button>` manually |
|
|
85
|
+
| Small label / badge / status indicator (Yes/No, Active, New, etc.) | `<Chip>` | Using native `<span>` |
|
|
86
|
+
| Number increment/decrement UI (+/- buttons) | `<NumberInput>` + `numberInputBind` | Using `<input type="number">` + custom buttons |
|
|
87
|
+
| Data list with loading/empty states | `<DataList>` | Using `{list.map()}` + manual conditional rendering |
|
|
88
|
+
| Overflowing text | `<Ellipsis>` | Applying `truncate` / `line-clamp` directly |
|
|
89
|
+
|
|
90
|
+
## Utilities & Hooks
|
|
91
|
+
|
|
92
|
+
| Feature | Usage | import |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| Class merge | `cn()` | `import { cn } from '@nexus-cross/design-system'` |
|
|
95
|
+
| Modal hook | `useModal()` | `import { useModal } from '@nexus-cross/design-system'` |
|
|
96
|
+
| Viewport detection | `useInView()` | `import { useInView } from '@nexus-cross/design-system'` |
|
|
97
|
+
| Device check | `useCheckDevice()` | `import { useCheckDevice } from '@nexus-cross/design-system'` |
|
|
98
|
+
| Outside click | `useClickOutside()` | `import { useClickOutside } from '@nexus-cross/design-system'` |
|
|
99
|
+
|
|
100
|
+
## asChild Pattern
|
|
101
|
+
|
|
102
|
+
Components supporting `asChild`: **Button**, **Chip**
|
|
69
103
|
|
|
70
104
|
```tsx
|
|
71
|
-
// Button
|
|
72
|
-
<Button asChild
|
|
105
|
+
// Render Button as <a>
|
|
106
|
+
<Button asChild variant="primary">
|
|
73
107
|
<a href="/about">About</a>
|
|
74
108
|
</Button>
|
|
75
109
|
|
|
76
|
-
// Chip
|
|
110
|
+
// Render Chip as <li>
|
|
77
111
|
<Chip asChild variant="accent" size="sm">
|
|
78
|
-
<li
|
|
112
|
+
<li>List item</li>
|
|
79
113
|
</Chip>
|
|
80
114
|
```
|
|
81
115
|
|
|
82
|
-
##
|
|
116
|
+
## Using Variant Functions Only
|
|
83
117
|
|
|
84
|
-
|
|
118
|
+
When you only need variant classes without the component:
|
|
85
119
|
|
|
86
120
|
```tsx
|
|
87
|
-
import { buttonVariants } from '@nexus-cross/design-system'
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
href="/link"
|
|
92
|
-
className={buttonVariants({
|
|
93
|
-
semantic: 'primary',
|
|
94
|
-
variant: 'outlined',
|
|
95
|
-
size: 'sm',
|
|
96
|
-
})}
|
|
97
|
-
>
|
|
98
|
-
링크
|
|
121
|
+
import { buttonVariants } from '@nexus-cross/design-system';
|
|
122
|
+
|
|
123
|
+
<a href="/link" className={buttonVariants({ variant: 'outline', size: 'sm' })}>
|
|
124
|
+
Link
|
|
99
125
|
</a>
|
|
100
126
|
```
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
Available variant functions: `buttonVariants`, `chipVariants`, `switchVariants`, `textInputVariants`, `textAreaVariants`, `checkBoxVariants`, `radioGroupVariants`, `radioItemVariants`, `dividerVariants`, `selectTriggerVariants`, `selectContentVariants`, `tooltipContentVariants`, `popoverContentVariants`, `drawerContentVariants`
|
|
129
|
+
|
|
130
|
+
## When Customization Is Needed
|
|
131
|
+
|
|
132
|
+
1. **Style-only difference**: Override with `className` prop.
|
|
133
|
+
2. **Project-specific variant**: Create a project wrapper component that uses the NEXUS component internally.
|
|
134
|
+
3. **Completely different structure**: Use native elements ONLY when NEXUS component props and `className` override **cannot produce the desired result by any means**.
|
|
135
|
+
|
|
136
|
+
### Checklist Before Using Native Elements
|
|
103
137
|
|
|
104
|
-
|
|
138
|
+
Before using any native HTML element (`<button>`, `<img>`, `<span>`, etc.), you MUST confirm all of the following:
|
|
105
139
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
140
|
+
- [ ] No matching component exists in both the "Component Mapping Guide" and "Visual Pattern → Component Mapping" tables above?
|
|
141
|
+
- [ ] Cannot achieve the desired style by passing `className` to a NEXUS component?
|
|
142
|
+
- [ ] Cannot use the NEXUS component by placing surrounding elements (icons, labels) outside of it?
|
|
143
|
+
|
|
144
|
+
### Common Misjudgments (DO NOT make these mistakes)
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
WRONG: "It only has an icon, so it's not a Button"
|
|
148
|
+
RIGHT: → <Button variant="ghost" size="sm"> + icon children
|
|
149
|
+
|
|
150
|
+
WRONG: "There's a filter icon next to it, so Tab structure doesn't match"
|
|
151
|
+
RIGHT: → Place the icon outside and use <Tab>
|
|
152
|
+
|
|
153
|
+
WRONG: "It's a small label, not a Chip"
|
|
154
|
+
RIGHT: → <Chip variant="filled" size="sm"> matches exactly
|
|
155
|
+
|
|
156
|
+
WRONG: "It displays an image directly, not an Avatar"
|
|
157
|
+
RIGHT: → <Avatar src={url} alt={name} size="sm" />
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## className Override Rules
|
|
161
|
+
|
|
162
|
+
`@nexus-cross/design-system` components internally use Tailwind classes with the `nx:` prefix.
|
|
163
|
+
The `cn()` function automatically resolves cross-prefix conflicts, so **consumers should pass regular Tailwind classes without `!` (important).**
|
|
164
|
+
|
|
165
|
+
```tsx
|
|
166
|
+
// CORRECT — pass without !
|
|
167
|
+
<Avatar className="size-9" />
|
|
168
|
+
<Button className="bg-red-500 px-8" />
|
|
169
|
+
|
|
170
|
+
// FORBIDDEN — do not use ! (important modifier)
|
|
171
|
+
<Avatar className="!size-9" />
|
|
172
|
+
<Button className="!bg-red-500 !px-8" />
|
|
173
|
+
```
|
|
109
174
|
|
|
110
|
-
##
|
|
175
|
+
## CSS Import by Environment (Required)
|
|
111
176
|
|
|
112
|
-
|
|
177
|
+
Choose one of two CSS entry points depending on the project environment:
|
|
113
178
|
|
|
114
|
-
|
|
|
179
|
+
| Environment | import |
|
|
115
180
|
|---|---|
|
|
116
181
|
| Tailwind v3 / Plain CSS / CSS Modules | `@nexus-cross/design-system/styles` |
|
|
117
182
|
| Tailwind v4 | `@nexus-cross/design-system/styles/layer` |
|
|
@@ -120,17 +185,18 @@ UI 컴포넌트 스타일은 사용처 환경에 따라 두 가지 entry point
|
|
|
120
185
|
// TW v3 / Plain CSS / CSS Modules
|
|
121
186
|
import '@nexus-cross/design-system/styles'
|
|
122
187
|
|
|
123
|
-
// TW v4 (@layer nexus
|
|
188
|
+
// TW v4 (wrapped in @layer nexus — ensures className utility overrides)
|
|
124
189
|
import '@nexus-cross/design-system/styles/layer'
|
|
125
190
|
```
|
|
126
191
|
|
|
127
|
-
Tailwind v4
|
|
192
|
+
For Tailwind v4 projects, also declare layer order in `globals.css`:
|
|
128
193
|
```css
|
|
129
194
|
@layer base, nexus, components, utilities;
|
|
130
195
|
```
|
|
131
196
|
|
|
132
|
-
##
|
|
197
|
+
## Prohibited
|
|
133
198
|
|
|
134
|
-
- `@nexus-cross/design-system
|
|
135
|
-
- Radix UI, Headless UI
|
|
136
|
-
- `@nexus-cross/design-system`
|
|
199
|
+
- Do NOT re-implement any component that exists in `@nexus-cross/design-system`
|
|
200
|
+
- Do NOT import Radix UI, Headless UI, etc. to build equivalent components
|
|
201
|
+
- Do NOT copy internal implementations of `@nexus-cross/design-system` components
|
|
202
|
+
- **Do NOT use `!` (Tailwind important modifier) in `className` overrides** — `cn()` resolves prefix conflicts automatically
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/styles/.generated/built.ts
|
|
4
|
+
var css = "/*\n * @nexus-cross/design-system \u2014 Pure CSS\n *\n * BEM \uD074\uB798\uC2A4 \uB124\uC774\uBC0D(.nexus-*)\uC73C\uB85C CSS specificity \uAE30\uBC18 \uB3D9\uC791.\n * \uC18C\uBE44\uC790 CSS\uB294 \uB514\uC790\uC778 \uC2DC\uC2A4\uD15C \uC774\uD6C4\uC5D0 \uB85C\uB4DC\uB418\uBBC0\uB85C className\uC73C\uB85C \uC624\uBC84\uB77C\uC774\uB4DC \uAC00\uB2A5.\n */\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Component Tokens (:root)\n \uC18C\uBE44\uC790\uAC00 :root\uC5D0\uC11C \uC624\uBC84\uB77C\uC774\uB4DC \uAC00\uB2A5\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n:root {\n /* \u2500\u2500 Button: Color \u2500\u2500 */\n --color-comp-btn-focus-ring: var(--color-accent-primary);\n\n --color-comp-btn-primary-base: var(--color-accent-primary);\n --color-comp-btn-primary-hover: var(--color-accent-primary-hover);\n --color-comp-btn-primary-pressed: var(--color-accent-primary-pressed);\n --color-comp-btn-primary-on: var(--color-accent-on-primary);\n --color-comp-btn-primary-text: var(\n --color-accent-primary-intense,\n var(--color-accent-primary)\n );\n --color-comp-btn-primary-subtle-fill: var(--color-accent-primary-disabled);\n --color-comp-btn-primary-subtle-bg: var(--color-accent-primary-bg);\n\n --color-comp-btn-secondary-base: var(--color-accent-secondary);\n --color-comp-btn-secondary-hover: var(--color-accent-secondary-hover);\n --color-comp-btn-secondary-pressed: var(--color-accent-secondary-pressed);\n --color-comp-btn-secondary-on: var(--color-accent-on-secondary);\n --color-comp-btn-secondary-text: var(\n --color-accent-secondary-intense,\n var(--color-accent-secondary)\n );\n --color-comp-btn-secondary-subtle-fill: var(\n --color-accent-secondary-disabled\n );\n --color-comp-btn-secondary-subtle-bg: var(--color-accent-secondary-bg);\n\n --color-comp-btn-normal-base: var(--color-surface-subtle);\n --color-comp-btn-normal-hover: var(--color-surface-subtle-hover);\n --color-comp-btn-normal-pressed: var(--color-surface-subtle-hover);\n --color-comp-btn-normal-on: var(--color-text-primary);\n --color-comp-btn-normal-text: var(--color-text-primary);\n --color-comp-btn-normal-subtle-fill: var(--color-surface-subtle);\n --color-comp-btn-normal-subtle-bg: var(--color-surface-subtle-hover);\n --color-comp-btn-normal-border: var(--color-border-default);\n --color-comp-btn-normal-border-hover: var(\n --color-border-default-hover,\n var(--color-border-default)\n );\n\n --color-comp-btn-danger-base: var(--color-status-danger);\n --color-comp-btn-danger-hover: var(--color-status-danger-hover);\n --color-comp-btn-danger-pressed: var(--color-status-danger-pressed);\n --color-comp-btn-danger-on: var(--color-static-white);\n --color-comp-btn-danger-text: var(\n --color-status-danger-intense,\n var(--color-status-danger)\n );\n --color-comp-btn-danger-subtle-fill: var(--color-status-danger-disabled);\n --color-comp-btn-danger-subtle-bg: var(--color-status-danger-bg);\n\n /* \u2500\u2500 Button: Radius \u2500\u2500 */\n --radius-comp-btn-xl: 0.75rem;\n --radius-comp-btn-lg: 0.5rem;\n --radius-comp-btn-md: 0.5rem;\n --radius-comp-btn-sm: 0.25rem;\n\n /* \u2500\u2500 Button: Spacing \u2500\u2500 */\n --spacing-comp-btn-gap: var(--spacing-gap-sm, 0.5rem);\n --spacing-comp-btn-xl-h: 3rem;\n --spacing-comp-btn-xl-px: var(--spacing-padding-lg, 1.5rem);\n --spacing-comp-btn-lg-h: 2.5rem;\n --spacing-comp-btn-lg-px: var(--spacing-padding-lg, 1.5rem);\n --spacing-comp-btn-md-h: 1.875rem;\n --spacing-comp-btn-md-px: var(--spacing-padding-sm, 0.75rem);\n --spacing-comp-btn-sm-px: var(--spacing-padding-xs, 0.5rem);\n --spacing-comp-btn-sm-py: var(--spacing-padding-2xs, 0.25rem);\n\n /* \u2500\u2500 Button: Font \u2500\u2500 */\n --text-comp-btn-xl: var(--text-text-base, 1rem);\n --text-comp-btn-lg: var(--text-text-base, 1rem);\n --text-comp-btn-md: var(--text-text-sm, 0.875rem);\n --text-comp-btn-sm: var(--text-text-xs, 0.75rem);\n\n /* \u2500\u2500 Button: Misc \u2500\u2500 */\n --shadow-comp-btn: none;\n --opacity-comp-btn-disabled: 0.5;\n\n /* \u2500\u2500 Shared: Shadow \u2500\u2500 */\n --shadow-comp-sm: var(--shadow-elevation-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));\n --shadow-comp-md: var(--shadow-elevation-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));\n --shadow-comp-lg: var(--shadow-elevation-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));\n\n /* \u2500\u2500 Shared: Overlay \u2500\u2500 */\n --color-comp-overlay: var(--color-overlay-dim, rgba(0, 0, 0, 0.6));\n\n /* \u2500\u2500 ErrorBoundary \u2500\u2500 */\n --color-comp-error-border: var(--color-status-danger);\n --color-comp-error-bg: var(--color-status-danger-bg, #fef2f2);\n --color-comp-error-text: var(--color-status-danger-intense, #991b1b);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n \uCEF4\uD3EC\uB10C\uD2B8 \uC2A4\uD0C0\uC77C\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n/* \u2500\u2500\u2500 Shared: sr-only \u2500\u2500\u2500 */\n.nexus-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Button\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-comp-btn-gap);\n white-space: nowrap;\n user-select: none;\n box-shadow: var(--shadow-comp-btn);\n transition-property: color, background-color, border-color;\n transition-duration: 200ms;\n}\n.nexus-btn:disabled,\n.nexus-btn[aria-disabled='true'] {\n pointer-events: none;\n opacity: var(--opacity-comp-btn-disabled);\n}\n.nexus-btn:focus-visible {\n outline: 2px solid\n color-mix(in srgb, var(--color-comp-btn-focus-ring) 50%, transparent);\n outline-offset: 2px;\n}\n\n/* Variant: contained */\n.nexus-btn--contained {\n background: var(--_btn-base);\n color: var(--_btn-on);\n}\n.nexus-btn--contained:hover {\n background: var(--_btn-hover);\n}\n.nexus-btn--contained:active {\n background: var(--_btn-pressed);\n}\n\n/* Variant: outlined */\n.nexus-btn--outlined {\n border: 1px solid var(--_btn-border);\n color: var(--_btn-text);\n background: var(--_btn-outlined-bg);\n}\n.nexus-btn--outlined:hover {\n background: var(--_btn-outlined-hover-bg);\n border-color: var(--_btn-border-hover);\n}\n.nexus-btn--outlined:active {\n background: var(--_btn-outlined-pressed-bg);\n border-color: var(--_btn-border-hover);\n}\n\n/* Variant: subtle */\n.nexus-btn--subtle {\n background: var(--_btn-subtle-fill);\n color: var(--_btn-text);\n}\n.nexus-btn--subtle:hover {\n background: var(--_btn-light-bg);\n}\n.nexus-btn--subtle:active {\n background: var(--_btn-light-bg);\n}\n\n/* Variant: ghost */\n.nexus-btn--ghost {\n background: transparent;\n color: var(--_btn-text);\n}\n.nexus-btn--ghost:hover {\n background: var(--_btn-ghost-hover-bg);\n}\n.nexus-btn--ghost:active {\n background: var(--_btn-ghost-pressed-bg);\n}\n\n/* Sizes */\n.nexus-btn--xl {\n height: var(--spacing-comp-btn-xl-h);\n padding-inline: var(--spacing-comp-btn-xl-px);\n font-size: var(--text-comp-btn-xl);\n font-weight: 600;\n border-radius: var(--radius-comp-btn-xl);\n}\n.nexus-btn--lg {\n height: var(--spacing-comp-btn-lg-h);\n padding-inline: var(--spacing-comp-btn-lg-px);\n font-size: var(--text-comp-btn-lg);\n font-weight: 600;\n border-radius: var(--radius-comp-btn-lg);\n}\n.nexus-btn--md {\n height: var(--spacing-comp-btn-md-h);\n padding-inline: var(--spacing-comp-btn-md-px);\n font-size: var(--text-comp-btn-md);\n font-weight: 500;\n border-radius: var(--radius-comp-btn-md);\n}\n.nexus-btn--sm {\n padding-inline: var(--spacing-comp-btn-sm-px);\n padding-block: var(--spacing-comp-btn-sm-py);\n font-size: var(--text-comp-btn-sm);\n font-weight: 500;\n border-radius: var(--radius-comp-btn-sm);\n}\n\n/* Radius override */\n.nexus-btn--circle {\n border-radius: 9999px !important;\n}\n\n/* Semantic palette \u2014 compound selectors (cascade \uBC29\uC9C0) */\n.nexus-btn--primary {\n --_btn-base: var(--color-comp-btn-primary-base);\n --_btn-hover: var(--color-comp-btn-primary-hover);\n --_btn-pressed: var(--color-comp-btn-primary-pressed);\n --_btn-on: var(--color-comp-btn-primary-on);\n --_btn-text: var(--color-comp-btn-primary-text);\n --_btn-subtle-fill: var(--color-comp-btn-primary-subtle-fill);\n --_btn-light-bg: var(--color-comp-btn-primary-subtle-bg);\n --_btn-border: var(--color-accent-primary-focus, var(--color-accent-primary));\n --_btn-border-hover: var(\n --color-accent-primary-focus,\n var(--color-accent-primary)\n );\n --_btn-outlined-bg: var(--color-surface-default);\n --_btn-outlined-hover-bg: var(--color-comp-btn-primary-subtle-bg);\n --_btn-outlined-pressed-bg: var(--color-surface-default);\n --_btn-ghost-hover-bg: var(--color-comp-btn-primary-subtle-bg);\n --_btn-ghost-pressed-bg: var(--color-comp-btn-primary-subtle-fill);\n}\n.nexus-btn--secondary {\n --_btn-base: var(--color-comp-btn-secondary-base);\n --_btn-hover: var(--color-comp-btn-secondary-hover);\n --_btn-pressed: var(--color-comp-btn-secondary-pressed);\n --_btn-on: var(--color-comp-btn-secondary-on);\n --_btn-text: var(--color-comp-btn-secondary-text);\n --_btn-subtle-fill: var(--color-comp-btn-secondary-subtle-fill);\n --_btn-light-bg: var(--color-comp-btn-secondary-subtle-bg);\n --_btn-border: var(\n --color-accent-secondary-focus,\n var(--color-accent-secondary)\n );\n --_btn-border-hover: var(\n --color-accent-secondary-focus,\n var(--color-accent-secondary)\n );\n --_btn-outlined-bg: var(--color-surface-default);\n --_btn-outlined-hover-bg: var(--color-comp-btn-secondary-subtle-bg);\n --_btn-outlined-pressed-bg: var(--color-surface-default);\n --_btn-ghost-hover-bg: var(--color-comp-btn-secondary-subtle-bg);\n --_btn-ghost-pressed-bg: var(--color-comp-btn-secondary-subtle-fill);\n}\n.nexus-btn--normal {\n --_btn-base: var(--color-comp-btn-normal-base);\n --_btn-hover: var(--color-comp-btn-normal-hover);\n --_btn-pressed: var(--color-comp-btn-normal-pressed);\n --_btn-on: var(--color-comp-btn-normal-on);\n --_btn-text: var(--color-comp-btn-normal-text);\n --_btn-subtle-fill: var(--color-comp-btn-normal-subtle-fill);\n --_btn-light-bg: var(--color-comp-btn-normal-subtle-bg);\n --_btn-border: var(--color-comp-btn-normal-border);\n --_btn-border-hover: var(--color-comp-btn-normal-border-hover);\n --_btn-outlined-bg: var(--color-surface-default);\n --_btn-outlined-hover-bg: var(--color-comp-btn-normal-subtle-bg);\n --_btn-outlined-pressed-bg: var(\n --color-surface-pressed,\n var(--color-surface-strong)\n );\n --_btn-ghost-hover-bg: var(--color-comp-btn-normal-subtle-bg);\n --_btn-ghost-pressed-bg: var(\n --color-surface-pressed,\n var(--color-surface-strong)\n );\n}\n.nexus-btn--danger {\n --_btn-base: var(--color-comp-btn-danger-base);\n --_btn-hover: var(--color-comp-btn-danger-hover);\n --_btn-pressed: var(--color-comp-btn-danger-pressed);\n --_btn-on: var(--color-comp-btn-danger-on);\n --_btn-text: var(--color-comp-btn-danger-text);\n --_btn-subtle-fill: var(--color-comp-btn-danger-subtle-fill);\n --_btn-light-bg: var(--color-comp-btn-danger-subtle-bg);\n --_btn-border: var(--color-status-danger-focus, var(--color-status-danger));\n --_btn-border-hover: var(\n --color-status-danger-focus,\n var(--color-status-danger)\n );\n --_btn-outlined-bg: var(--color-surface-default);\n --_btn-outlined-hover-bg: var(--color-comp-btn-danger-subtle-bg);\n --_btn-outlined-pressed-bg: var(--color-surface-default);\n --_btn-ghost-hover-bg: var(--color-comp-btn-danger-subtle-bg);\n --_btn-ghost-pressed-bg: var(--color-comp-btn-danger-subtle-fill);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n TextInput\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n/* \u2500\u2500 Field wrapper \u2500\u2500 */\n.nexus-text-input-field {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.nexus-text-input-field__label {\n font-size: var(--text-text-sm, 0.875rem);\n font-weight: 600;\n color: var(--color-text-muted);\n line-height: 1;\n}\n.nexus-text-input-field__footer {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.nexus-text-input-field__description {\n font-size: var(--text-text-xs, 0.75rem);\n color: var(--color-text-muted);\n line-height: 1.5;\n letter-spacing: -0.12px;\n}\n.nexus-text-input-field__description--error {\n color: var(--color-status-danger);\n}\n.nexus-text-input-field__count {\n font-size: var(--text-text-xs, 0.75rem);\n color: var(--color-text-muted);\n margin-left: auto;\n flex-shrink: 0;\n}\n.nexus-text-input-field__count--error {\n color: var(--color-status-danger);\n}\n\n/* \u2500\u2500 Input box \u2500\u2500 */\n.nexus-text-input {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n border-radius: var(--radius-corner-md, 0.5rem);\n border: 1px solid var(--color-border-default);\n background: var(--color-surface-default);\n font-size: var(--text-text-sm, 0.875rem);\n font-weight: 500;\n line-height: 1;\n color: var(--color-text-primary);\n transition: border-color 200ms, box-shadow 200ms;\n}\n:where(.nexus-text-input) {\n width: 100%;\n}\n.nexus-text-input:hover:not(.nexus-text-input--disabled):not(:focus-within) {\n border-color: var(--color-border-default-hover);\n box-shadow: 0 0 0 0.5px var(--color-border-default-hover);\n}\n.nexus-text-input--default:focus-within {\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 0 0.5px var(--color-accent-primary);\n}\n.nexus-text-input--error {\n border-color: var(--color-status-danger);\n}\n.nexus-text-input--error:focus-within {\n border-color: var(--color-status-danger);\n box-shadow: 0 0 0 0.5px var(--color-status-danger);\n}\n.nexus-text-input--disabled {\n cursor: not-allowed;\n background: var(--color-surface-strong);\n border-color: var(--color-border-medium);\n color: var(--color-text-muted);\n}\n\n/* \u2500\u2500 Sizes \u2500\u2500 */\n.nexus-text-input--xl {\n padding: calc(var(--spacing-padding-md, 1rem) - 1px) var(--spacing-padding-md, 1rem);\n font-size: var(--text-text-base, 1rem);\n}\n.nexus-text-input--lg {\n padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px) var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-base, 1rem);\n}\n.nexus-text-input--md {\n padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px) var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-sm, 0.875rem);\n}\n\n/* \u2500\u2500 Inner elements \u2500\u2500 */\n.nexus-text-input__inner {\n flex: 1;\n min-width: 0;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n}\n.nexus-text-input__inner:focus-visible {\n outline: none;\n}\n.nexus-text-input__inner::placeholder {\n color: var(--color-text-muted);\n}\n.nexus-text-input__icon {\n display: flex;\n flex-shrink: 0;\n color: var(--color-text-muted);\n}\n.nexus-text-input__clear {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n border: none;\n background: transparent;\n color: var(--color-text-muted);\n cursor: pointer;\n padding: 0;\n transition: color 150ms;\n}\n.nexus-text-input__clear:hover {\n color: var(--color-icon-tertiary-hover);\n background: transparent;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n TextArea\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-textarea {\n border-radius: var(--radius-corner-md, 0.375rem);\n border: 1px solid var(--color-border-default);\n background: var(--color-surface-default);\n padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-sm, 0.875rem);\n color: var(--color-text-primary);\n transition-property: border-color;\n transition-duration: 200ms;\n resize: none;\n}\n:where(.nexus-textarea) {\n width: 100%;\n}\n.nexus-textarea::placeholder {\n color: var(--color-text-tertiary);\n}\n.nexus-textarea:focus-visible {\n outline: none;\n}\n.nexus-textarea:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.nexus-textarea--default:focus {\n border-color: var(--color-text-primary);\n}\n.nexus-textarea--error {\n border-color: var(--color-status-danger);\n}\n.nexus-textarea--error:focus {\n border-color: var(--color-status-danger);\n}\n.nexus-textarea-wrap {\n display: flex;\n flex-direction: column;\n}\n.nexus-textarea-count {\n margin-top: 0.25rem;\n text-align: right;\n font-size: var(--text-text-xs, 0.75rem);\n color: var(--color-text-tertiary);\n}\n.nexus-textarea-count__current {\n color: var(--color-text-primary);\n font-weight: 500;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n NumberInput\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-number-input {\n display: flex;\n align-items: center;\n border-radius: var(--radius-corner-md, 0.375rem);\n border: 1px solid var(--color-border-default);\n background: var(--color-surface-default);\n color: var(--color-text-primary);\n transition: border-color 200ms, box-shadow 200ms;\n}\n:where(.nexus-number-input) {\n width: 100%;\n}\n.nexus-number-input:hover:not(.nexus-number-input--disabled):not(:focus-within) {\n box-shadow: 0 0 0 0.5px var(--color-border-default);\n}\n.nexus-number-input--default:focus-within {\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 0 0.5px var(--color-accent-primary);\n}\n.nexus-number-input--error {\n border-color: var(--color-status-danger);\n}\n.nexus-number-input--error:focus-within {\n border-color: var(--color-status-danger);\n box-shadow: 0 0 0 0.5px var(--color-status-danger);\n}\n.nexus-number-input--xl {\n height: 3.5rem;\n font-size: var(--text-text-base, 1rem);\n}\n.nexus-number-input--lg {\n height: 3rem;\n font-size: var(--text-text-base, 1rem);\n}\n.nexus-number-input--md {\n height: 2.5rem;\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-number-input--sm {\n height: 2rem;\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-number-input--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.nexus-number-input__field {\n height: 100%;\n width: 100%;\n min-width: 0;\n flex: 1;\n background: transparent;\n outline: none;\n}\n.nexus-number-input__field::placeholder {\n color: var(--color-text-tertiary);\n}\n.nexus-number-input__field:focus-visible {\n outline: none;\n}\n.nexus-number-input__field--xl {\n padding-inline: var(--spacing-padding-lg, 1.25rem);\n}\n.nexus-number-input__field--lg {\n padding-inline: var(--spacing-padding-md, 1rem);\n}\n.nexus-number-input__field--md {\n padding-inline: var(--spacing-padding-sm, 0.75rem);\n}\n.nexus-number-input__field--sm {\n padding-inline: 0.625rem;\n}\n.nexus-number-input__buttons {\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--color-border-default);\n height: 100%;\n flex-shrink: 0;\n}\n.nexus-number-input__step {\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: center;\n padding-inline: 0.375rem;\n color: var(--color-text-tertiary);\n transition-property: color, background-color;\n transition-duration: 150ms;\n}\n.nexus-number-input__step:hover {\n color: var(--color-text-primary);\n background: var(--color-surface-hover);\n}\n.nexus-number-input__step:disabled {\n opacity: 0.4;\n pointer-events: none;\n}\n.nexus-number-input__step--up {\n border-top-right-radius: var(--radius-corner-md, 0.375rem);\n border-bottom: 1px solid var(--color-border-default);\n}\n.nexus-number-input__step--down {\n border-bottom-right-radius: var(--radius-corner-md, 0.375rem);\n}\n.nexus-number-input__step-icon {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Divider\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-divider {\n flex-shrink: 0;\n border-color: var(--color-border-default);\n}\n.nexus-divider--horizontal {\n width: 100%;\n border-top-width: 1px;\n}\n.nexus-divider--vertical {\n align-self: stretch;\n border-left-width: 1px;\n}\n.nexus-divider--solid {\n border-style: solid;\n}\n.nexus-divider--dashed {\n border-style: dashed;\n}\n.nexus-divider--dotted {\n border-style: dotted;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Avatar\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-avatar {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n background: var(--color-surface-hover);\n color: var(--color-text-tertiary);\n}\n.nexus-avatar--xs {\n width: 1.5rem;\n height: 1.5rem;\n font-size: 10px;\n}\n.nexus-avatar--sm {\n width: 2rem;\n height: 2rem;\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-avatar--md {\n width: 2.5rem;\n height: 2.5rem;\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-avatar--lg {\n width: 3rem;\n height: 3rem;\n font-size: var(--text-text-base, 1rem);\n}\n.nexus-avatar--xl {\n width: 4rem;\n height: 4rem;\n font-size: var(--text-text-lg, 1.125rem);\n}\n.nexus-avatar--circle {\n border-radius: 9999px;\n}\n.nexus-avatar--square {\n border-radius: var(--radius-corner-md, 0.375rem);\n}\n.nexus-avatar__icon--xs {\n width: 1rem;\n height: 1rem;\n}\n.nexus-avatar__icon--sm {\n width: 1.25rem;\n height: 1.25rem;\n}\n.nexus-avatar__icon--md {\n width: 1.5rem;\n height: 1.5rem;\n}\n.nexus-avatar__icon--lg {\n width: 2rem;\n height: 2rem;\n}\n.nexus-avatar__icon--xl {\n width: 2.5rem;\n height: 2.5rem;\n}\n.nexus-avatar__img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Switch\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-switch {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n cursor: pointer;\n border-radius: 9999px;\n transition-property: background-color;\n transition-duration: 200ms;\n border: 2px solid transparent;\n}\n.nexus-switch:has(input:disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.nexus-switch--sm {\n height: 1.25rem;\n width: 2.25rem;\n}\n.nexus-switch--md {\n height: 1.5rem;\n width: 2.75rem;\n}\n.nexus-switch--checked {\n background: var(--color-accent-primary);\n}\n.nexus-switch--unchecked {\n background: var(--color-border-default);\n}\n.nexus-switch__thumb {\n pointer-events: none;\n display: block;\n border-radius: 9999px;\n background: var(--color-static-white);\n box-shadow: var(--shadow-comp-sm);\n transition-property: transform;\n transition-duration: 200ms;\n}\n.nexus-switch__thumb--sm {\n width: 1rem;\n height: 1rem;\n}\n.nexus-switch__thumb--md {\n width: 1.25rem;\n height: 1.25rem;\n}\n.nexus-switch__thumb--sm-on {\n transform: translateX(1rem);\n}\n.nexus-switch__thumb--md-on {\n transform: translateX(1.25rem);\n}\n.nexus-switch__thumb--off {\n transform: translateX(0);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n CheckBox\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-checkbox {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-sm, 0.5rem);\n user-select: none;\n}\n.nexus-checkbox--sm {\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-checkbox--md {\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-checkbox--pointer {\n cursor: pointer;\n}\n.nexus-checkbox--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.nexus-checkbox__box {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--color-border-default);\n transition-property: border-color, background-color;\n transition-duration: 150ms;\n}\n.nexus-checkbox__box:has(~ .nexus-sr-only:disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.nexus-checkbox__box--sm {\n width: 1rem;\n height: 1rem;\n}\n.nexus-checkbox__box--md {\n width: 1.25rem;\n height: 1.25rem;\n}\n.nexus-checkbox__box--square {\n border-radius: var(--radius-corner-sm, 0.25rem);\n}\n.nexus-checkbox__box--round {\n border-radius: 9999px;\n}\n.nexus-checkbox__box--checked {\n border-color: var(--color-accent-primary);\n background: var(--color-accent-primary);\n color: var(--color-static-white);\n}\n.nexus-checkbox__box--unchecked {\n border-color: var(--color-border-default);\n background: var(--color-surface-default);\n}\n.nexus-checkbox__icon--sm {\n width: 0.75rem;\n height: 0.75rem;\n}\n.nexus-checkbox__icon--md {\n width: 0.875rem;\n height: 0.875rem;\n}\n.nexus-checkbox__label {\n color: var(--color-text-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n RadioGroup\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-radio-group {\n display: flex;\n}\n.nexus-radio-group--horizontal {\n flex-direction: row;\n gap: var(--spacing-gap-lg, 1rem);\n}\n.nexus-radio-group--vertical {\n flex-direction: column;\n gap: var(--spacing-gap-sm, 0.5rem);\n}\n.nexus-radio-item {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-sm, 0.5rem);\n user-select: none;\n}\n.nexus-radio-item--sm {\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-radio-item--md {\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-radio-item--pointer {\n cursor: pointer;\n}\n.nexus-radio-item--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.nexus-radio__circle {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n border: 1px solid var(--color-border-default);\n transition-property: border-color;\n transition-duration: 150ms;\n}\n.nexus-radio__circle:has(~ .nexus-sr-only:disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.nexus-radio__circle--sm {\n width: 1rem;\n height: 1rem;\n}\n.nexus-radio__circle--md {\n width: 1.25rem;\n height: 1.25rem;\n}\n.nexus-radio__circle--checked {\n border-color: var(--color-accent-primary);\n color: var(--color-accent-primary);\n}\n.nexus-radio__circle--unchecked {\n border-color: var(--color-border-default);\n background: var(--color-surface-default);\n}\n.nexus-radio__dot {\n border-radius: 9999px;\n background: currentColor;\n}\n.nexus-radio__dot--sm {\n width: 0.375rem;\n height: 0.375rem;\n}\n.nexus-radio__dot--md {\n width: 0.5rem;\n height: 0.5rem;\n}\n.nexus-radio__label {\n color: var(--color-text-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Chip\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n white-space: nowrap;\n font-weight: 500;\n transition-property: color, background-color, border-color;\n transition-duration: 150ms;\n user-select: none;\n border-radius: 9999px;\n border: 1px solid transparent;\n}\n.nexus-chip[aria-disabled='true'] {\n opacity: 0.5;\n pointer-events: none;\n}\n.nexus-chip--default {\n border-color: var(--color-border-default);\n background: var(--color-surface-default);\n color: var(--color-text-primary);\n}\n.nexus-chip--filled {\n border-color: transparent;\n background: var(--color-surface-hover);\n color: var(--color-text-primary);\n}\n.nexus-chip--outline {\n border-color: var(--color-border-default);\n background: transparent;\n color: var(--color-text-primary);\n}\n.nexus-chip--accent {\n border-color: transparent;\n background: color-mix(in srgb, var(--color-accent-primary) 10%, transparent);\n color: var(--color-accent-primary);\n}\n.nexus-chip--sm {\n height: 1.5rem;\n padding-inline: var(--spacing-padding-xs, 0.5rem);\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-chip--md {\n height: 1.75rem;\n padding-inline: 0.625rem;\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-chip--lg {\n height: 2rem;\n padding-inline: var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-chip__close {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n padding: 0.125rem;\n opacity: 0.6;\n transition-property: opacity;\n transition-duration: 150ms;\n}\n.nexus-chip__close:hover {\n opacity: 1;\n}\n.nexus-chip__close-icon {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Pagination\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-pagination {\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-xs, 0.25rem);\n}\n.nexus-pagination--sm {\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-pagination--md {\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-corner-md, 0.375rem);\n font-weight: 500;\n transition-property: color, background-color;\n transition-duration: 150ms;\n user-select: none;\n border: 1px solid transparent;\n}\n.nexus-page-btn:disabled {\n opacity: 0.4;\n pointer-events: none;\n}\n.nexus-page-btn--sm {\n width: 1.75rem;\n height: 1.75rem;\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-page-btn--md {\n width: 2.25rem;\n height: 2.25rem;\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-page-btn--active {\n background: var(--color-accent-primary);\n color: var(--color-static-white);\n border-color: var(--color-accent-primary);\n}\n.nexus-page-btn--inactive {\n color: var(--color-text-primary);\n}\n.nexus-page-btn--inactive:hover {\n background: var(--color-surface-hover);\n}\n.nexus-page-icon--sm {\n width: 0.875rem;\n height: 0.875rem;\n}\n.nexus-page-icon--md {\n width: 1rem;\n height: 1rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Tab\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-tab-list {\n position: relative;\n display: flex;\n border-bottom: 1px solid var(--color-border-default);\n}\n.nexus-tab-list--pill {\n gap: var(--spacing-gap-xs, 0.25rem);\n border-bottom: none;\n background: var(--color-surface-hover);\n border-radius: var(--radius-corner-lg, 0.5rem);\n padding: 0.25rem;\n}\n.nexus-tab-trigger {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n font-weight: 500;\n user-select: none;\n outline: none;\n transition-property: color, background-color, border-color;\n transition-duration: 150ms;\n}\n.nexus-tab-trigger--line {\n padding: 0.625rem var(--spacing-padding-md, 1rem);\n color: var(--color-text-tertiary);\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n}\n.nexus-tab-trigger--line:hover {\n color: var(--color-text-primary);\n}\n.nexus-tab-trigger--line-active {\n color: var(--color-text-primary);\n border-bottom-color: var(--color-accent-primary);\n}\n.nexus-tab-trigger--pill {\n padding: 0.375rem var(--spacing-padding-sm, 0.75rem);\n border-radius: var(--radius-corner-md, 0.375rem);\n color: var(--color-text-tertiary);\n}\n.nexus-tab-trigger--pill:hover {\n color: var(--color-text-primary);\n}\n.nexus-tab-trigger--pill-active {\n color: var(--color-text-primary);\n background: var(--color-surface-default);\n box-shadow: var(--shadow-comp-sm);\n}\n.nexus-tab-trigger--sm {\n font-size: var(--text-text-xs, 0.75rem);\n}\n.nexus-tab-trigger--md {\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-tab-trigger--disabled {\n opacity: 0.4;\n pointer-events: none;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Skeleton\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-skeleton {\n position: relative;\n overflow: hidden;\n background: linear-gradient(\n to right,\n var(--color-surface-hover),\n var(--color-surface-default),\n var(--color-surface-hover)\n );\n background-size: 300% 100%;\n animation: nexus-skeleton-shimmer 2.5s ease-in-out infinite;\n}\n.nexus-skeleton--rect {\n border-radius: var(--radius-corner-md, 0.375rem);\n}\n.nexus-skeleton--circle {\n border-radius: 9999px;\n}\n.nexus-skeleton__children {\n opacity: 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Spinner\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-spinner {\n animation: nexus-spin 1s linear infinite;\n color: currentColor;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n ErrorBoundary\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-error-boundary {\n padding: 1rem;\n border-radius: var(--radius-corner-lg, 0.5rem);\n border: 1px solid var(--color-comp-error-border);\n background: var(--color-comp-error-bg);\n color: var(--color-comp-error-text);\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-error-boundary__title {\n margin: 0;\n font-weight: 600;\n}\n.nexus-error-boundary__message {\n margin: 0.5rem 0 0;\n opacity: 0.8;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Divider & Simple components\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-virtual-scroll {\n overflow: auto;\n}\n.nexus-modal-portal-target {\n position: absolute;\n z-index: 9999;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n DataList\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-datalist-center {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-block: var(--spacing-padding-xl, 2rem);\n}\n.nexus-datalist-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-block: var(--spacing-padding-xl, 2rem);\n font-size: var(--text-text-sm, 0.875rem);\n color: var(--color-text-tertiary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n InfiniteScroll\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-infinite-scroll {\n position: relative;\n}\n.nexus-infinite-sentinel {\n position: relative;\n height: 1px;\n width: 100%;\n}\n.nexus-infinite-spinner {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-block: var(--spacing-padding-md, 1rem);\n}\n.nexus-infinite-spinner-icon {\n width: 1.5rem;\n height: 1.5rem;\n animation: nexus-spin 1s linear infinite;\n border-radius: 9999px;\n border: 2px solid var(--color-border-default);\n border-top-color: var(--color-accent-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Countdown\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-countdown {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-xs, 0.25rem);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-variant-numeric: tabular-nums;\n}\n.nexus-countdown__separator {\n color: var(--color-text-tertiary);\n margin-inline: 0.125rem;\n}\n.nexus-countdown__label {\n color: var(--color-text-tertiary);\n font-size: var(--text-text-xs, 0.75rem);\n margin-left: 0.125rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Select\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-select-trigger {\n position: relative;\n display: flex;\n height: 2.5rem;\n align-items: center;\n justify-content: space-between;\n border-radius: var(--radius-corner-sm, 0.25rem);\n border: 1px solid var(--color-border-default);\n color: var(--color-text-primary);\n font-size: var(--text-text-sm, 0.875rem);\n transition-property: border-color;\n transition-duration: 200ms;\n}\n.nexus-select-trigger:hover {\n border-color: var(--color-border-strong);\n}\n.nexus-select-trigger:has(:disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.nexus-select-trigger::placeholder {\n color: var(--color-text-tertiary);\n}\n.nexus-select-trigger--default {\n background: var(--color-surface-hover);\n}\n.nexus-select-trigger--outline {\n background: var(--color-surface-default);\n}\n.nexus-select-trigger--sm {\n width: 4rem;\n}\n.nexus-select-trigger--md {\n width: 8rem;\n}\n.nexus-select-trigger--lg {\n width: 12rem;\n}\n.nexus-select-trigger--full {\n width: 100%;\n}\n.nexus-select-trigger--justify-end {\n justify-content: flex-end;\n}\n.nexus-select-trigger__display {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n height: 100%;\n width: calc(100% - 30px);\n align-items: center;\n}\n.nexus-select-trigger__inner {\n display: flex;\n height: 100%;\n width: 100%;\n flex-direction: row-reverse;\n align-items: center;\n justify-content: space-between;\n border-radius: var(--radius-corner-sm, 0.25rem);\n padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);\n}\n.nexus-select-trigger__inner:focus {\n outline: none;\n}\n.nexus-select-chevron {\n width: 0.75rem;\n height: 0.75rem;\n opacity: 0.5;\n transition: transform 200ms;\n}\n.nexus-select-chevron--open {\n transform: rotate(180deg);\n}\n\n.nexus-select-content {\n position: relative;\n z-index: 50;\n max-height: 24rem;\n overflow: hidden;\n border-radius: var(--radius-corner-sm, 0.25rem);\n border: 1px solid var(--color-border-default);\n background: var(--color-surface-default);\n box-shadow: var(--shadow-comp-lg);\n transform-origin: top center;\n will-change: transform, opacity;\n}\n.nexus-select-content[data-state='open'] {\n animation: nexus-select-slide-in 150ms ease-out;\n}\n.nexus-select-content[data-state='closed'] {\n animation: nexus-select-slide-out 100ms ease-in forwards;\n}\n@keyframes nexus-select-slide-in {\n from { opacity: 0; transform: translateY(-4px) scaleY(0.96); }\n to { opacity: 1; transform: translateY(0) scaleY(1); }\n}\n@keyframes nexus-select-slide-out {\n from { opacity: 1; transform: translateY(0) scaleY(1); }\n to { opacity: 0; transform: translateY(-4px) scaleY(0.96); }\n}\n.nexus-select-content--sm {\n width: 4rem;\n}\n.nexus-select-content--md {\n width: 8rem;\n}\n.nexus-select-content--lg {\n width: 12rem;\n}\n.nexus-select-content--full {\n width: var(--radix-popper-anchor-width);\n}\n.nexus-select-viewport {\n padding: 0.25rem;\n}\n\n.nexus-select-item {\n position: relative;\n display: flex;\n width: 100%;\n cursor: pointer;\n align-items: center;\n border-radius: var(--radius-corner-sm, 0.25rem);\n padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);\n color: var(--color-text-primary);\n font-size: var(--text-text-sm, 0.875rem);\n transition-property: background-color;\n transition-duration: 150ms;\n outline: none;\n user-select: none;\n}\n.nexus-select-item:hover,\n.nexus-select-item:focus,\n.nexus-select-item[data-highlighted] {\n background: var(--color-surface-hover);\n}\n.nexus-select-item[data-disabled] {\n pointer-events: none;\n opacity: 0.5;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Tooltip\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-tooltip-content {\n z-index: 50;\n display: flex;\n overflow: hidden;\n border-radius: var(--radius-corner-md, 0.375rem);\n padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-sm, 0.875rem);\n}\n.nexus-tooltip--light {\n border: 1px solid var(--color-border-default);\n background: var(--color-static-white);\n color: var(--color-static-black);\n box-shadow: var(--shadow-comp-md);\n}\n.nexus-tooltip--dark {\n border: none;\n background: var(--color-static-black);\n color: var(--color-static-white);\n}\n.nexus-tooltip-arrow--dark {\n fill: var(--color-static-black);\n}\n.nexus-tooltip-arrow--light {\n fill: var(--color-static-white);\n}\n.nexus-tooltip-trigger {\n cursor: default;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Popover\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-popover-content {\n z-index: 50;\n border-radius: var(--radius-corner-lg, 0.5rem);\n border: 1px solid var(--color-border-default);\n padding: var(--spacing-padding-md, 1rem);\n box-shadow: var(--shadow-comp-lg);\n outline: none;\n background: var(--color-surface-default);\n color: var(--color-text-primary);\n transform-origin: var(--radix-popover-content-transform-origin);\n will-change: transform, opacity;\n}\n.nexus-popover-content[data-state='open'] {\n animation: nexus-popover-in 150ms ease-out;\n}\n.nexus-popover-content[data-state='closed'] {\n animation: nexus-popover-out 100ms ease-in forwards;\n}\n@keyframes nexus-popover-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes nexus-popover-out {\n from { opacity: 1; transform: scale(1); }\n to { opacity: 0; transform: scale(0.95); }\n}\n.nexus-popover-arrow {\n fill: var(--color-surface-default);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Drawer\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-drawer-overlay {\n position: fixed;\n inset: 0;\n z-index: 50;\n background: var(--color-comp-overlay);\n}\n.nexus-drawer-overlay--blur-sm {\n backdrop-filter: blur(4px);\n}\n.nexus-drawer-overlay--blur-md {\n backdrop-filter: blur(12px);\n}\n.nexus-drawer-content {\n position: fixed;\n z-index: 50;\n display: flex;\n flex-direction: column;\n background: var(--color-surface-default);\n}\n.nexus-drawer-content--bottom {\n inset-inline: 0;\n bottom: 0;\n margin-top: 6rem;\n border-top-left-radius: 1rem;\n border-top-right-radius: 1rem;\n border-top: 1px solid var(--color-border-default);\n}\n.nexus-drawer-content--top {\n inset-inline: 0;\n top: 0;\n margin-bottom: 6rem;\n border-bottom-left-radius: 1rem;\n border-bottom-right-radius: 1rem;\n border-bottom: 1px solid var(--color-border-default);\n}\n.nexus-drawer-content--left {\n inset-block: 0;\n left: 0;\n margin-right: 6rem;\n width: 85vw;\n max-width: 24rem;\n border-top-right-radius: 1rem;\n border-bottom-right-radius: 1rem;\n border-right: 1px solid var(--color-border-default);\n}\n.nexus-drawer-content--right {\n inset-block: 0;\n right: 0;\n margin-left: 6rem;\n width: 85vw;\n max-width: 24rem;\n border-top-left-radius: 1rem;\n border-bottom-left-radius: 1rem;\n border-left: 1px solid var(--color-border-default);\n}\n.nexus-drawer-handle {\n display: flex;\n justify-content: center;\n}\n.nexus-drawer-handle--bottom {\n padding-top: var(--spacing-padding-md, 1rem);\n}\n.nexus-drawer-handle--top {\n padding-bottom: var(--spacing-padding-md, 1rem);\n}\n.nexus-drawer-handle__bar {\n background: var(--color-border-strong);\n height: 0.375rem;\n width: 3rem;\n border-radius: 9999px;\n}\n.nexus-drawer-title {\n font-size: var(--text-text-lg, 1.125rem);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.nexus-drawer-description {\n font-size: var(--text-text-sm, 0.875rem);\n color: var(--color-text-secondary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Accordion\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-accordion-item {\n border-bottom: 1px solid var(--color-border-default);\n}\n.nexus-accordion-header {\n display: flex;\n}\n.nexus-accordion-trigger {\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: space-between;\n padding-block: var(--spacing-padding-md, 1rem);\n transition: all 150ms;\n}\n.nexus-accordion-trigger[data-state='open'] > .nexus-accordion-chevron {\n transform: rotate(180deg);\n}\n.nexus-accordion-chevron {\n width: 0.75rem;\n height: 0.75rem;\n flex-shrink: 0;\n transition: transform 200ms;\n}\n.nexus-accordion-content {\n overflow: hidden;\n transition: all 200ms;\n}\n.nexus-accordion-content[data-state='open'] {\n animation: nexus-accordion-down 200ms ease-out;\n}\n.nexus-accordion-content[data-state='closed'] {\n animation: nexus-accordion-up 200ms ease-in;\n}\n.nexus-accordion-content__inner {\n padding-top: 0;\n padding-bottom: var(--spacing-padding-md, 1rem);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Ellipsis\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-ellipsis {\n position: relative;\n}\n.nexus-ellipsis__content {\n overflow: hidden;\n transition: height 300ms;\n}\n.nexus-ellipsis__trigger {\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-xs, 0.25rem);\n font-size: var(--text-text-sm, 0.875rem);\n color: var(--color-text-secondary);\n transition-property: color;\n transition-duration: 150ms;\n}\n.nexus-ellipsis__trigger:hover {\n color: var(--color-text-primary);\n}\n.nexus-ellipsis__trigger--expanded > svg {\n transform: rotate(180deg);\n}\n.nexus-ellipsis__chevron {\n width: 0.875rem;\n height: 0.875rem;\n transition: transform 200ms;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Marquee\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-marquee {\n overflow: hidden;\n}\n.nexus-marquee--pause-on-hover:hover > div {\n animation-play-state: paused !important;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Carousel\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-carousel {\n position: relative;\n}\n.nexus-carousel__viewport {\n overflow: hidden;\n}\n.nexus-carousel__container {\n display: flex;\n}\n.nexus-carousel-slide {\n min-width: 0;\n flex-shrink: 0;\n flex-grow: 0;\n flex-basis: 100%;\n}\n.nexus-carousel-btn {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 10;\n width: 2rem;\n height: 2rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n background: var(--color-surface-default);\n border: 1px solid var(--color-border-default);\n box-shadow: var(--shadow-comp-sm);\n color: var(--color-text-primary);\n transition-property: background-color;\n transition-duration: 150ms;\n}\n.nexus-carousel-btn:hover {\n background: var(--color-surface-hover);\n}\n.nexus-carousel-btn:disabled {\n opacity: 0.4;\n pointer-events: none;\n}\n.nexus-carousel-btn--prev {\n left: 0.5rem;\n}\n.nexus-carousel-btn--next {\n right: 0.5rem;\n}\n.nexus-carousel-btn__icon {\n width: 1rem;\n height: 1rem;\n}\n.nexus-carousel-dots {\n display: flex;\n justify-content: center;\n gap: 0.375rem;\n margin-top: var(--spacing-padding-sm, 0.75rem);\n}\n.nexus-carousel-dot {\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 9999px;\n transition-property: background-color;\n transition-duration: 150ms;\n}\n.nexus-carousel-dot--active {\n background: var(--color-accent-primary);\n}\n.nexus-carousel-dot--inactive {\n background: var(--color-border-default);\n}\n.nexus-carousel-dot--inactive:hover {\n background: var(--color-text-tertiary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Toast\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-toast {\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-sm, 0.75rem);\n border-radius: var(--radius-corner-lg, 0.5rem);\n border: 1px solid var(--color-border-default);\n padding: var(--spacing-padding-sm, 0.75rem) var(--spacing-padding-md, 1rem);\n box-shadow: var(--shadow-comp-lg);\n background: var(--color-surface-default);\n color: var(--color-text-primary);\n}\n.nexus-toast__title {\n font-size: var(--text-text-sm, 0.875rem);\n font-weight: 500;\n}\n.nexus-toast__desc {\n font-size: var(--text-text-xs, 0.75rem);\n color: var(--color-text-secondary);\n}\n.nexus-toast--success {\n border-color: color-mix(\n in srgb,\n var(--color-status-positive) 30%,\n transparent\n );\n background: color-mix(in srgb, var(--color-status-positive) 10%, transparent);\n color: var(--color-status-positive);\n}\n.nexus-toast--error {\n border-color: color-mix(\n in srgb,\n var(--color-status-danger) 30%,\n transparent\n );\n background: color-mix(in srgb, var(--color-status-danger) 10%, transparent);\n color: var(--color-status-danger);\n}\n.nexus-toast--warning {\n border-color: color-mix(\n in srgb,\n var(--color-status-caution) 30%,\n transparent\n );\n background: color-mix(in srgb, var(--color-status-caution) 10%, transparent);\n color: var(--color-status-caution);\n}\n.nexus-toast--info {\n border-color: color-mix(\n in srgb,\n var(--color-accent-primary) 30%,\n transparent\n );\n background: color-mix(in srgb, var(--color-accent-primary) 10%, transparent);\n color: var(--color-accent-primary);\n}\n.nexus-toast__action-btn {\n background: var(--color-accent-primary);\n color: var(--color-accent-on-primary);\n border-radius: var(--radius-corner-sm, 0.25rem);\n padding: 0.375rem var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-xs, 0.75rem);\n font-weight: 500;\n}\n.nexus-toast__cancel-btn {\n background: var(--color-surface-hover);\n color: var(--color-text-secondary);\n border-radius: var(--radius-corner-sm, 0.25rem);\n padding: 0.375rem var(--spacing-padding-sm, 0.75rem);\n font-size: var(--text-text-xs, 0.75rem);\n font-weight: 500;\n}\n.nexus-toast__close-btn {\n color: var(--color-text-tertiary);\n}\n.nexus-toast__close-btn:hover {\n color: var(--color-text-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Table\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-table-wrap {\n overflow-x: auto;\n}\n.nexus-table {\n width: 100%;\n}\n.nexus-table-thead {\n display: flex;\n background: var(--color-surface-default);\n}\n.nexus-table-th {\n display: flex;\n}\n.nexus-table-th--sortable {\n cursor: pointer;\n}\n.nexus-table-th__sort-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-xs, 0.25rem);\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n text-align: inherit;\n width: 100%;\n}\n.nexus-table-sort-icon {\n width: 1rem;\n height: 1rem;\n}\n.nexus-table-center {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-block: 3rem;\n}\n.nexus-table-nodata {\n color: var(--color-text-tertiary);\n}\n.nexus-table-loading-icon {\n width: 2rem;\n height: 2rem;\n animation: nexus-spin 1s linear infinite;\n border-radius: 9999px;\n border: 2px solid var(--color-border-default);\n border-top-color: var(--color-accent-primary);\n}\n.nexus-table-skeleton-row {\n display: flex;\n cursor: default;\n}\n.nexus-table-skeleton-td {\n height: 100%;\n width: 100%;\n padding-block: var(--spacing-padding-md, 1rem);\n}\n.nexus-table-skeleton-bar {\n height: 1rem;\n width: 100%;\n}\n\n/* TableRow */\n.nexus-table-row {\n border-bottom: 1px solid var(--color-border-default);\n display: flex;\n min-width: 0;\n}\n.nexus-table-row::-webkit-scrollbar {\n display: none;\n}\n.nexus-table-row--default:hover {\n background: var(--color-surface-hover);\n}\n.nexus-table-row--accent:hover {\n background: color-mix(in srgb, var(--color-accent-primary) 5%, transparent);\n}\n\n/* TdColumn */\n.nexus-td {\n min-width: 0;\n width: 100%;\n}\n.nexus-td__inner {\n border-radius: var(--radius-corner-md, 0.375rem);\n padding: 2px 0.25rem;\n transition-property: background-color;\n transition-duration: 150ms;\n}\n.nexus-td__inner--flex {\n display: flex;\n}\n.nexus-td__inner--highlight {\n background: color-mix(in srgb, var(--color-accent-primary) 10%, transparent);\n outline: 1px dashed var(--color-accent-primary);\n outline-offset: -1px;\n}\n.nexus-td--nowrap {\n white-space: nowrap;\n}\n.nexus-td--truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.nexus-td--wrap {\n white-space: normal;\n overflow-wrap: break-word;\n}\n.nexus-td--break-all {\n white-space: normal;\n word-break: break-all;\n}\n.nexus-td--center {\n text-align: center;\n justify-content: center;\n}\n.nexus-td--left {\n text-align: left;\n justify-content: flex-start;\n}\n.nexus-td--right {\n text-align: right;\n justify-content: flex-end;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Modal\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-modal-wrap {\n pointer-events: none;\n position: fixed;\n inset: 0;\n z-index: 99999;\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n color: var(--color-text-primary);\n}\n.nexus-modal-wrap--bottom-sheet {\n align-items: flex-end;\n}\n.nexus-modal-wrap--slide-left {\n height: 100%;\n justify-content: flex-start;\n}\n.nexus-modal-wrap--slide-right {\n height: 100%;\n justify-content: flex-end;\n}\n.nexus-modal-wrap--full-page,\n.nexus-modal-wrap--full-page-reverse {\n height: 100%;\n justify-content: flex-start;\n}\n\n.nexus-modal-inner {\n position: relative;\n z-index: 2;\n overflow: hidden;\n pointer-events: auto;\n border-radius: var(--radius-corner-lg, 12px);\n border: 1px solid var(--color-border-default);\n background: var(--color-surface-default);\n color: var(--color-text-primary);\n}\n:where(.nexus-modal-inner) {\n width: 100%;\n min-height: 200px;\n}\n.nexus-modal-inner > div {\n display: contents;\n}\n@media (min-width: 640px) {\n :where(.nexus-modal-inner) {\n width: 480px;\n min-height: auto;\n }\n}\n.nexus-modal-inner--bottom-sheet {\n margin: 0;\n width: 100%;\n border-top-left-radius: 1rem;\n border-top-right-radius: 1rem;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top: 1px solid var(--color-border-default);\n padding: 1.5rem 1rem 0;\n}\n.nexus-modal-inner--slide-left,\n.nexus-modal-inner--slide-right {\n height: 100%;\n border-radius: 0;\n}\n.nexus-modal-inner--full-page,\n.nexus-modal-inner--full-page-reverse {\n height: 100%;\n width: 100%;\n border-radius: 0;\n border-color: transparent;\n}\n@media (min-width: 640px) {\n .nexus-modal-inner--full-page,\n .nexus-modal-inner--full-page-reverse {\n width: 100%;\n }\n}\n.nexus-modal-inner--draggable {\n min-width: 320px;\n overflow: visible;\n}\n.nexus-modal-inner--has-footer {\n padding-bottom: 88px;\n}\n.nexus-modal-inner--bottom-sheet.nexus-modal-inner--has-footer {\n padding-bottom: 5rem;\n}\n\n.nexus-modal-header {\n position: relative;\n padding: 1.5rem 1.25rem 0;\n}\n.nexus-modal-header--bottom-sheet {\n padding: 0;\n}\n.nexus-modal-header--draggable {\n cursor: grab;\n user-select: none;\n}\n.nexus-modal-header--draggable:active {\n cursor: grabbing;\n}\n\n.nexus-modal-close-btn {\n position: absolute;\n top: 1.5rem;\n right: 1.25rem;\n z-index: 1;\n margin-left: auto;\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: flex-end;\n}\n.nexus-modal-close-btn--bottom-sheet {\n position: relative;\n top: 0;\n right: 0;\n}\n.nexus-modal-close-icon {\n width: 1.25rem;\n height: 1.25rem;\n color: var(--color-text-muted);\n}\n\n.nexus-modal-title {\n margin: 0;\n padding-right: 42px;\n font-size: var(--text-text-lg, 1.125rem);\n font-weight: 600;\n line-height: 26px;\n letter-spacing: -0.002em;\n color: var(--color-text-primary);\n}\n.nexus-modal-title--bottom-sheet {\n padding-top: 0.375rem;\n line-height: 1.75rem;\n letter-spacing: -0.012em;\n}\n.nexus-modal-desc {\n color: var(--color-text-muted);\n font-size: var(--text-text-xs, 0.75rem);\n margin-top: 0.25rem;\n}\n\n.nexus-modal-body {\n position: relative;\n overflow-y: auto;\n padding: 1.5rem 1.25rem 0;\n}\n.nexus-modal-body::-webkit-scrollbar {\n display: none;\n}\n.nexus-modal-body--no-footer {\n padding-bottom: 1.5rem;\n}\n.nexus-modal-body--bottom-sheet {\n margin-top: 1.5rem;\n max-height: calc(100vh - 108px);\n padding: 0 0 1.5rem;\n}\n.nexus-modal-body--slide,\n.nexus-modal-body--full-page {\n height: 100%;\n max-height: 100%;\n overflow-y: auto;\n}\n.nexus-modal-body--full-page {\n padding-bottom: 0;\n}\n\n.nexus-modal-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n width: 100%;\n padding: 1.5rem 1.25rem 1.25rem;\n}\n.nexus-modal-footer button {\n height: 3rem;\n flex: 1;\n}\n.nexus-modal-footer--bottom-sheet {\n padding: 0.75rem 1rem 1.5rem;\n}\n.nexus-modal-footer--draggable {\n position: relative;\n}\n\n.nexus-modal-dim {\n pointer-events: auto;\n position: fixed;\n inset: 0;\n z-index: 1;\n display: block;\n height: 100vh;\n width: 100vw;\n background: color-mix(\n in srgb,\n var(--color-static-black, #000) 75%,\n transparent\n );\n}\n.nexus-modal-dim--hidden {\n display: none;\n}\n.nexus-modal-dim--draggable {\n background: color-mix(\n in srgb,\n var(--color-static-black, #000) 30%,\n transparent\n );\n}\n\n.nexus-modal-bottom-sheet-handle {\n display: flex;\n width: 100%;\n justify-content: center;\n padding-top: 0.75rem;\n padding-bottom: 0.5rem;\n}\n.nexus-modal-bottom-sheet-bar {\n background: var(--color-border-default);\n height: 0.375rem;\n width: 4rem;\n border-radius: 9999px;\n}\n\n.nexus-modal-component {\n opacity: 0;\n}\n.nexus-modal-component--visible {\n opacity: 1;\n}\n.nexus-modal-component--portal {\n position: relative;\n}\n.nexus-modal-component--enter .nexus-modal-inner {\n animation-direction: var(--modal-animation-direction);\n animation-duration: var(--modal-animation-duration);\n animation-name: var(--modal-animation-name);\n animation-timing-function: var(--modal-animation-timing-function);\n}\n.nexus-modal-component--leave .nexus-modal-inner {\n animation-direction: reverse;\n animation-duration: var(--modal-animation-duration);\n animation-fill-mode: var(--modal-animation-fill-mode);\n animation-name: var(--modal-animation-name);\n animation-timing-function: var(--modal-animation-timing-function);\n}\n\n.nexus-contents {\n display: contents;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Animation utilities (Radix enter/exit)\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.nexus-animate-in {\n animation: nexus-enter 200ms ease-out;\n --nx-enter-opacity: 1;\n --nx-enter-scale: 1;\n --nx-enter-translate-x: 0;\n --nx-enter-translate-y: 0;\n}\n.nexus-animate-out {\n animation: nexus-exit 150ms ease-in forwards;\n --nx-exit-opacity: 1;\n --nx-exit-scale: 1;\n --nx-exit-translate-x: 0;\n --nx-exit-translate-y: 0;\n}\n.nexus-fade-in-0 {\n --nx-enter-opacity: 0;\n}\n.nexus-fade-out-0 {\n --nx-exit-opacity: 0;\n}\n.nexus-zoom-in-95 {\n --nx-enter-scale: 0.95;\n}\n.nexus-zoom-out-95 {\n --nx-exit-scale: 0.95;\n}\n.nexus-slide-in-from-top-2 {\n --nx-enter-translate-y: -0.5rem;\n}\n.nexus-slide-in-from-bottom-2 {\n --nx-enter-translate-y: 0.5rem;\n}\n.nexus-slide-in-from-left-2 {\n --nx-enter-translate-x: -0.5rem;\n}\n.nexus-slide-in-from-right-2 {\n --nx-enter-translate-x: 0.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Keyframes\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n@keyframes nexus-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes nexus-enter {\n from {\n opacity: var(--nx-enter-opacity, 1);\n transform: translate3d(\n var(--nx-enter-translate-x, 0),\n var(--nx-enter-translate-y, 0),\n 0\n )\n scale3d(\n var(--nx-enter-scale, 1),\n var(--nx-enter-scale, 1),\n var(--nx-enter-scale, 1)\n );\n }\n}\n\n@keyframes nexus-exit {\n to {\n opacity: var(--nx-exit-opacity, 1);\n transform: translate3d(\n var(--nx-exit-translate-x, 0),\n var(--nx-exit-translate-y, 0),\n 0\n )\n scale3d(\n var(--nx-exit-scale, 1),\n var(--nx-exit-scale, 1),\n var(--nx-exit-scale, 1)\n );\n }\n}\n\n@keyframes nexus-accordion-down {\n from {\n height: 0;\n }\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n\n@keyframes nexus-accordion-up {\n from {\n height: var(--radix-accordion-content-height);\n }\n to {\n height: 0;\n }\n}\n\n@keyframes nexus-skeleton-shimmer {\n 0% {\n background-position: 300% 0;\n }\n 100% {\n background-position: -300% 0;\n }\n}\n\n@keyframes modal-fade {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes modal-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes modal-scale {\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n}\n\n@keyframes modal-small-scale {\n from {\n transform: scale(0.9);\n }\n to {\n transform: scale(1);\n }\n}\n\n@keyframes modal-pop-fade {\n 0% {\n transform: scale(0.95);\n opacity: 0;\n }\n 60% {\n transform: scale(1.03);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes modal-bottom-sheet {\n from {\n transform: translateY(calc(100% + 60px));\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes modal-slide-left {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes modal-slide-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes modal-full-page {\n from {\n transform: translateY(60%);\n opacity: 0.5;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes modal-full-page-reverse {\n from {\n transform: translateY(-60%);\n opacity: 0.5;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n";
|
|
5
|
+
var built_default = css;
|
|
6
|
+
|
|
7
|
+
exports.built_default = built_default;
|
|
@@ -28,7 +28,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
28
28
|
var textInputVariants = classVarianceAuthority.cva("nexus-text-input", {
|
|
29
29
|
variants: {
|
|
30
30
|
size: {
|
|
31
|
-
sm: "nexus-text-input--sm",
|
|
32
31
|
md: "nexus-text-input--md",
|
|
33
32
|
lg: "nexus-text-input--lg",
|
|
34
33
|
xl: "nexus-text-input--xl"
|
|
@@ -73,7 +72,6 @@ var TextInput = React__namespace.forwardRef(
|
|
|
73
72
|
id,
|
|
74
73
|
...props
|
|
75
74
|
}, ref) => {
|
|
76
|
-
const state = error ? "error" : "default";
|
|
77
75
|
const fallbackId = React__namespace.useRef(
|
|
78
76
|
`nexus-ti-${Math.random().toString(36).slice(2, 9)}`
|
|
79
77
|
);
|
|
@@ -95,6 +93,7 @@ var TextInput = React__namespace.forwardRef(
|
|
|
95
93
|
const currentValue = isControlled ? String(controlledValue) : internalValue;
|
|
96
94
|
const charCount = currentValue.length;
|
|
97
95
|
const isOverLimit = !!(maxLength && charCount > maxLength);
|
|
96
|
+
const state = error || isOverLimit ? "error" : "default";
|
|
98
97
|
const hasField = !!(label || description || showCount);
|
|
99
98
|
const handleChange = React__namespace.useCallback(
|
|
100
99
|
(e) => {
|
|
@@ -119,6 +118,9 @@ var TextInput = React__namespace.forwardRef(
|
|
|
119
118
|
onValueChange?.("");
|
|
120
119
|
input.focus();
|
|
121
120
|
}, [isControlled, onValueChange]);
|
|
121
|
+
const handleWrapperClick = React__namespace.useCallback(() => {
|
|
122
|
+
if (!disabled) inputRef.current?.focus();
|
|
123
|
+
}, [disabled]);
|
|
122
124
|
const inputBox = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
123
125
|
"div",
|
|
124
126
|
{
|
|
@@ -127,6 +129,7 @@ var TextInput = React__namespace.forwardRef(
|
|
|
127
129
|
disabled && "nexus-text-input--disabled",
|
|
128
130
|
!hasField && className
|
|
129
131
|
),
|
|
132
|
+
onClick: handleWrapperClick,
|
|
130
133
|
children: [
|
|
131
134
|
prefixIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "nexus-text-input__icon", children: prefixIcon }),
|
|
132
135
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -136,8 +139,8 @@ var TextInput = React__namespace.forwardRef(
|
|
|
136
139
|
id: label ? inputId : id,
|
|
137
140
|
className: "nexus-text-input__inner",
|
|
138
141
|
disabled,
|
|
139
|
-
maxLength,
|
|
140
|
-
"aria-invalid": error || void 0,
|
|
142
|
+
maxLength: showCount ? void 0 : maxLength,
|
|
143
|
+
"aria-invalid": error || isOverLimit || void 0,
|
|
141
144
|
"aria-describedby": description ? `${inputId}-desc` : void 0,
|
|
142
145
|
value: isControlled ? controlledValue : void 0,
|
|
143
146
|
defaultValue: !isControlled ? defaultValue : void 0,
|
|
@@ -171,7 +174,7 @@ var TextInput = React__namespace.forwardRef(
|
|
|
171
174
|
id: `${inputId}-desc`,
|
|
172
175
|
className: chunkCZC76ZD5_js.cn(
|
|
173
176
|
"nexus-text-input-field__description",
|
|
174
|
-
error && "nexus-text-input-field__description--error"
|
|
177
|
+
(error || isOverLimit) && "nexus-text-input-field__description--error"
|
|
175
178
|
),
|
|
176
179
|
children: description
|
|
177
180
|
}
|
|
@@ -19,10 +19,7 @@ function DataList({
|
|
|
19
19
|
if (!list || loading) {
|
|
20
20
|
if (skeletonElement) {
|
|
21
21
|
return Array.from({ length: skeletonCount }).map(
|
|
22
|
-
(_, index) => React.cloneElement(skeletonElement, {
|
|
23
|
-
...skeletonElement.props,
|
|
24
|
-
key: index
|
|
25
|
-
})
|
|
22
|
+
(_, index) => React.cloneElement(skeletonElement, { key: index })
|
|
26
23
|
);
|
|
27
24
|
}
|
|
28
25
|
return loadingElement ?? /* @__PURE__ */ jsx("div", { className: cn("nexus-datalist-center"), children: /* @__PURE__ */ jsx(Spinner, { size: 32 }) });
|
|
@@ -41,10 +41,7 @@ function DataList({
|
|
|
41
41
|
if (!list || loading) {
|
|
42
42
|
if (skeletonElement) {
|
|
43
43
|
return Array.from({ length: skeletonCount }).map(
|
|
44
|
-
(_, index) => React__namespace.cloneElement(skeletonElement, {
|
|
45
|
-
...skeletonElement.props,
|
|
46
|
-
key: index
|
|
47
|
-
})
|
|
44
|
+
(_, index) => React__namespace.cloneElement(skeletonElement, { key: index })
|
|
48
45
|
);
|
|
49
46
|
}
|
|
50
47
|
return loadingElement ?? /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkCZC76ZD5_js.cn("nexus-datalist-center"), children: /* @__PURE__ */ jsxRuntime.jsx(chunkIOSIQLZL_js.Spinner, { size: 32 }) });
|