@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.
Files changed (163) hide show
  1. package/agents/INDEX.md +1 -1
  2. package/agents/app-shell/AGENTS.md +99 -1
  3. package/agents/brand-icon/AGENTS.md +1 -1
  4. package/agents/social-login-button/AGENTS.md +4 -3
  5. package/lib/components/Accordion/Accordion2.js +74 -74
  6. package/lib/components/ActionBar/ActionBar2.js +44 -42
  7. package/lib/components/Alert/Alert2.js +67 -67
  8. package/lib/components/AppShell/AppShell2.js +72 -66
  9. package/lib/components/AreaChart/AreaChart.js +45 -45
  10. package/lib/components/BarChart/BarChart2.js +128 -128
  11. package/lib/components/BarList/BarList2.js +105 -105
  12. package/lib/components/Breadcrumb/Breadcrumb2.js +63 -64
  13. package/lib/components/Calendar/Calendar2.js +197 -197
  14. package/lib/components/Calendar/DatePicker2.js +100 -100
  15. package/lib/components/Calendar/date.js +47 -70
  16. package/lib/components/Card/Card2.js +101 -74
  17. package/lib/components/CardFrame/CardFrame2.js +52 -56
  18. package/lib/components/Chart/ChartParts.js +88 -88
  19. package/lib/components/Chart/chart2.js +63 -63
  20. package/lib/components/Chart/useChartInteraction.js +43 -43
  21. package/lib/components/ChatBubble/ChatBubble2.js +111 -111
  22. package/lib/components/ChatBubble/formatChatTime.js +38 -43
  23. package/lib/components/ChatComposer/ChatComposer2.js +96 -96
  24. package/lib/components/CodeBlock/CodeBlock2.js +65 -65
  25. package/lib/components/CodeBlock/highlight.js +84 -84
  26. package/lib/components/ColorPicker/ColorPicker2.js +263 -263
  27. package/lib/components/ColorPicker/color.js +92 -92
  28. package/lib/components/ColorPicker/presets.js +35 -39
  29. package/lib/components/Combobox/Combobox2.js +134 -134
  30. package/lib/components/CommandMenu/CommandMenu.js +130 -131
  31. package/lib/components/Comment/Comment2.js +64 -63
  32. package/lib/components/ContextMenu/ContextMenu2.js +84 -84
  33. package/lib/components/DataGrid/DataGrid2.js +1182 -1180
  34. package/lib/components/DataGrid/GridPopover.js +84 -84
  35. package/lib/components/DataGrid/anchor.js +29 -28
  36. package/lib/components/DataGrid/model.js +308 -307
  37. package/lib/components/DataGrid/panels.js +398 -399
  38. package/lib/components/DataGrid/typeMeta.js +41 -40
  39. package/lib/components/DataGrid/types.js +39 -40
  40. package/lib/components/DescriptionList/DescriptionList2.js +105 -105
  41. package/lib/components/Dialog/AlertDialog.js +90 -89
  42. package/lib/components/Dialog/Dialog2.js +71 -72
  43. package/lib/components/Dialog/modal.js +62 -60
  44. package/lib/components/Drawer/Drawer2.js +167 -166
  45. package/lib/components/DropdownMenu/DropdownMenu2.js +260 -258
  46. package/lib/components/DropdownMenu/menuCore.js +29 -28
  47. package/lib/components/Dropzone/Dropzone2.js +78 -77
  48. package/lib/components/EmptyState/EmptyState2.js +57 -57
  49. package/lib/components/FileChip/FileChip2.js +53 -77
  50. package/lib/components/FileUpload/FileUpload.js +168 -167
  51. package/lib/components/FilterChips/FilterChips2.js +60 -60
  52. package/lib/components/FunnelChart/FunnelChart2.js +174 -174
  53. package/lib/components/FunnelChart/funnel.js +44 -42
  54. package/lib/components/Highlight/Highlight2.js +55 -55
  55. package/lib/components/HoverCard/HoverCard.js +71 -96
  56. package/lib/components/InlineDiff/InlineDiff2.js +128 -129
  57. package/lib/components/InlineDiff/diff.js +79 -79
  58. package/lib/components/InlineDiff/useDiffReview.js +61 -62
  59. package/lib/components/Kanban/Kanban2.js +387 -389
  60. package/lib/components/Kanban/KanbanCard.js +84 -84
  61. package/lib/components/Kanban/move.js +32 -25
  62. package/lib/components/LineChart/LineChart2.js +228 -228
  63. package/lib/components/List/List2.js +62 -62
  64. package/lib/components/Listbox/Listbox2.js +92 -92
  65. package/lib/components/Marker/Marker2.js +50 -56
  66. package/lib/components/Menubar/Menubar2.js +117 -116
  67. package/lib/components/MultiSelect/MultiSelect2.js +111 -111
  68. package/lib/components/NavigationMenu/NavigationMenu2.js +231 -231
  69. package/lib/components/NoticeStack/NoticeStack2.js +99 -99
  70. package/lib/components/NumberStepper/NumberStepper2.js +60 -60
  71. package/lib/components/OtpInput/OtpInput2.js +90 -89
  72. package/lib/components/Pagination/Pagination2.js +105 -105
  73. package/lib/components/Pagination/paginationRange.js +37 -37
  74. package/lib/components/PhoneInput/PhoneInput.js +75 -76
  75. package/lib/components/PieChart/PieChart2.js +166 -166
  76. package/lib/components/PieChart/arc.js +71 -69
  77. package/lib/components/PieChart/useArcTween.js +60 -62
  78. package/lib/components/Popover/Popover2.js +85 -86
  79. package/lib/components/ProgressTracker/ProgressTracker2.js +134 -134
  80. package/lib/components/Rating/Rating2.js +90 -89
  81. package/lib/components/Resizable/Resizable2.js +128 -129
  82. package/lib/components/Resizable/layout.js +51 -51
  83. package/lib/components/ScaledPreview/ScaledPreview2.js +49 -48
  84. package/lib/components/ScatterChart/ScatterChart2.js +214 -213
  85. package/lib/components/ScatterChart/scatter.js +49 -52
  86. package/lib/components/ScrollArea/ScrollArea2.js +115 -117
  87. package/lib/components/Select/Select2.js +82 -82
  88. package/lib/components/Sidebar/Sidebar2.js +91 -85
  89. package/lib/components/Sidebar/rail.js +43 -0
  90. package/lib/components/Skeleton/Skeleton2.js +63 -64
  91. package/lib/components/Slider/Slider2.js +65 -66
  92. package/lib/components/SocialLoginButton/SocialLoginButton.js +76 -69
  93. package/lib/components/SparkChart/SparkChart2.js +126 -127
  94. package/lib/components/SparkChart/spark.js +66 -42
  95. package/lib/components/Sparkbar/Sparkbar2.js +60 -60
  96. package/lib/components/SplitView/SplitView2.js +51 -51
  97. package/lib/components/Stat/Stat2.js +79 -79
  98. package/lib/components/StepList/StepList2.js +75 -75
  99. package/lib/components/Table/Table2.js +71 -71
  100. package/lib/components/Tabs/Tabs2.js +74 -74
  101. package/lib/components/TagInput/TagInput2.js +223 -221
  102. package/lib/components/TimePicker/TimePicker2.js +197 -195
  103. package/lib/components/TimePicker/time.js +59 -56
  104. package/lib/components/Timeline/Timeline2.js +195 -195
  105. package/lib/components/Timeline/scale.js +64 -66
  106. package/lib/components/Toast/Toaster.js +139 -139
  107. package/lib/components/Toast/store.js +72 -76
  108. package/lib/components/ToggleGroup/ToggleGroup2.js +79 -79
  109. package/lib/components/Toolbar/Toolbar2.js +165 -164
  110. package/lib/components/Tracker/Tracker2.js +72 -72
  111. package/lib/components/TreeDiagram/TreeDiagram2.js +96 -97
  112. package/lib/components/TreeView/TreeView2.js +152 -151
  113. package/lib/hooks/timing.js +34 -36
  114. package/lib/hooks/useControllableState.js +29 -30
  115. package/lib/hooks/useCountdown.js +51 -53
  116. package/lib/hooks/useDigitInput.js +81 -55
  117. package/lib/hooks/useDismiss.js +53 -56
  118. package/lib/hooks/useElapsed.js +48 -49
  119. package/lib/hooks/useFloating.js +36 -36
  120. package/lib/hooks/useFocusTrap.js +32 -32
  121. package/lib/hooks/usePresence.js +49 -49
  122. package/lib/hooks/usePressToOpen.js +40 -40
  123. package/lib/hooks/useScrollLock.js +50 -49
  124. package/lib/hooks/useSelection.js +42 -47
  125. package/lib/index.js +138 -139
  126. package/lib/primitives/AspectRatio2.js +58 -57
  127. package/lib/primitives/BrandIcon.js +210 -179
  128. package/lib/primitives/ColorDot2.js +42 -41
  129. package/lib/primitives/CopyButton2.js +59 -58
  130. package/lib/primitives/CountBadge2.js +58 -63
  131. package/lib/primitives/Countdown2.js +38 -37
  132. package/lib/primitives/Delta2.js +37 -37
  133. package/lib/primitives/Elapsed.js +42 -40
  134. package/lib/primitives/FileIcon2.js +102 -102
  135. package/lib/primitives/Flag2.js +124 -124
  136. package/lib/primitives/IconStack2.js +45 -23
  137. package/lib/primitives/IconTile2.js +45 -41
  138. package/lib/primitives/Kbd2.js +48 -48
  139. package/lib/primitives/Layout2.js +71 -71
  140. package/lib/primitives/Link2.js +40 -42
  141. package/lib/primitives/MaskedText2.js +50 -50
  142. package/lib/primitives/Progress2.js +78 -77
  143. package/lib/primitives/RelativeTime.js +55 -58
  144. package/lib/primitives/SearchInput2.js +72 -68
  145. package/lib/primitives/SelectorButton2.js +60 -61
  146. package/lib/primitives/Spinner2.js +48 -49
  147. package/lib/primitives/StatusIcon2.js +69 -69
  148. package/lib/primitives/Swatch2.js +65 -69
  149. package/lib/primitives/Tooltip2.js +92 -92
  150. package/lib/primitives/Typography2.js +37 -37
  151. package/lib/primitives/formatCountdown.js +38 -38
  152. package/lib/primitives/formatElapsed.js +43 -45
  153. package/lib/primitives/formatRelativeTime.js +54 -54
  154. package/lib/primitives/hotkey.js +77 -77
  155. package/lib/primitives/index.js +162 -161
  156. package/lib/primitives/maskValue.js +54 -51
  157. package/lib/style.css +1 -1
  158. package/lib/types/components/AppShell/AppShell.d.ts +9 -2
  159. package/lib/types/components/Sidebar/rail.d.ts +4 -0
  160. package/lib/types/components/SocialLoginButton/SocialLoginButton.d.ts +1 -1
  161. package/lib/types/components/index.d.ts +1 -0
  162. package/lib/types/primitives/BrandIcon.d.ts +1 -1
  163. 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
