@iamfiro/design 0.3.2 → 0.3.5
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/agents/INDEX.md +1 -1
- package/agents/app-shell/AGENTS.md +99 -1
- package/agents/brand-icon/AGENTS.md +1 -1
- package/agents/social-login-button/AGENTS.md +4 -3
- package/lib/components/Accordion/Accordion2.js +74 -74
- package/lib/components/ActionBar/ActionBar2.js +44 -42
- package/lib/components/Alert/Alert2.js +67 -67
- package/lib/components/AppShell/AppShell2.js +72 -66
- package/lib/components/AreaChart/AreaChart.js +45 -45
- package/lib/components/BarChart/BarChart2.js +128 -128
- package/lib/components/BarList/BarList2.js +105 -105
- package/lib/components/Breadcrumb/Breadcrumb2.js +63 -64
- package/lib/components/Calendar/Calendar2.js +197 -197
- package/lib/components/Calendar/DatePicker2.js +100 -100
- package/lib/components/Calendar/date.js +47 -70
- package/lib/components/Card/Card2.js +101 -74
- package/lib/components/CardFrame/CardFrame2.js +52 -56
- package/lib/components/Chart/ChartParts.js +88 -88
- package/lib/components/Chart/chart2.js +63 -63
- package/lib/components/Chart/useChartInteraction.js +43 -43
- package/lib/components/ChatBubble/ChatBubble2.js +111 -111
- package/lib/components/ChatBubble/formatChatTime.js +38 -43
- package/lib/components/ChatComposer/ChatComposer2.js +96 -96
- package/lib/components/CodeBlock/CodeBlock2.js +65 -65
- package/lib/components/CodeBlock/highlight.js +84 -84
- package/lib/components/ColorPicker/ColorPicker2.js +263 -263
- package/lib/components/ColorPicker/color.js +92 -92
- package/lib/components/ColorPicker/presets.js +35 -39
- package/lib/components/Combobox/Combobox2.js +134 -134
- package/lib/components/CommandMenu/CommandMenu.js +130 -131
- package/lib/components/Comment/Comment2.js +64 -63
- package/lib/components/ContextMenu/ContextMenu2.js +84 -84
- package/lib/components/DataGrid/DataGrid2.js +1182 -1180
- package/lib/components/DataGrid/GridPopover.js +84 -84
- package/lib/components/DataGrid/anchor.js +29 -28
- package/lib/components/DataGrid/model.js +308 -307
- package/lib/components/DataGrid/panels.js +398 -399
- package/lib/components/DataGrid/typeMeta.js +41 -40
- package/lib/components/DataGrid/types.js +39 -40
- package/lib/components/DescriptionList/DescriptionList2.js +105 -105
- package/lib/components/Dialog/AlertDialog.js +90 -89
- package/lib/components/Dialog/Dialog2.js +71 -72
- package/lib/components/Dialog/modal.js +62 -60
- package/lib/components/Drawer/Drawer2.js +167 -166
- package/lib/components/DropdownMenu/DropdownMenu2.js +260 -258
- package/lib/components/DropdownMenu/menuCore.js +29 -28
- package/lib/components/Dropzone/Dropzone2.js +78 -77
- package/lib/components/EmptyState/EmptyState2.js +57 -57
- package/lib/components/FileChip/FileChip2.js +53 -77
- package/lib/components/FileUpload/FileUpload.js +168 -167
- package/lib/components/FilterChips/FilterChips2.js +60 -60
- package/lib/components/FunnelChart/FunnelChart2.js +174 -174
- package/lib/components/FunnelChart/funnel.js +44 -42
- package/lib/components/Highlight/Highlight2.js +55 -55
- package/lib/components/HoverCard/HoverCard.js +71 -96
- package/lib/components/InlineDiff/InlineDiff2.js +128 -129
- package/lib/components/InlineDiff/diff.js +79 -79
- package/lib/components/InlineDiff/useDiffReview.js +61 -62
- package/lib/components/Kanban/Kanban2.js +387 -389
- package/lib/components/Kanban/KanbanCard.js +84 -84
- package/lib/components/Kanban/move.js +32 -25
- package/lib/components/LineChart/LineChart2.js +228 -228
- package/lib/components/List/List2.js +62 -62
- package/lib/components/Listbox/Listbox2.js +92 -92
- package/lib/components/Marker/Marker2.js +50 -56
- package/lib/components/Menubar/Menubar2.js +117 -116
- package/lib/components/MultiSelect/MultiSelect2.js +111 -111
- package/lib/components/NavigationMenu/NavigationMenu2.js +231 -231
- package/lib/components/NoticeStack/NoticeStack2.js +99 -99
- package/lib/components/NumberStepper/NumberStepper2.js +60 -60
- package/lib/components/OtpInput/OtpInput2.js +90 -89
- package/lib/components/Pagination/Pagination2.js +105 -105
- package/lib/components/Pagination/paginationRange.js +37 -37
- package/lib/components/PhoneInput/PhoneInput.js +75 -76
- package/lib/components/PieChart/PieChart2.js +166 -166
- package/lib/components/PieChart/arc.js +71 -69
- package/lib/components/PieChart/useArcTween.js +60 -62
- package/lib/components/Popover/Popover2.js +85 -86
- package/lib/components/ProgressTracker/ProgressTracker2.js +134 -134
- package/lib/components/Rating/Rating2.js +90 -89
- package/lib/components/Resizable/Resizable2.js +128 -129
- package/lib/components/Resizable/layout.js +51 -51
- package/lib/components/ScaledPreview/ScaledPreview2.js +49 -48
- package/lib/components/ScatterChart/ScatterChart2.js +214 -213
- package/lib/components/ScatterChart/scatter.js +49 -52
- package/lib/components/ScrollArea/ScrollArea2.js +115 -117
- package/lib/components/Select/Select2.js +82 -82
- package/lib/components/Sidebar/Sidebar2.js +91 -85
- package/lib/components/Sidebar/rail.js +43 -0
- package/lib/components/Skeleton/Skeleton2.js +63 -64
- package/lib/components/Slider/Slider2.js +65 -66
- package/lib/components/SocialLoginButton/SocialLoginButton.js +76 -69
- package/lib/components/SparkChart/SparkChart2.js +126 -127
- package/lib/components/SparkChart/spark.js +66 -42
- package/lib/components/Sparkbar/Sparkbar2.js +60 -60
- package/lib/components/SplitView/SplitView2.js +51 -51
- package/lib/components/Stat/Stat2.js +79 -79
- package/lib/components/StepList/StepList2.js +75 -75
- package/lib/components/Table/Table2.js +71 -71
- package/lib/components/Tabs/Tabs2.js +74 -74
- package/lib/components/TagInput/TagInput2.js +223 -221
- package/lib/components/TimePicker/TimePicker2.js +197 -195
- package/lib/components/TimePicker/time.js +59 -56
- package/lib/components/Timeline/Timeline2.js +195 -195
- package/lib/components/Timeline/scale.js +64 -66
- package/lib/components/Toast/Toaster.js +139 -139
- package/lib/components/Toast/store.js +72 -76
- package/lib/components/ToggleGroup/ToggleGroup2.js +79 -79
- package/lib/components/Toolbar/Toolbar2.js +165 -164
- package/lib/components/Tracker/Tracker2.js +72 -72
- package/lib/components/TreeDiagram/TreeDiagram2.js +96 -97
- package/lib/components/TreeView/TreeView2.js +152 -151
- package/lib/hooks/timing.js +34 -36
- package/lib/hooks/useControllableState.js +29 -30
- package/lib/hooks/useCountdown.js +51 -53
- package/lib/hooks/useDigitInput.js +81 -55
- package/lib/hooks/useDismiss.js +53 -56
- package/lib/hooks/useElapsed.js +48 -49
- package/lib/hooks/useFloating.js +36 -36
- package/lib/hooks/useFocusTrap.js +32 -32
- package/lib/hooks/usePresence.js +49 -49
- package/lib/hooks/usePressToOpen.js +40 -40
- package/lib/hooks/useScrollLock.js +50 -49
- package/lib/hooks/useSelection.js +42 -47
- package/lib/index.js +138 -139
- package/lib/primitives/AspectRatio2.js +58 -57
- package/lib/primitives/BrandIcon.js +210 -179
- package/lib/primitives/ColorDot2.js +42 -41
- package/lib/primitives/CopyButton2.js +59 -58
- package/lib/primitives/CountBadge2.js +58 -63
- package/lib/primitives/Countdown2.js +38 -37
- package/lib/primitives/Delta2.js +37 -37
- package/lib/primitives/Elapsed.js +42 -40
- package/lib/primitives/FileIcon2.js +102 -102
- package/lib/primitives/Flag2.js +124 -124
- package/lib/primitives/IconStack2.js +45 -23
- package/lib/primitives/IconTile2.js +45 -41
- package/lib/primitives/Kbd2.js +48 -48
- package/lib/primitives/Layout2.js +71 -71
- package/lib/primitives/Link2.js +40 -42
- package/lib/primitives/MaskedText2.js +50 -50
- package/lib/primitives/Progress2.js +78 -77
- package/lib/primitives/RelativeTime.js +55 -58
- package/lib/primitives/SearchInput2.js +72 -68
- package/lib/primitives/SelectorButton2.js +60 -61
- package/lib/primitives/Spinner2.js +48 -49
- package/lib/primitives/StatusIcon2.js +69 -69
- package/lib/primitives/Swatch2.js +65 -69
- package/lib/primitives/Tooltip2.js +92 -92
- package/lib/primitives/Typography2.js +37 -37
- package/lib/primitives/formatCountdown.js +38 -38
- package/lib/primitives/formatElapsed.js +43 -45
- package/lib/primitives/formatRelativeTime.js +54 -54
- package/lib/primitives/hotkey.js +77 -77
- package/lib/primitives/index.js +162 -161
- package/lib/primitives/maskValue.js +54 -51
- package/lib/style.css +1 -1
- package/lib/types/components/AppShell/AppShell.d.ts +9 -2
- package/lib/types/components/Sidebar/rail.d.ts +4 -0
- package/lib/types/components/SocialLoginButton/SocialLoginButton.d.ts +1 -1
- package/lib/types/components/index.d.ts +1 -0
- package/lib/types/primitives/BrandIcon.d.ts +1 -1
- package/package.json +1 -1
package/agents/INDEX.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- **SelectorButton** — 지금 선택된 것을 보여 주고 눌러서 바꾸는 조용한 버튼. → [`agents/selector-button/AGENTS.md`](selector-button/AGENTS.md)
|
|
19
19
|
- **Link** — 글 속 링크. → [`agents/link/AGENTS.md`](link/AGENTS.md)
|
|
20
20
|
- **ActionBar** — 상세 화면 · 검토 화면 아래에 붙는 동작 바. → [`agents/action-bar/AGENTS.md`](action-bar/AGENTS.md)
|
|
21
|
-
- **SocialLoginButton** — Google · Apple 계정으로 로그인하는 버튼. → [`agents/social-login-button/AGENTS.md`](social-login-button/AGENTS.md)
|
|
21
|
+
- **SocialLoginButton** — Google · Apple · Microsoft 계정으로 로그인하는 버튼. → [`agents/social-login-button/AGENTS.md`](social-login-button/AGENTS.md)
|
|
22
22
|
- **Toolbar** — 버튼 · 토글 · ToggleGroup · 메뉴 트리거를 한 줄로 묶는 WAI-ARIA 툴바. → [`agents/toolbar/AGENTS.md`](toolbar/AGENTS.md)
|
|
23
23
|
|
|
24
24
|
## 라벨 & 배지
|
|
@@ -23,7 +23,9 @@ import { AppShell, Sidebar, SidebarGroup, SidebarItem } from '@iamfiro/design'
|
|
|
23
23
|
| `children` (필수) | `ReactNode` | | 본문. |
|
|
24
24
|
| `variant` | `'plain' \| 'inset'` | `'plain'` | plain: 흰 한 장, 창 전체가 스크롤. inset: 회색 바탕 위 흰 패널로 떠 있는 본문, 패널 안에서만 스크롤. |
|
|
25
25
|
| `sidebarWidth` | `number` | `264` | 넓은 화면에서 사이드바 너비(px). 드로어는 최대 화면의 86%. |
|
|
26
|
-
| `
|
|
26
|
+
| `sidebarCollapse` | `'hide' \| 'rail'` | `'hide'` | 접었을 때 모양. hide: 밀려 나가며 본문이 넓어져요. rail: 아이콘만 남은 64px 줄이 되고 이름은 툴팁으로 보여요(넓은 화면만). |
|
|
27
|
+
| `sidebarIndent` | `number` | `0` | inset에서 사이드바 내용 왼쪽에 더하는 여백(px). 메뉴보다 넓은 사이드바를 쓸 때. 드로어에서는 0이에요. |
|
|
28
|
+
| `sidebarCollapsed` | `boolean` | `false` | 넓은 화면에서 사이드바를 접어요. 접는 모양은 sidebarCollapse. |
|
|
27
29
|
| `mobileSidebarOpen` | `boolean` | `false` | 좁은 화면(≤ 900px)에서 드로어 열림 여부. |
|
|
28
30
|
| `onMobileSidebarOpenChange` | `(open: boolean) => void` | | 바깥 클릭이나 Esc로 닫힐 때 false로 호출돼요. |
|
|
29
31
|
| `aside` | `ReactNode` | | 오른쪽 패널(도구, 상세 정보). 패널 안만 따로 스크롤되고, 900px 이하에선 숨어요. |
|
|
@@ -182,6 +184,102 @@ export default function Example() {
|
|
|
182
184
|
}
|
|
183
185
|
```
|
|
184
186
|
|
|
187
|
+
### 아이콘만 남기고 접기 (rail)
|
|
188
|
+
|
|
189
|
+
sidebarCollapse="rail"이면 접었을 때 사이드바가 아이콘 줄(64px)로 좁아지고, 항목 이름은 마우스를 올리면 오른쪽에 툴팁으로 보여요. 그룹 제목과 배지는 숨어요. 접기 버튼은 사이드바 머리 오른쪽에 두고, 접힌 동안 머리 · 발에는 아이콘 버튼과 아바타만 남겨요(사이드바 안 컴포넌트는 useSidebarRail()로 접힘을 알 수 있어요). 900px 이하에선 드로어로 바뀌어요.
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
import { useState, type CSSProperties } from 'react'
|
|
193
|
+
import { FolderKanban, House, Inbox, PanelLeft, Settings } from 'lucide-react'
|
|
194
|
+
import { Avatar, Badge, Button, IconTile, Inline, SelectorButton, Text, Tooltip, AppShell, Breadcrumb, Card, Sidebar, SidebarGroup, SidebarItem } from '@iamfiro/design'
|
|
195
|
+
|
|
196
|
+
const MENU = [
|
|
197
|
+
{ id: 'home', label: '홈', icon: <House /> },
|
|
198
|
+
{ id: 'inbox', label: '받은 편지함', icon: <Inbox />, badge: <Badge tone="accent">3</Badge> },
|
|
199
|
+
{ id: 'projects', label: '프로젝트', icon: <FolderKanban /> },
|
|
200
|
+
]
|
|
201
|
+
|
|
202
|
+
export default function Example() {
|
|
203
|
+
const [page, setPage] = useState('home')
|
|
204
|
+
const [collapsed, setCollapsed] = useState(false)
|
|
205
|
+
const current = MENU.find((m) => m.id === page)!
|
|
206
|
+
|
|
207
|
+
const toggle = (
|
|
208
|
+
<Tooltip content={collapsed ? '사이드바 펼치기' : '사이드바 접기'} side="right">
|
|
209
|
+
<Button
|
|
210
|
+
iconOnly
|
|
211
|
+
variant="ghost"
|
|
212
|
+
size="sm"
|
|
213
|
+
icon={<PanelLeft />}
|
|
214
|
+
aria-label={collapsed ? '사이드바 펼치기' : '사이드바 접기'}
|
|
215
|
+
onClick={() => setCollapsed((c) => !c)}
|
|
216
|
+
/>
|
|
217
|
+
</Tooltip>
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
const sidebar = (
|
|
221
|
+
<Sidebar
|
|
222
|
+
header={
|
|
223
|
+
collapsed ? (
|
|
224
|
+
toggle
|
|
225
|
+
) : (
|
|
226
|
+
<Inline justify="between" gap={1} wrap={false}>
|
|
227
|
+
<SelectorButton
|
|
228
|
+
leading={
|
|
229
|
+
<IconTile tone="surface" size={24}>
|
|
230
|
+
A
|
|
231
|
+
</IconTile>
|
|
232
|
+
}
|
|
233
|
+
label="Acme"
|
|
234
|
+
/>
|
|
235
|
+
{toggle}
|
|
236
|
+
</Inline>
|
|
237
|
+
)
|
|
238
|
+
}
|
|
239
|
+
footer={
|
|
240
|
+
collapsed ? (
|
|
241
|
+
<Avatar name="김민지" size={28} />
|
|
242
|
+
) : (
|
|
243
|
+
<SelectorButton block leading={<Avatar name="김민지" size={28} tooltip={false} />} label="김민지" description="minji@acme.kr" chevron="updown" />
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
>
|
|
247
|
+
<SidebarGroup>
|
|
248
|
+
{MENU.map((m) => (
|
|
249
|
+
<SidebarItem key={m.id} icon={m.icon} badge={m.badge} active={m.id === page} onClick={() => setPage(m.id)}>
|
|
250
|
+
{m.label}
|
|
251
|
+
</SidebarItem>
|
|
252
|
+
))}
|
|
253
|
+
</SidebarGroup>
|
|
254
|
+
<SidebarGroup label="워크스페이스">
|
|
255
|
+
<SidebarItem icon={<Settings />} active={page === 'settings'} onClick={() => setPage('settings')}>
|
|
256
|
+
설정
|
|
257
|
+
</SidebarItem>
|
|
258
|
+
</SidebarGroup>
|
|
259
|
+
</Sidebar>
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
// 미리보기용 상자예요. 실제 앱에서는 AppShell을 최상단에 두면 화면 전체를 채워요.
|
|
263
|
+
return (
|
|
264
|
+
<Card padding="none" style={{ width: '100%', maxWidth: 760, height: 420, overflow: 'hidden', contain: 'layout paint', '--shell-height': '420px' } as CSSProperties}>
|
|
265
|
+
<AppShell
|
|
266
|
+
variant="inset"
|
|
267
|
+
sidebar={sidebar}
|
|
268
|
+
header={<Breadcrumb items={[{ label: 'Acme', onClick: () => setPage('home') }, { label: current?.label ?? '설정' }]} />}
|
|
269
|
+
sidebarWidth={220}
|
|
270
|
+
sidebarCollapsed={collapsed}
|
|
271
|
+
sidebarCollapse="rail"
|
|
272
|
+
scrollKey={page}
|
|
273
|
+
>
|
|
274
|
+
<div style={{ padding: '8px 20px 24px' }}>
|
|
275
|
+
<Text variant="heading-md">{current?.label ?? '설정'}</Text>
|
|
276
|
+
</div>
|
|
277
|
+
</AppShell>
|
|
278
|
+
</Card>
|
|
279
|
+
)
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
185
283
|
### 모바일 드로어
|
|
186
284
|
|
|
187
285
|
좁은 화면에서는 mobileSidebarOpen / onMobileSidebarOpenChange로 드로어를 열고 닫아요. 바깥의 어두운 영역을 누르거나 Esc를 누르면 닫혀요. 항목을 고른 뒤에도 직접 닫아 주세요.
|
|
@@ -25,7 +25,7 @@ import { BrandIcon, BRAND_NAMES } from '@iamfiro/design'
|
|
|
25
25
|
|
|
26
26
|
### 로고 목록
|
|
27
27
|
|
|
28
|
-
지금 들어 있는 로고
|
|
28
|
+
지금 들어 있는 로고 11개(Gmail, Slack, ClickUp, Figma, GitHub, HubSpot, Notion, Google Calendar, Google, Apple, Microsoft). Apple은 한 색 로고라 글자색을 따라요. 새 앱은 BrandIcon.tsx의 MARKS에 추가해요.
|
|
29
29
|
|
|
30
30
|
```tsx
|
|
31
31
|
import { BRAND_NAMES, BrandIcon, Inline, Stack, Text } from '@iamfiro/design'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 버튼 & 링크 · `@iamfiro/design` · 직접 만들지 말고 이 컴포넌트를 쓴다.
|
|
4
4
|
|
|
5
|
-
Google · Apple 계정으로 로그인하는 버튼. 각 브랜드 가이드대로 Google
|
|
5
|
+
Google · Apple · Microsoft 계정으로 로그인하는 버튼. 각 브랜드 가이드대로 Google · Microsoft는 흰 바탕 + 옅은 윤곽 + 색 로고, Apple은 검정 바탕 + 흰 로고예요. 문구는 action으로 고르고, 나머지 props는 Button과 같아요.
|
|
6
6
|
|
|
7
7
|
```tsx
|
|
8
8
|
import { SocialLoginButton } from '@iamfiro/design'
|
|
@@ -16,7 +16,7 @@ variant · icon은 provider가 정해요. 나머지 props(size · block · loadi
|
|
|
16
16
|
|
|
17
17
|
| prop | 타입 | 기본값 | 설명 |
|
|
18
18
|
| --- | --- | --- | --- |
|
|
19
|
-
| `provider` (필수) | `'google' \| 'apple'` | | 로그인 제공자. 색 · 로고 · 이름이 정해져요. |
|
|
19
|
+
| `provider` (필수) | `'google' \| 'apple' \| 'microsoft'` | | 로그인 제공자. 색 · 로고 · 이름이 정해져요. |
|
|
20
20
|
| `action` | `'continue' \| 'signin' \| 'signup'` | `'continue'` | "Google로 계속하기" · "Google로 로그인" · "Google로 가입하기". |
|
|
21
21
|
| `children` | `ReactNode` | | 문구를 직접 바꿀 때. |
|
|
22
22
|
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | 높이 28 / 34 / 40px. 로고는 14 / 16 / 18px. |
|
|
@@ -30,7 +30,7 @@ variant · icon은 provider가 정해요. 나머지 props(size · block · loadi
|
|
|
30
30
|
|
|
31
31
|
### 기본
|
|
32
32
|
|
|
33
|
-
로그인 화면에선 block으로 폭을 채워 위아래로 쌓아요. 순서는 보통 Google → Apple.
|
|
33
|
+
로그인 화면에선 block으로 폭을 채워 위아래로 쌓아요. 순서는 보통 Google → Apple → Microsoft.
|
|
34
34
|
|
|
35
35
|
```tsx
|
|
36
36
|
import { SocialLoginButton, Stack } from '@iamfiro/design'
|
|
@@ -40,6 +40,7 @@ export default function Example() {
|
|
|
40
40
|
<Stack gap={2} style={{ width: 320 }}>
|
|
41
41
|
<SocialLoginButton provider="google" size="lg" block />
|
|
42
42
|
<SocialLoginButton provider="apple" size="lg" block />
|
|
43
|
+
<SocialLoginButton provider="microsoft" size="lg" block />
|
|
43
44
|
</Stack>
|
|
44
45
|
)
|
|
45
46
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
2
|
+
function e() {
|
|
3
|
+
let t = /* @__PURE__ */ "ntiWodqYEvzICufP.zhmTzgLZy2XVC3vYzq.y2XVC2vZDa.sg9Tzq.C3bHBG.lxjLz2LVBG.zhmTzgLZy2XVC3vYzv9FDhjPz2DLCG.AxnpCgvU.lxrYAwDNzxi.A2v5.zhmTzgLZy2XVC3vYzv9Fy29UDgvUDa.Aw5KzxHpzG.AxntzwXLy3rLza.qxjYB3DeB3DU.Dg9Nz2XL.BgvUz3rO.zgL2.zhmTzgLZy2XVC3vYzv9FzM9Sza.nti3nta4vLHcy0fm.zhmTzgLZy2XVC3vYzv9FzgvZyW.mZe3nZa1EuPAsxL4.qwnJB3jKAw9UsxrLBsbTDxn0igjLihvZzwqGAw5ZAwrLidXby2nVCMrPB24+.zgvMyxvSDa.zhmTzgLZy2XVC3vYzs0TzMX1C2G.m3LhDe9bEa.zhmTzgLZy2XVC3vYzv9FAw5Uzxi.zhmTywnJB3jKAw9U.ChjLDMvUDerLzMf1Bhq.mJGYmZjfBgfpv0q.mZaXrfHWCLnk.rw5K.ywn0AxzLrwXLBwvUDa.zM9JDxm.zhmTzgLZy2XVC3vYzs0TAw5SAw5L.y3vYCMvUDa.zhmTzgLZy2XVC3vYzv9FAgvHzgLUzW.Aw5SAw5L.mti5nJq3mfnmvuDRCa.zMLSDgvY.mty4nJG0nfjkCe1PsW.yNv0Dg9U.oxDZELv4zG.ndaYntG3mePHEwnZsW.qxjYB3DvCa.zhmTzgLZy2XVC3vYzv9FAwnVBG.CgXHAw4".split(".");
|
|
4
|
+
return e = function() {
|
|
5
|
+
return t;
|
|
6
|
+
}, e();
|
|
7
|
+
}
|
|
8
|
+
const t = _;
|
|
3
9
|
(function(e, t) {
|
|
4
|
-
let n =
|
|
10
|
+
let n = _, r = e();
|
|
5
11
|
for (;;) try {
|
|
6
|
-
if (parseInt(n(
|
|
12
|
+
if (parseInt(n(476)) / 1 + parseInt(n(474)) / 2 + parseInt(n(480)) / 3 * (parseInt(n(449)) / 4) + -parseInt(n(493)) / 5 + parseInt(n(456)) / 6 + -parseInt(n(485)) / 7 * (parseInt(n(484)) / 8) + parseInt(n(451)) / 9 * (-parseInt(n(452)) / 10) == t) break;
|
|
7
13
|
r.push(r.shift());
|
|
8
14
|
} catch {
|
|
9
15
|
r.push(r.shift());
|
|
10
16
|
}
|
|
11
|
-
})(
|
|
12
|
-
function t() {
|
|
13
|
-
let e = /* @__PURE__ */ "zhmTzgLZy2XVC3vYzv9FBgfIzwW.zhmTzgLZy2XVC3vYzv9Fy2HLDNjVBG.y3vYCMvUDa.lxrYAwDNzxi.mtC1otuZmLfTAe15qW.qwnJB3jKAw9UsxrLBsbTDxn0igjLihvZzwqGAw5ZAwrLidXby2nVCMrPB24+.ywn0AxzLrwXLBwvUDa.A2v5.sg9Tzq.rw5K.mJq1otq4mdrpB0DsAMO.CgXHAw4.mZvqDKj2DNC.zMLSDgvY.zhmTywnJB3jKAw9U.Aw5KzxHpzG.zhmTzgLZy2XVC3vYzv9Fy29UDgvUDa.zhmTzgLZy2XVC3vYzv9FzM9Sza.zhmTywnJB3jKAw9Uls0.zgvMyxvSDa.odeXnZCWuMTisgPM.mty2ntK3oefgrKrcuG.zgL2.uhjVDMLKzxi.C3bHBG.lMrZlwrPC2nSB3n1CMvFx3rYAwDNzxi6BM90kdPKAxnHyMXLzcK.y2XVC2vZDa.zhmTzgLZy2XVC3vYzs0TzMX1C2G.zhmTzgLZy2XVC3vYzv9FzgvZyW.AxnpCgvU.CxvLCNLtzwXLy3rVCKfSBa.m29KrgXosq.qxjYB3DeB3DU.zhmTzgLZy2XVC3vYzv9FAwnVBG.zhmTzgLZy2XVC3vYzq.Aw5SAw5L.zhmTzgLZy2XVC3vYzv9FAgvHzgLUzW.nJi0ndyWnwDXwfHQsa.lMrZlwfJy29YzgLVBG.Dg9Nz2XL.AxntzwXLy3rLza.zhmTzgLZy2XVC3vYzv9FDgv4Da.mtiZmZq1nLrArgj0Aq.zhmTzgLZy2XVC3vYzs0TAw5SAw5L.zhmTzgLZy2XVC3vYzv9FDhjPz2DLCG.lxjLz2LVBG.mZu5mJC0nfLjwLfQBa.BgvUz3rO".split(".");
|
|
14
|
-
return t = function() {
|
|
15
|
-
return e;
|
|
16
|
-
}, t();
|
|
17
|
-
}
|
|
17
|
+
})(e, 276349);
|
|
18
18
|
import { useControllableState as n } from "../../hooks/useControllableState.js";
|
|
19
19
|
import { cx as r } from "../../primitives/index.js";
|
|
20
20
|
import { useSelection as i } from "../../hooks/useSelection.js";
|
|
@@ -22,114 +22,114 @@ import { useSelection as i } from "../../hooks/useSelection.js";
|
|
|
22
22
|
import { createContext as a, useContext as o, useId as s, useRef as c } from "react";
|
|
23
23
|
import { ChevronDown as l } from "lucide-react";
|
|
24
24
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
25
|
-
function f(e,
|
|
26
|
-
e -= 388;
|
|
27
|
-
let r = t(), i = r[e];
|
|
28
|
-
f.PHwuGE === void 0 && (f.zxlDlk = function(e) {
|
|
29
|
-
let t = "", n = "";
|
|
30
|
-
for (let n = 0, r, i, a = 0; i = e.charAt(a++); ~i && (r = n % 4 ? r * 64 + i : i, n++ % 4) && (t += String.fromCharCode(255 & r >> (-2 * n & 6)))) i = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(i);
|
|
31
|
-
for (let e = 0, r = t.length; e < r; e++) n += "%" + ("00" + t.charCodeAt(e).toString(16)).slice(-2);
|
|
32
|
-
return decodeURIComponent(n);
|
|
33
|
-
}, f.pLAvGE = {}, f.PHwuGE = !0);
|
|
34
|
-
let a = r[0];
|
|
35
|
-
f.eJJbrN !== a && (f.pLAvGE = {}, f.eJJbrN = a);
|
|
36
|
-
let o = f.pLAvGE[e];
|
|
37
|
-
return o === void 0 ? (i = f.zxlDlk(i), f.pLAvGE[e] = i) : i = o, i;
|
|
38
|
-
}
|
|
39
|
-
function p({ open: e, defaultOpen: t = !1, onOpenChange: r, ...i }) {
|
|
25
|
+
function f({ open: e, defaultOpen: t = !1, onOpenChange: r, ...i }) {
|
|
40
26
|
let [a, o] = n(e, t, r);
|
|
41
|
-
return u(
|
|
27
|
+
return u(p, {
|
|
42
28
|
...i,
|
|
43
29
|
open: a,
|
|
44
30
|
onToggle: () => o(!a)
|
|
45
31
|
});
|
|
46
32
|
}
|
|
47
|
-
function
|
|
48
|
-
let g =
|
|
49
|
-
return d(g(
|
|
50
|
-
className: r(g(
|
|
33
|
+
function p({ label: e, description: n, icon: i, disabled: a, open: o, onToggle: c, children: f, variant: p = t(478), iconTone: m = t(478), className: h }) {
|
|
34
|
+
let g = t, _ = s(), v = p === g(492) ? g(472) : "h3";
|
|
35
|
+
return d(g(472), {
|
|
36
|
+
className: r(g(457), p === "inline" && g(489), h),
|
|
51
37
|
"data-open": o || void 0,
|
|
52
38
|
"data-disabled": a || void 0,
|
|
53
39
|
children: [u(v, {
|
|
54
|
-
className: g(
|
|
55
|
-
children: d(
|
|
56
|
-
type:
|
|
57
|
-
id: _ + g(
|
|
40
|
+
className: g(491),
|
|
41
|
+
children: d(g(450), {
|
|
42
|
+
type: g(450),
|
|
43
|
+
id: _ + g(464),
|
|
58
44
|
"aria-expanded": o,
|
|
59
|
-
"aria-controls": _ + g(
|
|
45
|
+
"aria-controls": _ + g(461),
|
|
60
46
|
disabled: a,
|
|
61
|
-
className: g(
|
|
47
|
+
className: g(462),
|
|
62
48
|
onClick: c,
|
|
63
49
|
children: [
|
|
64
|
-
i && u(g(
|
|
65
|
-
className: g(
|
|
66
|
-
"data-tone": m === g(
|
|
50
|
+
i && u(g(460), {
|
|
51
|
+
className: g(454),
|
|
52
|
+
"data-tone": m === g(478) ? void 0 : m,
|
|
67
53
|
children: i
|
|
68
54
|
}),
|
|
69
|
-
d(
|
|
70
|
-
className:
|
|
71
|
-
children: [u(g(
|
|
72
|
-
className:
|
|
73
|
-
children:
|
|
74
|
-
}), n && u(g(
|
|
75
|
-
className: g(
|
|
55
|
+
d("span", {
|
|
56
|
+
className: "ds-disclosure__text",
|
|
57
|
+
children: [u(g(460), {
|
|
58
|
+
className: "ds-disclosure__label",
|
|
59
|
+
children: e
|
|
60
|
+
}), n && u(g(460), {
|
|
61
|
+
className: g(475),
|
|
76
62
|
children: n
|
|
77
63
|
})]
|
|
78
64
|
}),
|
|
79
65
|
u(l, {
|
|
80
|
-
className:
|
|
66
|
+
className: "ds-disclosure__chevron",
|
|
81
67
|
"aria-hidden": !0
|
|
82
68
|
})
|
|
83
69
|
]
|
|
84
70
|
})
|
|
85
|
-
}), u(g(
|
|
86
|
-
id: _ + g(
|
|
71
|
+
}), u(g(472), {
|
|
72
|
+
id: _ + g(461),
|
|
87
73
|
role: "region",
|
|
88
|
-
"aria-labelledby": _ +
|
|
89
|
-
className: g(
|
|
74
|
+
"aria-labelledby": _ + g(464),
|
|
75
|
+
className: g(473),
|
|
90
76
|
inert: !o || void 0,
|
|
91
|
-
children: u(g(
|
|
92
|
-
className:
|
|
93
|
-
children: u(g(
|
|
94
|
-
className: g(
|
|
77
|
+
children: u(g(472), {
|
|
78
|
+
className: g(481),
|
|
79
|
+
children: u(g(472), {
|
|
80
|
+
className: g(466),
|
|
95
81
|
children: f
|
|
96
82
|
})
|
|
97
83
|
})
|
|
98
84
|
})]
|
|
99
85
|
});
|
|
100
86
|
}
|
|
101
|
-
var
|
|
102
|
-
function
|
|
103
|
-
let l =
|
|
104
|
-
return u(
|
|
87
|
+
var m = a(null);
|
|
88
|
+
function h({ variant: e = t(455), children: n, className: a, style: o, ...s }) {
|
|
89
|
+
let l = t, d = i(s), f = c(null);
|
|
90
|
+
return u(m.Provider, {
|
|
105
91
|
value: {
|
|
106
|
-
isOpen: d[l(
|
|
107
|
-
toggle: d[l(
|
|
92
|
+
isOpen: d[l(468)],
|
|
93
|
+
toggle: d[l(470)]
|
|
108
94
|
},
|
|
109
95
|
children: u("div", {
|
|
110
|
-
ref:
|
|
111
|
-
className: r(l(
|
|
96
|
+
ref: f,
|
|
97
|
+
className: r(l(482), "ds-accordion--" + e, a),
|
|
112
98
|
style: o,
|
|
113
99
|
onKeyDown: (e) => {
|
|
114
|
-
let t =
|
|
100
|
+
let t = _, n = [...f[t(490)]?.querySelectorAll(".ds-disclosure__trigger:not(:disabled)") ?? []][t(448)]((e) => e[t(458)](".ds-accordion") === f[t(490)]), r = n[t(467)](document[t(487)]);
|
|
115
101
|
if (r < 0) return;
|
|
116
102
|
let i;
|
|
117
|
-
e[t(
|
|
103
|
+
e[t(465)] === t(469) ? i = n[(r + 1) % n[t(471)]] : e[t(465)] === t(453) ? i = n[(r - 1 + n[t(471)]) % n[t(471)]] : e[t(465)] === t(459) ? i = n[0] : e.key === t(486) && (i = n[n[t(471)] - 1]), i && (e[t(483)](), i[t(488)]());
|
|
118
104
|
},
|
|
119
105
|
children: n
|
|
120
106
|
})
|
|
121
107
|
});
|
|
122
108
|
}
|
|
123
|
-
function
|
|
124
|
-
let a =
|
|
125
|
-
if (!s) throw Error(a(
|
|
126
|
-
return u(
|
|
109
|
+
function g({ value: e, title: n, flush: r, ...i }) {
|
|
110
|
+
let a = t, s = o(m);
|
|
111
|
+
if (!s) throw Error(a(477));
|
|
112
|
+
return u(p, {
|
|
127
113
|
...i,
|
|
128
|
-
className: r ? a(
|
|
114
|
+
className: r ? a(479) : void 0,
|
|
129
115
|
label: n,
|
|
130
|
-
open: s[a(
|
|
131
|
-
onToggle: () => s
|
|
116
|
+
open: s[a(463)](e),
|
|
117
|
+
onToggle: () => s.toggle(e)
|
|
132
118
|
});
|
|
133
119
|
}
|
|
134
|
-
|
|
135
|
-
|
|
120
|
+
function _(t, n) {
|
|
121
|
+
t -= 448;
|
|
122
|
+
let r = e(), i = r[t];
|
|
123
|
+
_.lYVWHG === void 0 && (_.rfJnFD = function(e) {
|
|
124
|
+
let t = "", n = "";
|
|
125
|
+
for (let n = 0, r, i, a = 0; i = e.charAt(a++); ~i && (r = n % 4 ? r * 64 + i : i, n++ % 4) && (t += String.fromCharCode(255 & r >> (-2 * n & 6)))) i = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(i);
|
|
126
|
+
for (let e = 0, r = t.length; e < r; e++) n += "%" + ("00" + t.charCodeAt(e).toString(16)).slice(-2);
|
|
127
|
+
return decodeURIComponent(n);
|
|
128
|
+
}, _.wdJysf = {}, _.lYVWHG = !0);
|
|
129
|
+
let a = r[0];
|
|
130
|
+
_.lkhHOe !== a && (_.wdJysf = {}, _.lkhHOe = a);
|
|
131
|
+
let o = _.wdJysf[t];
|
|
132
|
+
return o === void 0 ? (i = _.rfJnFD(i), _.wdJysf[t] = i) : i = o, i;
|
|
133
|
+
}
|
|
134
|
+
h.Item = g;
|
|
135
|
+
export { h as Accordion, g as AccordionItem, f as Collapsible };
|
|
@@ -1,60 +1,62 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
var e =
|
|
2
|
+
var e = i;
|
|
3
3
|
(function(e, t) {
|
|
4
|
-
for (var n =
|
|
5
|
-
if (
|
|
6
|
-
|
|
4
|
+
for (var n = i, r = e();;) try {
|
|
5
|
+
if (parseInt(n(423)) / 1 * (-parseInt(n(412)) / 2) + parseInt(n(415)) / 3 + parseInt(n(414)) / 4 * (-parseInt(n(421)) / 5) + parseInt(n(425)) / 6 * (parseInt(n(426)) / 7) + parseInt(n(418)) / 8 + parseInt(n(424)) / 9 * (parseInt(n(422)) / 10) + -parseInt(n(411)) / 11 * (parseInt(n(420)) / 12) == t) break;
|
|
6
|
+
r.push(r.shift());
|
|
7
7
|
} catch {
|
|
8
|
-
|
|
8
|
+
r.push(r.shift());
|
|
9
9
|
}
|
|
10
|
-
})(
|
|
10
|
+
})(r, 544928);
|
|
11
11
|
import { cx as t } from "../../primitives/index.js";
|
|
12
12
|
/* empty css */
|
|
13
13
|
import { jsx as n } from "react/jsx-runtime";
|
|
14
|
-
function r(
|
|
15
|
-
e -= 153;
|
|
16
|
-
var n = i(), a = n[e];
|
|
17
|
-
r.gIgryb === void 0 && (r.RpVNAJ = function(e) {
|
|
18
|
-
for (var t = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=", n = "", r = "", i = 0, a, o, s = 0; o = e.charAt(s++); ~o && (a = i % 4 ? a * 64 + o : o, i++ % 4) && (n += String.fromCharCode(255 & a >> (-2 * i & 6)))) o = t.indexOf(o);
|
|
19
|
-
for (var c = 0, l = n.length; c < l; c++) r += "%" + ("00" + n.charCodeAt(c).toString(16)).slice(-2);
|
|
20
|
-
return decodeURIComponent(r);
|
|
21
|
-
}, r.dcqamE = {}, r.gIgryb = !0);
|
|
22
|
-
var o = n[0];
|
|
23
|
-
r.NMjFRW !== o && (r.dcqamE = {}, r.NMjFRW = o);
|
|
24
|
-
var s = r.dcqamE[e];
|
|
25
|
-
return s === void 0 ? (a = r.RpVNAJ(a), r.dcqamE[e] = a) : a = s, a;
|
|
26
|
-
}
|
|
27
|
-
function i() {
|
|
14
|
+
function r() {
|
|
28
15
|
var e = [
|
|
29
|
-
"
|
|
30
|
-
"mJGYodK4mKjStNrQvG",
|
|
31
|
-
"owzArvDZyq",
|
|
32
|
-
"y2vUDgvY",
|
|
33
|
-
"zhmTywn0Aw9UlwjHCG",
|
|
34
|
-
"ndy4nZCWt3P6Ew1s",
|
|
35
|
-
"mtmWmtnuzg9xthq",
|
|
36
|
-
"zgL2",
|
|
37
|
-
"mtmYmJbKCw9wv2q",
|
|
38
|
-
"nwjbBgf5EG",
|
|
39
|
-
"zhmTywn0Aw9UlwjHCL9Fz3jVDxa",
|
|
40
|
-
"ndmZmtaZm0jWC2Tvwa",
|
|
41
|
-
"odq1ntC3qvLfBuXb",
|
|
16
|
+
"mtC2ody4ohjNAvnkza",
|
|
42
17
|
"zhmTywn0Aw9UlwjHCI0TC3rPy2T5",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
18
|
+
"ntq3nZa3nKzvzg1MBW",
|
|
19
|
+
"mtb4s2nOzwm",
|
|
20
|
+
"mtCWCgfkAKHe",
|
|
21
|
+
"mZK4yvbssLrU",
|
|
22
|
+
"nZq1mMTxBe5qqG",
|
|
23
|
+
"mZa2v0zJthv5",
|
|
24
|
+
"mtm0odGZAgrxrhDY",
|
|
25
|
+
"zgL2",
|
|
26
|
+
"zMLLBgrZzxq",
|
|
27
|
+
"mtf3uMvfz0u",
|
|
28
|
+
"oty0wvPgteD2",
|
|
29
|
+
"zhmTywn0Aw9UlwjHCG",
|
|
30
|
+
"mtGYnZaWog9IquXXua",
|
|
31
|
+
"mJy2nJqZmfj0uhrmBW",
|
|
32
|
+
"y2vUDgvY",
|
|
33
|
+
"zhmTywn0Aw9UlwjHCI0T"
|
|
45
34
|
];
|
|
46
|
-
return
|
|
35
|
+
return r = function() {
|
|
47
36
|
return e;
|
|
48
|
-
},
|
|
37
|
+
}, r();
|
|
38
|
+
}
|
|
39
|
+
function i(e, t) {
|
|
40
|
+
e -= 411;
|
|
41
|
+
var n = r(), a = n[e];
|
|
42
|
+
i.BcUaRa === void 0 && (i.rQxFGv = function(e) {
|
|
43
|
+
for (var t = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=", n = "", r = "", i = 0, a, o, s = 0; o = e.charAt(s++); ~o && (a = i % 4 ? a * 64 + o : o, i++ % 4) && (n += String.fromCharCode(255 & a >> (-2 * i & 6)))) o = t.indexOf(o);
|
|
44
|
+
for (var c = 0, l = n.length; c < l; c++) r += "%" + ("00" + n.charCodeAt(c).toString(16)).slice(-2);
|
|
45
|
+
return decodeURIComponent(r);
|
|
46
|
+
}, i.OSJWZG = {}, i.BcUaRa = !0);
|
|
47
|
+
var o = n[0];
|
|
48
|
+
i.JXxIfL !== o && (i.OSJWZG = {}, i.JXxIfL = o);
|
|
49
|
+
var s = i.OSJWZG[e];
|
|
50
|
+
return s === void 0 ? (a = i.rQxFGv(a), i.OSJWZG[e] = a) : a = s, a;
|
|
49
51
|
}
|
|
50
|
-
function a({ children: r, align: i = e(
|
|
52
|
+
function a({ children: r, align: i = e(416), sticky: a = !0, pending: o, "aria-label": s, className: c, style: l }) {
|
|
51
53
|
var u = e;
|
|
52
|
-
return n(u(
|
|
53
|
-
className: t(u(
|
|
54
|
+
return n(u(427), {
|
|
55
|
+
className: t(u(413), u(417) + i, a && u(419), c),
|
|
54
56
|
"data-pending": o || void 0,
|
|
55
57
|
style: l,
|
|
56
|
-
children: n(
|
|
57
|
-
className:
|
|
58
|
+
children: n(u(428), {
|
|
59
|
+
className: "ds-action-bar__group",
|
|
58
60
|
disabled: o,
|
|
59
61
|
"aria-label": s,
|
|
60
62
|
"aria-busy": o || void 0,
|