- | `sidebarCollapsed` | `boolean` | `false` | 넓은 화면에서 사이드바를 접어요. 사이드바가 밀려 나가며 본문이 넓어져요. |
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
- 지금 들어 있는 로고 10개(Gmail, Slack, ClickUp, Figma, GitHub, HubSpot, Notion, Google Calendar, Google, Apple). Apple은 한 색 로고라 글자색을 따라요. 새 앱은 BrandIcon.tsx의 MARKS에 추가해요.
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은 흰 바탕 + 옅은 윤곽 + 색 G 로고, Apple은 검정 바탕 + 흰 로고예요. 문구는 action으로 고르고, 나머지 props는 Button과 같아요.
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
- const e = f;
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 = f, r = e();
10
+ let n = _, r = e();
5
11
  for (;;) try {
6
- if (parseInt(n(390)) / 1 * (parseInt(n(427)) / 2) + -parseInt(n(401)) / 3 + -parseInt(n(411)) / 4 + -parseInt(n(396)) / 5 + parseInt(n(428)) / 6 * (-parseInt(n(419)) / 7) + parseInt(n(405)) / 8 + parseInt(n(417)) / 9 == t) break;
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
- })(t, 911233);
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, n) {
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(m, {
27
+ return u(p, {
42
28
  ...i,
43
29
  open: a,
44
30
  onToggle: () => o(!a)
45
31
  });
46
32
  }
47
- function m({ label: t, description: n, icon: i, disabled: a, open: o, onToggle: c, children: f, variant: p = e(426), iconTone: m = "default", className: h }) {
48
- let g = e, _ = s(), v = p === g(394) ? g(429) : "h3";
49
- return d(g(429), {
50
- className: r(g(393), p === g(394) && g(402), h),
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(395),
55
- children: d("button", {
56
- type: "button",
57
- id: _ + g(410),
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(404),
45
+ "aria-controls": _ + g(461),
60
46
  disabled: a,
61
- className: g(403),
47
+ className: g(462),
62
48
  onClick: c,
63
49
  children: [
64
- i && u(g(431), {
65
- className: g(392),
66
- "data-tone": m === g(426) ? void 0 : m,
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(g(431), {
70
- className: g(400),
71
- children: [u(g(431), {
72
- className: g(407),
73
- children: t
74
- }), n && u(g(431), {
75
- className: g(435),
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: g(408),
66
+ className: "ds-disclosure__chevron",
81
67
  "aria-hidden": !0
82
68
  })
83
69
  ]
84
70
  })
85
- }), u(g(429), {
86
- id: _ + g(404),
71
+ }), u(g(472), {
72
+ id: _ + g(461),
87
73
  role: "region",
88
- "aria-labelledby": _ + "-trigger",
89
- className: g(424),
74
+ "aria-labelledby": _ + g(464),
75
+ className: g(473),
90
76
  inert: !o || void 0,
91
- children: u(g(429), {
92
- className: "ds-disclosure__inner",
93
- children: u(g(429), {
94
- className: g(423),
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 h = a(null);
102
- function g({ variant: t = e(418), children: n, className: a, style: o, ...s }) {
103
- let l = e, d = i(s), p = c(null);
104
- return u(h[l(430)], {
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(399)],
107
- toggle: d[l(398)]
92
+ isOpen: d[l(468)],
93
+ toggle: d[l(470)]
108
94
  },
109
95
  children: u("div", {
110
- ref: p,
111
- className: r(l(421), l(425) + t, a),
96
+ ref: f,
97
+ className: r(l(482), "ds-accordion--" + e, a),
112
98
  style: o,
113
99
  onKeyDown: (e) => {
114
- let t = f, n = [...p[t(409)]?.[t(389)](t(432)) ?? []][t(420)]((e) => e[t(433)](t(397)) === p.current), r = n[t(422)](document[t(413)]);
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(414)] === t(391) ? i = n[(r + 1) % n[t(406)]] : e.key === "ArrowUp" ? i = n[(r - 1 + n.length) % n[t(406)]] : e.key === t(415) ? i = n[0] : e.key === t(416) && (i = n[n[t(406)] - 1]), i && (e.preventDefault(), i.focus());
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 _({ value: t, title: n, flush: r, ...i }) {
124
- let a = e, s = o(h);
125
- if (!s) throw Error(a(412));
126
- return u(m, {
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(434) : void 0,
114
+ className: r ? a(479) : void 0,
129
115
  label: n,
130
- open: s[a(388)](t),
131
- onToggle: () => s[a(398)](t)
116
+ open: s[a(463)](e),
117
+ onToggle: () => s.toggle(e)
132
118
  });
133
119
  }
134
- g.Item = _;
135
- export { g as Accordion, _ as AccordionItem, p as Collapsible };
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 = r;
2
+ var e = i;
3
3
  (function(e, t) {
4
- for (var n = r, i = e();;) try {
5
- if (-parseInt(n(158)) / 1 + parseInt(n(164)) / 2 * (parseInt(n(161)) / 3) + parseInt(n(159)) / 4 * (-parseInt(n(168)) / 5) + -parseInt(n(160)) / 6 + -parseInt(n(154)) / 7 + parseInt(n(157)) / 8 * (-parseInt(n(155)) / 9) + -parseInt(n(167)) / 10 * (-parseInt(n(165)) / 11) == t) break;
6
- i.push(i.shift());
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
- i.push(i.shift());
8
+ r.push(r.shift());
9
9
  }
10
- })(i, 412273);
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(e, t) {
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
- "mtaWnZu2ne9VuwPmyW",
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
- "mJrrqKPTuvm",
44
- "mJmWodqYA0nhBNzU"
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 i = function() {
35
+ return r = function() {
47
36
  return e;
48
- }, i();
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(162), sticky: a = !0, pending: o, "aria-label": s, className: c, style: l }) {
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(166), {
53
- className: t(u(163), "ds-action-bar--" + i, a && u(156), c),
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("fieldset", {
57
- className: u(153),
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,