@iamfiro/design 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/AGENTS.md +1 -0
  2. package/agents/INDEX.md +1 -0
  3. package/agents/brand-icon/AGENTS.md +2 -2
  4. package/agents/social-login-button/AGENTS.md +156 -0
  5. package/lib/components/Accordion/Accordion2.js +135 -0
  6. package/lib/components/ActionBar/ActionBar2.js +65 -0
  7. package/lib/components/Alert/Alert2.js +131 -0
  8. package/lib/components/AppShell/AppShell2.js +94 -0
  9. package/lib/components/AreaChart/AreaChart.js +59 -0
  10. package/lib/components/BarChart/BarChart2.js +243 -0
  11. package/lib/components/BarList/BarList2.js +172 -0
  12. package/lib/components/Breadcrumb/Breadcrumb2.js +87 -0
  13. package/lib/components/Calendar/Calendar2.js +309 -0
  14. package/lib/components/Calendar/DatePicker2.js +229 -0
  15. package/lib/components/Calendar/date.js +121 -0
  16. package/lib/components/Card/Card2.js +104 -0
  17. package/lib/components/CardFrame/CardFrame2.js +72 -0
  18. package/lib/components/Chart/ChartParts.js +150 -0
  19. package/lib/components/Chart/chart2.js +96 -0
  20. package/lib/components/Chart/useChartInteraction.js +94 -0
  21. package/lib/components/ChatBubble/ChatBubble2.js +174 -0
  22. package/lib/components/ChatBubble/formatChatTime.js +53 -0
  23. package/lib/components/ChatComposer/ChatComposer2.js +153 -0
  24. package/lib/components/CodeBlock/CodeBlock2.js +93 -0
  25. package/lib/components/CodeBlock/highlight.js +114 -0
  26. package/lib/components/ColorPicker/ColorPicker2.js +610 -0
  27. package/lib/components/ColorPicker/color.js +180 -0
  28. package/lib/components/ColorPicker/presets.js +75 -0
  29. package/lib/components/Combobox/Combobox2.js +229 -0
  30. package/lib/components/CommandMenu/CommandMenu.js +267 -0
  31. package/lib/components/Comment/Comment2.js +134 -0
  32. package/lib/components/ContextMenu/ContextMenu2.js +168 -0
  33. package/lib/components/DataGrid/DataGrid2.js +1996 -0
  34. package/lib/components/DataGrid/GridPopover.js +154 -0
  35. package/lib/components/DataGrid/anchor.js +50 -0
  36. package/lib/components/DataGrid/model.js +558 -0
  37. package/lib/components/DataGrid/panels.js +703 -0
  38. package/lib/components/DataGrid/typeMeta.js +76 -0
  39. package/lib/components/DataGrid/types.js +54 -0
  40. package/lib/components/DescriptionList/DescriptionList2.js +180 -0
  41. package/lib/components/Dialog/AlertDialog.js +118 -0
  42. package/lib/components/Dialog/Dialog2.js +109 -0
  43. package/lib/components/Dialog/modal.js +92 -0
  44. package/lib/components/Drawer/Drawer2.js +244 -0
  45. package/lib/components/DropdownMenu/DropdownMenu2.js +394 -0
  46. package/lib/components/DropdownMenu/menuCore.js +63 -0
  47. package/lib/components/Dropzone/Dropzone2.js +144 -0
  48. package/lib/components/EmptyState/EmptyState2.js +72 -0
  49. package/lib/components/FileChip/FileChip2.js +118 -0
  50. package/lib/components/FileUpload/FileUpload.js +258 -0
  51. package/lib/components/FilterChips/FilterChips2.js +101 -0
  52. package/lib/components/FunnelChart/FunnelChart2.js +283 -0
  53. package/lib/components/FunnelChart/funnel.js +69 -0
  54. package/lib/components/Highlight/Highlight2.js +100 -0
  55. package/lib/components/HoverCard/HoverCard.js +134 -0
  56. package/lib/components/InlineDiff/InlineDiff2.js +215 -0
  57. package/lib/components/InlineDiff/diff.js +126 -0
  58. package/lib/components/InlineDiff/useDiffReview.js +109 -0
  59. package/lib/components/Kanban/Kanban2.js +691 -0
  60. package/lib/components/Kanban/KanbanCard.js +159 -0
  61. package/lib/components/Kanban/move.js +69 -0
  62. package/lib/components/LineChart/LineChart2.js +342 -0
  63. package/lib/components/List/List2.js +133 -0
  64. package/lib/components/Listbox/Listbox2.js +163 -0
  65. package/lib/components/Marker/Marker2.js +82 -0
  66. package/lib/components/Menubar/Menubar2.js +223 -0
  67. package/lib/components/MultiSelect/MultiSelect2.js +204 -0
  68. package/lib/components/NavigationMenu/NavigationMenu2.js +481 -0
  69. package/lib/components/NoticeStack/NoticeStack2.js +178 -0
  70. package/lib/components/NumberStepper/NumberStepper2.js +129 -0
  71. package/lib/components/OtpInput/OtpInput2.js +122 -0
  72. package/lib/components/Pagination/Pagination2.js +210 -0
  73. package/lib/components/Pagination/paginationRange.js +53 -0
  74. package/lib/components/PhoneInput/PhoneInput.js +175 -0
  75. package/lib/components/PieChart/PieChart2.js +246 -0
  76. package/lib/components/PieChart/arc.js +66 -0
  77. package/lib/components/PieChart/useArcTween.js +94 -0
  78. package/lib/components/Popover/Popover2.js +112 -0
  79. package/lib/components/ProgressTracker/ProgressTracker2.js +226 -0
  80. package/lib/components/Rating/Rating2.js +186 -0
  81. package/lib/components/Resizable/Resizable2.js +236 -0
  82. package/lib/components/Resizable/layout.js +115 -0
  83. package/lib/components/ScaledPreview/ScaledPreview2.js +100 -0
  84. package/lib/components/ScatterChart/ScatterChart2.js +356 -0
  85. package/lib/components/ScatterChart/scatter.js +83 -0
  86. package/lib/components/ScrollArea/ScrollArea2.js +218 -0
  87. package/lib/components/Select/Select2.js +153 -0
  88. package/lib/components/Sidebar/Sidebar2.js +127 -0
  89. package/lib/components/Skeleton/Skeleton2.js +91 -0
  90. package/lib/components/Slider/Slider2.js +142 -0
  91. package/lib/components/SocialLoginButton/SocialLoginButton.js +85 -0
  92. package/lib/components/SparkChart/SparkChart2.js +217 -0
  93. package/lib/components/SparkChart/spark.js +76 -0
  94. package/lib/components/Sparkbar/Sparkbar2.js +111 -0
  95. package/lib/components/SplitView/SplitView2.js +95 -0
  96. package/lib/components/Stat/Stat2.js +164 -0
  97. package/lib/components/StepList/StepList2.js +131 -0
  98. package/lib/components/Table/Table2.js +104 -0
  99. package/lib/components/Tabs/Tabs2.js +131 -0
  100. package/lib/components/TagInput/TagInput2.js +360 -0
  101. package/lib/components/TimePicker/TimePicker2.js +388 -0
  102. package/lib/components/TimePicker/time.js +83 -0
  103. package/lib/components/Timeline/Timeline2.js +369 -0
  104. package/lib/components/Timeline/scale.js +83 -0
  105. package/lib/components/Toast/Toaster.js +212 -0
  106. package/lib/components/Toast/store.js +129 -0
  107. package/lib/components/ToggleGroup/ToggleGroup2.js +125 -0
  108. package/lib/components/Toolbar/Toolbar2.js +281 -0
  109. package/lib/components/Tracker/Tracker2.js +172 -0
  110. package/lib/components/TreeDiagram/TreeDiagram2.js +223 -0
  111. package/lib/components/TreeView/TreeView2.js +284 -0
  112. package/lib/hooks/timing.js +55 -0
  113. package/lib/hooks/useControllableState.js +49 -0
  114. package/lib/hooks/useCountdown.js +80 -0
  115. package/lib/hooks/useDigitInput.js +105 -0
  116. package/lib/hooks/useDismiss.js +71 -0
  117. package/lib/hooks/useElapsed.js +83 -0
  118. package/lib/hooks/useFloating.js +70 -0
  119. package/lib/hooks/useFocusTrap.js +61 -0
  120. package/lib/hooks/usePresence.js +60 -0
  121. package/lib/hooks/usePressToOpen.js +69 -0
  122. package/lib/hooks/useScrollLock.js +70 -0
  123. package/lib/hooks/useSelection.js +68 -0
  124. package/lib/index.js +175 -17911
  125. package/lib/primitives/AspectRatio2.js +80 -0
  126. package/lib/primitives/BrandIcon.js +245 -0
  127. package/lib/primitives/ColorDot2.js +70 -0
  128. package/lib/primitives/CopyButton2.js +85 -0
  129. package/lib/primitives/CountBadge2.js +78 -0
  130. package/lib/primitives/Countdown2.js +65 -0
  131. package/lib/primitives/Delta2.js +67 -0
  132. package/lib/primitives/Elapsed.js +62 -0
  133. package/lib/primitives/FileIcon2.js +125 -0
  134. package/lib/primitives/Flag2.js +263 -0
  135. package/lib/primitives/IconStack2.js +85 -0
  136. package/lib/primitives/IconTile2.js +68 -0
  137. package/lib/primitives/Kbd2.js +88 -0
  138. package/lib/primitives/Layout2.js +118 -0
  139. package/lib/primitives/Link2.js +53 -0
  140. package/lib/primitives/MaskedText2.js +120 -0
  141. package/lib/primitives/Progress2.js +137 -0
  142. package/lib/primitives/RelativeTime.js +84 -0
  143. package/lib/primitives/SearchInput2.js +84 -0
  144. package/lib/primitives/SelectorButton2.js +97 -0
  145. package/lib/primitives/Spinner2.js +98 -0
  146. package/lib/primitives/StatusIcon2.js +126 -0
  147. package/lib/primitives/Swatch2.js +79 -0
  148. package/lib/primitives/Tooltip2.js +132 -0
  149. package/lib/primitives/Typography2.js +97 -0
  150. package/lib/primitives/formatCountdown.js +51 -0
  151. package/lib/primitives/formatElapsed.js +66 -0
  152. package/lib/primitives/formatRelativeTime.js +64 -0
  153. package/lib/primitives/hotkey.js +94 -0
  154. package/lib/primitives/index.js +352 -0
  155. package/lib/primitives/maskValue.js +65 -0
  156. package/lib/style.css +1 -1
  157. package/lib/types/components/SocialLoginButton/SocialLoginButton.d.ts +10 -0
  158. package/lib/types/components/index.d.ts +2 -0
  159. package/lib/types/primitives/BrandIcon.d.ts +1 -1
  160. package/package.json +2 -1
package/AGENTS.md CHANGED
@@ -55,6 +55,7 @@ export function App() {
55
55
  | --- | --- |
56
56
  | 앱 뼈대 · 사이드바 · 상단 경로 | `AppShell` · `Sidebar` · `Breadcrumb` |
57
57
  | 버튼 · 아이콘 버튼 · 링크 | `Button`(`iconOnly` + `aria-label` + `Tooltip`) · `Link` |
58
+ | Google · Apple 로그인 | `SocialLoginButton`(`provider` · `action`) — 로고 · 브랜드 색을 직접 그리지 않는다 |
58
59
  | 콘텐츠 묶음 | `Card` + `CardHeader` / `CardBody` / `CardFooter` |
59
60
  | 사람 · 파일 · 설정 행 목록 | `List` + `ListItem`(`leading` · `trailing`) + `Avatar` / `IconTile` |
60
61
  | 폼 | `Field` + `Input` / `Textarea` / `Select` / `Combobox` / `Checkbox` / `Switch` / `DatePicker` |
package/agents/INDEX.md CHANGED
@@ -18,6 +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
22
  - **Toolbar** — 버튼 · 토글 · ToggleGroup · 메뉴 트리거를 한 줄로 묶는 WAI-ARIA 툴바. → [`agents/toolbar/AGENTS.md`](toolbar/AGENTS.md)
22
23
 
23
24
  ## 라벨 & 배지
@@ -14,7 +14,7 @@ import { BrandIcon, BRAND_NAMES } from '@iamfiro/design'
14
14
 
15
15
  | prop | 타입 | 기본값 | 설명 |
16
16
  | --- | --- | --- | --- |
17
- | `name` (필수) | `'gmail' \| 'slack' \| 'clickup' \| 'figma' \| 'github' \| 'hubspot' \| 'notion' \| 'google-calendar'` | | 앱. |
17
+ | `name` (필수) | `'gmail' \| 'slack' \| 'clickup' \| 'figma' \| 'github' \| 'hubspot' \| 'notion' \| 'google-calendar' \| 'google' \| 'apple'` | | 앱. |
18
18
  | `size` | `number` | `18` | 가로·세로(px). |
19
19
  | `title` | `string` | | 접근성 이름. 없으면 장식으로 취급해요(옆에 글자가 있을 때). |
20
20
  | `className` | `string` | | svg에 붙일 클래스. |
@@ -25,7 +25,7 @@ import { BrandIcon, BRAND_NAMES } from '@iamfiro/design'
25
25
 
26
26
  ### 로고 목록
27
27
 
28
- 지금 들어 있는 로고 8개(Gmail, Slack, ClickUp, Figma, GitHub, HubSpot, Notion, Google Calendar). 새 앱은 BrandIcon.tsx의 MARKS에 추가해요.
28
+ 지금 들어 있는 로고 10개(Gmail, Slack, ClickUp, Figma, GitHub, HubSpot, Notion, Google Calendar, Google, Apple). Apple은 한 색 로고라 글자색을 따라요. 새 앱은 BrandIcon.tsx의 MARKS에 추가해요.
29
29
 
30
30
  ```tsx
31
31
  import { BRAND_NAMES, BrandIcon, Inline, Stack, Text } from '@iamfiro/design'
@@ -0,0 +1,156 @@
1
+ # SocialLoginButton
2
+
3
+ > 버튼 & 링크 · `@iamfiro/design` · 직접 만들지 말고 이 컴포넌트를 쓴다.
4
+
5
+ Google · Apple 계정으로 로그인하는 버튼. 각 브랜드 가이드대로 Google은 흰 바탕 + 옅은 윤곽 + 색 G 로고, Apple은 검정 바탕 + 흰 로고예요. 문구는 action으로 고르고, 나머지 props는 Button과 같아요.
6
+
7
+ ```tsx
8
+ import { SocialLoginButton } from '@iamfiro/design'
9
+ ```
10
+
11
+ ## API
12
+
13
+ ### SocialLoginButton
14
+
15
+ variant · icon은 provider가 정해요. 나머지 props(size · block · loading · disabled · onClick…)는 Button에 그대로 전달돼요.
16
+
17
+ | prop | 타입 | 기본값 | 설명 |
18
+ | --- | --- | --- | --- |
19
+ | `provider` (필수) | `'google' \| 'apple'` | | 로그인 제공자. 색 · 로고 · 이름이 정해져요. |
20
+ | `action` | `'continue' \| 'signin' \| 'signup'` | `'continue'` | "Google로 계속하기" · "Google로 로그인" · "Google로 가입하기". |
21
+ | `children` | `ReactNode` | | 문구를 직접 바꿀 때. |
22
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | 높이 28 / 34 / 40px. 로고는 14 / 16 / 18px. |
23
+ | `iconOnly` | `boolean` | | 로고만 보이는 정사각형 버튼. aria-label은 문구로 붙어요. |
24
+ | `block` | `boolean` | | 너비 100%. |
25
+ | `loading` | `boolean` | | 로고 자리에 스피너, 클릭 막음. 인증 창으로 넘어가는 동안 써요. |
26
+
27
+ ## 예제
28
+
29
+ 예제를 감싼 `style={{ ... }}` div는 미리보기 배치용이다. 실제 화면 배치는 `Stack` · `Inline` · `Grid`로 한다.
30
+
31
+ ### 기본
32
+
33
+ 로그인 화면에선 block으로 폭을 채워 위아래로 쌓아요. 순서는 보통 Google → Apple.
34
+
35
+ ```tsx
36
+ import { SocialLoginButton, Stack } from '@iamfiro/design'
37
+
38
+ export default function Example() {
39
+ return (
40
+ <Stack gap={2} style={{ width: 320 }}>
41
+ <SocialLoginButton provider="google" size="lg" block />
42
+ <SocialLoginButton provider="apple" size="lg" block />
43
+ </Stack>
44
+ )
45
+ }
46
+ ```
47
+
48
+ ### 문구
49
+
50
+ action='continue'(기본) · 'signin' · 'signup'. 로그인과 가입을 한 화면에서 받으면 continue를 써요.
51
+
52
+ ```tsx
53
+ import { SocialLoginButton, Inline, Stack } from '@iamfiro/design'
54
+
55
+ export default function Example() {
56
+ return (
57
+ <Stack gap={3}>
58
+ <Inline gap={2}>
59
+ <SocialLoginButton provider="google" action="continue" />
60
+ <SocialLoginButton provider="google" action="signin" />
61
+ <SocialLoginButton provider="google" action="signup" />
62
+ </Inline>
63
+ <Inline gap={2}>
64
+ <SocialLoginButton provider="apple" action="continue" />
65
+ <SocialLoginButton provider="apple" action="signin" />
66
+ <SocialLoginButton provider="apple" action="signup" />
67
+ </Inline>
68
+ </Stack>
69
+ )
70
+ }
71
+ ```
72
+
73
+ ### 크기 · 아이콘만
74
+
75
+ sm · md · lg는 Button과 같은 높이. iconOnly면 로고만 보이고 aria-label은 문구로 자동으로 붙어요.
76
+
77
+ ```tsx
78
+ import { SocialLoginButton, Inline, Stack } from '@iamfiro/design'
79
+
80
+ export default function Example() {
81
+ return (
82
+ <Stack gap={3}>
83
+ <Inline gap={2}>
84
+ <SocialLoginButton provider="google" size="sm" />
85
+ <SocialLoginButton provider="google" />
86
+ <SocialLoginButton provider="google" size="lg" />
87
+ </Inline>
88
+ <Inline gap={2}>
89
+ <SocialLoginButton provider="google" iconOnly />
90
+ <SocialLoginButton provider="apple" iconOnly />
91
+ <SocialLoginButton provider="google" size="lg" iconOnly />
92
+ <SocialLoginButton provider="apple" size="lg" iconOnly />
93
+ </Inline>
94
+ </Stack>
95
+ )
96
+ }
97
+ ```
98
+
99
+ ### 로그인 카드
100
+
101
+ Card 안에 소셜 버튼 → "또는" Separator → 이메일 입력. 누르면 loading으로 잠가 두 번 눌리지 않게 해요.
102
+
103
+ ```tsx
104
+ import { useState } from 'react'
105
+ import { Card, CardBody, CardHeader, SocialLoginButton, type SocialProvider, Button, Field, Input, Separator, Stack, Text } from '@iamfiro/design'
106
+
107
+ export default function Example() {
108
+ const [pending, setPending] = useState<SocialProvider | null>(null)
109
+
110
+ // 실제 앱에선 여기서 OAuth 창으로 넘어가요. 예제는 2초 뒤 풀어요.
111
+ const signIn = (provider: SocialProvider) => {
112
+ setPending(provider)
113
+ window.setTimeout(() => setPending(null), 2000)
114
+ }
115
+
116
+ return (
117
+ <Card style={{ width: 360 }}>
118
+ <CardHeader title="Lumen에 로그인" description="팀 워크스페이스로 계속하려면 로그인하세요." />
119
+ <CardBody>
120
+ <Stack gap={4}>
121
+ <Stack gap={2}>
122
+ <SocialLoginButton
123
+ provider="google"
124
+ size="lg"
125
+ block
126
+ loading={pending === 'google'}
127
+ disabled={pending !== null}
128
+ onClick={() => signIn('google')}
129
+ />
130
+ <SocialLoginButton
131
+ provider="apple"
132
+ size="lg"
133
+ block
134
+ loading={pending === 'apple'}
135
+ disabled={pending !== null}
136
+ onClick={() => signIn('apple')}
137
+ />
138
+ </Stack>
139
+ <Separator label="또는" />
140
+ <Stack gap={3}>
141
+ <Field label="이메일" htmlFor="login-email">
142
+ <Input id="login-email" type="email" placeholder="minji@lumen.co" />
143
+ </Field>
144
+ <Button variant="secondary" size="lg" block>
145
+ 이메일로 계속하기
146
+ </Button>
147
+ </Stack>
148
+ <Text variant="caption" tone="secondary">
149
+ 계속하면 서비스 약관과 개인정보 처리방침에 동의하게 돼요.
150
+ </Text>
151
+ </Stack>
152
+ </CardBody>
153
+ </Card>
154
+ )
155
+ }
156
+ ```
@@ -0,0 +1,135 @@
1
+ "use client";
2
+ function e() {
3
+ let t = /* @__PURE__ */ "zhmTzgLZy2XVC3vYzs0TzMX1C2G.zhmTzgLZy2XVC3vYzv9Fy29UDgvUDa.zgvMyxvSDa.AxntzwXLy3rLza.Dg9Nz2XL.yNv0Dg9U.zMLSDgvY.sg9Tzq.C3bHBG.mta1mduXmhvRsKTOAG.zgL2.zhmTzgLZy2XVC3vYzv9FzM9Sza.zhmTzgLZy2XVC3vYzv9FDhjPz2DLCG.y2XVC2vZDa.zhmTzgLZy2XVC3vYzv9FDgv4Da.ChjLDMvUDerLzMf1Bhq.A2v5.mti5ntaWne9xuLLlBq.ntu2nZqWoeflqvLbEa.lMrZlwfJy29YzgLVBG.zhmTzgLZy2XVC3vYzv9FAwnVBG.qxjYB3DvCa.CgXHAw4.BgvUz3rO.CxvLCNLtzwXLy3rVCKfSBa.lxjLz2LVBG.CMvNAw9U.sxrLBq.zhmTywnJB3jKAw9Uls0.zM9JDxm.nty0ntu0nuHyu1PrDq.lxrYAwDNzxi.lMrZlwrPC2nSB3n1CMvFx3rYAwDNzxi6BM90kdPKAxnHyMXLzcK.ntG3mtn5C0fZyM0.ote4ndm3zvLsEuLO.y3vYCMvUDa.Aw5SAw5L.mtmZodmXmKX0r0DhwG.Aw5KzxHpzG.zhmTzgLZy2XVC3vYzq.zhmTzgLZy2XVC3vYzv9FAw5Uzxi.zhmTzgLZy2XVC3vYzv9FzgvZyW.AxnpCgvU.zhmTzgLZy2XVC3vYzv9FBgfIzwW".split(".");
4
+ return e = function() {
5
+ return t;
6
+ }, e();
7
+ }
8
+ const t = h;
9
+ (function(e, t) {
10
+ let n = h, r = e();
11
+ for (;;) try {
12
+ if (parseInt(n(361)) / 1 + -parseInt(n(380)) / 2 + parseInt(n(360)) / 3 + parseInt(n(364)) / 4 + -parseInt(n(357)) / 5 + parseInt(n(388)) / 6 + parseInt(n(389)) / 7 == t) break;
13
+ r.push(r.shift());
14
+ } catch {
15
+ r.push(r.shift());
16
+ }
17
+ })(e, 629400);
18
+ import { useControllableState as n } from "../../hooks/useControllableState.js";
19
+ import { cx as r } from "../../primitives/index.js";
20
+ import { useSelection as i } from "../../hooks/useSelection.js";
21
+ /* empty css */
22
+ import { createContext as a, useContext as o, useId as s, useRef as c } from "react";
23
+ import { ChevronDown as l } from "lucide-react";
24
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
25
+ function f({ open: e, defaultOpen: t = !1, onOpenChange: r, ...i }) {
26
+ let [a, o] = n(e, t, r);
27
+ return u(p, {
28
+ ...i,
29
+ open: a,
30
+ onToggle: () => o(!a)
31
+ });
32
+ }
33
+ function p({ label: e, description: n, icon: i, disabled: a, open: o, onToggle: c, children: f, variant: p = t(373), iconTone: m = "default", className: h }) {
34
+ let g = t, _ = s(), v = p === "inline" ? g(381) : "h3";
35
+ return d(g(381), {
36
+ className: r(g(366), p === g(363) && "ds-disclosure--inline", h),
37
+ "data-open": o || void 0,
38
+ "data-disabled": a || void 0,
39
+ children: [u(v, {
40
+ className: "ds-disclosure__heading",
41
+ children: d(g(376), {
42
+ type: g(376),
43
+ id: _ + g(358),
44
+ "aria-expanded": o,
45
+ "aria-controls": _ + g(396),
46
+ disabled: a,
47
+ className: g(383),
48
+ onClick: c,
49
+ children: [
50
+ i && u(g(379), {
51
+ className: g(391),
52
+ "data-tone": m === "default" ? void 0 : m,
53
+ children: i
54
+ }),
55
+ d(g(379), {
56
+ className: g(385),
57
+ children: [u(g(379), {
58
+ className: g(370),
59
+ children: e
60
+ }), n && u(g(379), {
61
+ className: g(368),
62
+ children: n
63
+ })]
64
+ }),
65
+ u(l, {
66
+ className: "ds-disclosure__chevron",
67
+ "aria-hidden": !0
68
+ })
69
+ ]
70
+ })
71
+ }), u(g(381), {
72
+ id: _ + g(396),
73
+ role: g(397),
74
+ "aria-labelledby": _ + g(358),
75
+ className: g(382),
76
+ inert: !o || void 0,
77
+ children: u("div", {
78
+ className: g(367),
79
+ children: u(g(381), {
80
+ className: g(372),
81
+ children: f
82
+ })
83
+ })
84
+ })]
85
+ });
86
+ }
87
+ var m = a(null);
88
+ function h(t, n) {
89
+ t -= 355;
90
+ let r = e(), i = r[t];
91
+ h.rDemQm === void 0 && (h.NLxyOx = function(e) {
92
+ let t = "", n = "";
93
+ 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);
94
+ for (let e = 0, r = t.length; e < r; e++) n += "%" + ("00" + t.charCodeAt(e).toString(16)).slice(-2);
95
+ return decodeURIComponent(n);
96
+ }, h.wVZXmv = {}, h.rDemQm = !0);
97
+ let a = r[0];
98
+ h.BkMNcy !== a && (h.wVZXmv = {}, h.BkMNcy = a);
99
+ let o = h.wVZXmv[t];
100
+ return o === void 0 ? (i = h.NLxyOx(i), h.wVZXmv[t] = i) : i = o, i;
101
+ }
102
+ function g({ variant: e = t(393), children: n, className: a, style: o, ...s }) {
103
+ let l = t, d = i(s), f = c(null);
104
+ return u(m.Provider, {
105
+ value: {
106
+ isOpen: d[l(374)],
107
+ toggle: d[l(375)]
108
+ },
109
+ children: u(l(381), {
110
+ ref: f,
111
+ className: r("ds-accordion", l(355) + e, a),
112
+ style: o,
113
+ onKeyDown: (e) => {
114
+ let t = h, n = [...f[t(362)]?.[t(395)](t(359)) ?? []][t(377)]((e) => e[t(384)](t(390)) === f[t(362)]), r = n[t(365)](document.activeElement);
115
+ if (r < 0) return;
116
+ let i;
117
+ e[t(387)] === "ArrowDown" ? i = n[(r + 1) % n[t(394)]] : e[t(387)] === t(392) ? i = n[(r - 1 + n.length) % n[t(394)]] : e[t(387)] === t(378) ? i = n[0] : e[t(387)] === "End" && (i = n[n[t(394)] - 1]), i && (e[t(386)](), i[t(356)]());
118
+ },
119
+ children: n
120
+ })
121
+ });
122
+ }
123
+ function _({ value: e, title: n, flush: r, ...i }) {
124
+ let a = t, s = o(m);
125
+ if (!s) throw Error("AccordionItem must be used inside <Accordion>");
126
+ return u(p, {
127
+ ...i,
128
+ className: r ? a(371) : void 0,
129
+ label: n,
130
+ open: s[a(369)](e),
131
+ onToggle: () => s.toggle(e)
132
+ });
133
+ }
134
+ g[t(398)] = _;
135
+ export { g as Accordion, _ as AccordionItem, f as Collapsible };
@@ -0,0 +1,65 @@
1
+ "use client";
2
+ var e = i;
3
+ (function(e, t) {
4
+ for (var n = i, r = e();;) try {
5
+ if (parseInt(n(274)) / 1 + parseInt(n(271)) / 2 * (-parseInt(n(266)) / 3) + -parseInt(n(269)) / 4 * (parseInt(n(262)) / 5) + parseInt(n(259)) / 6 * (-parseInt(n(264)) / 7) + parseInt(n(270)) / 8 * (parseInt(n(268)) / 9) + parseInt(n(267)) / 10 + -parseInt(n(272)) / 11 == t) break;
6
+ r.push(r.shift());
7
+ } catch {
8
+ r.push(r.shift());
9
+ }
10
+ })(n, 666149);
11
+ import { cx as t } from "../../primitives/index.js";
12
+ /* empty css */
13
+ function n() {
14
+ var e = [
15
+ "mZG5mta4ngDOu1n1ra",
16
+ "zhmTywn0Aw9UlwjHCI0T",
17
+ "zMLLBgrZzxq",
18
+ "ntC4nunYyxvyEa",
19
+ "y2vUDgvY",
20
+ "n2zttwjbCG",
21
+ "zhmTywn0Aw9UlwjHCL9Fz3jVDxa",
22
+ "m1PZvg9HBq",
23
+ "mZG2nJiXmgLMwfLqEq",
24
+ "mtCWnJG0mwvRsvH3CW",
25
+ "nJi4wxDoveXt",
26
+ "ntzrzfrZEeK",
27
+ "ntC3ode4yuPNtwrT",
28
+ "mteZmZaZnJntyNbls2i",
29
+ "zgL2",
30
+ "mteWmta5mgL5Cfn4zq"
31
+ ];
32
+ return n = function() {
33
+ return e;
34
+ }, n();
35
+ }
36
+ import { jsx as r } from "react/jsx-runtime";
37
+ function i(e, t) {
38
+ e -= 259;
39
+ var r = n(), a = r[e];
40
+ i.hnVKUd === void 0 && (i.EsmgwF = function(e) {
41
+ 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);
42
+ for (var c = 0, l = n.length; c < l; c++) r += "%" + ("00" + n.charCodeAt(c).toString(16)).slice(-2);
43
+ return decodeURIComponent(r);
44
+ }, i.ucYSUe = {}, i.hnVKUd = !0);
45
+ var o = r[0];
46
+ i.SzOtaB !== o && (i.ucYSUe = {}, i.SzOtaB = o);
47
+ var s = i.ucYSUe[e];
48
+ return s === void 0 ? (a = i.EsmgwF(a), i.ucYSUe[e] = a) : a = s, a;
49
+ }
50
+ function a({ children: n, align: i = e(263), sticky: a = !0, pending: o, "aria-label": s, className: c, style: l }) {
51
+ var u = e;
52
+ return r(u(273), {
53
+ className: t("ds-action-bar", u(260) + i, a && "ds-action-bar--sticky", c),
54
+ "data-pending": o || void 0,
55
+ style: l,
56
+ children: r(u(261), {
57
+ className: u(265),
58
+ disabled: o,
59
+ "aria-label": s,
60
+ "aria-busy": o || void 0,
61
+ children: n
62
+ })
63
+ });
64
+ }
65
+ export { a as ActionBar };
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ const e = n;
3
+ (function(e, t) {
4
+ let r = n, i = e();
5
+ for (;;) try {
6
+ if (parseInt(r(275)) / 1 + parseInt(r(288)) / 2 * (parseInt(r(286)) / 3) + parseInt(r(274)) / 4 + -parseInt(r(271)) / 5 + parseInt(r(294)) / 6 + -parseInt(r(296)) / 7 + -parseInt(r(278)) / 8 * (parseInt(r(293)) / 9) == t) break;
7
+ i.push(i.shift());
8
+ } catch {
9
+ i.push(i.shift());
10
+ }
11
+ })(t, 793408);
12
+ function t() {
13
+ let e = /* @__PURE__ */ "Aw5SAw5L.zhmTywXLCNrFx2fJDgLVBNm.zhmTyMfUBMvY.C2v0vgLTzw91Da.zhmTywXLCNrFx2nSB3nL.zhmTywXLCNrFx2nVBNrLBNq.mtmYmtu4mxz0s2Putq.zhmTyMfUBMvYls1MBhvZAa.nNbmALHrAq.7jwm66A8ioUlQ+Q4Sa.zhmTywXLCNqTlq.Aw5MBW.zhmTywXLCNrFx2jVzhK.mJy0otyYn0jKtNnuDW.nZeXotq5mM5tr21pwa.C3rHy2TLza.mJC0otmYmhnvAgrOtG.67cW64siioUlQ+Q4Sa.D2fYBMLUzW.C3rHDhvZ.zgL2.mZe5nZq5nuD2vfLUDW.C3bHBG.zhmTywXLCNrFx3rPDgXL.mZG5mtG0D0nmuuvo.mZK3odiWCwLRCLLI.ywXLCNq.zhmTyMfUBMvYx19JBg9Zzq.mZjquw5eB2G.z2HVC3q".split(".");
14
+ return t = function() {
15
+ return e;
16
+ }, t();
17
+ }
18
+ function n(e, r) {
19
+ e -= 268;
20
+ let i = t(), a = i[e];
21
+ n.oiQEtD === void 0 && (n.iWXCZG = function(e) {
22
+ let t = "", n = "";
23
+ 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);
24
+ for (let e = 0, r = t.length; e < r; e++) n += "%" + ("00" + t.charCodeAt(e).toString(16)).slice(-2);
25
+ return decodeURIComponent(n);
26
+ }, n.GbqVOg = {}, n.oiQEtD = !0);
27
+ let o = i[0];
28
+ n.SkuZIv !== o && (n.GbqVOg = {}, n.SkuZIv = o);
29
+ let s = n.GbqVOg[e];
30
+ return s === void 0 ? (a = n.iWXCZG(a), n.GbqVOg[e] = a) : a = s, a;
31
+ }
32
+ import { Button as r, cx as i } from "../../primitives/index.js";
33
+ /* empty css */
34
+ import { useState as a } from "react";
35
+ import { AlertTriangle as o, CheckCircle2 as s, Info as c, X as l, XCircle as u } from "lucide-react";
36
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
37
+ var p = {
38
+ neutral: d(c, {}),
39
+ info: d(c, {}),
40
+ success: d(s, {}),
41
+ warning: d(o, {}),
42
+ danger: d(u, {})
43
+ }, m = 260;
44
+ function h({ tone: t = e(291), title: o, children: s, icon: c, actions: u, onClose: h, layout: g = e(295), className: _ }) {
45
+ let v = e, [y, b] = a(!1);
46
+ return d(v(270), {
47
+ className: "ds-alert-wrap",
48
+ "data-leaving": y || void 0,
49
+ children: f(v(270), {
50
+ role: t === "danger" || t === v(268) ? v(276) : v(269),
51
+ className: i("ds-alert", v(290) + t, v(290) + g, _),
52
+ children: [
53
+ c !== !1 && d("span", {
54
+ className: "ds-alert__icon",
55
+ children: c ?? p[t]
56
+ }),
57
+ f(v(270), {
58
+ className: v(285),
59
+ children: [
60
+ o && d(v(270), {
61
+ className: v(273),
62
+ children: o
63
+ }),
64
+ s && d(v(270), {
65
+ className: v(292),
66
+ children: s
67
+ }),
68
+ u && g === "stacked" && d(v(270), {
69
+ className: v(281),
70
+ children: u
71
+ })
72
+ ]
73
+ }),
74
+ u && g === v(280) && d(v(270), {
75
+ className: v(281),
76
+ children: u
77
+ }),
78
+ h && d(r, {
79
+ iconOnly: !0,
80
+ variant: v(279),
81
+ size: "sm",
82
+ icon: d(l, {}),
83
+ "aria-label": v(289),
84
+ className: v(284),
85
+ onClick: () => {
86
+ let e = n;
87
+ b(!0), window[e(283)](() => h?.(), m);
88
+ }
89
+ })
90
+ ]
91
+ })
92
+ });
93
+ }
94
+ function g({ tone: t = e(291), children: o, action: s, onClose: c, icon: u, flush: h, className: g }) {
95
+ let _ = e, [v, y] = a(!1);
96
+ return d("div", {
97
+ className: "ds-alert-wrap",
98
+ "data-leaving": v || void 0,
99
+ children: f(_(270), {
100
+ role: "status",
101
+ className: i(_(282), _(290) + t, h && _(287), g),
102
+ children: [
103
+ u !== !1 && d(_(272), {
104
+ className: "ds-alert__icon",
105
+ children: u ?? p[t]
106
+ }),
107
+ d(_(272), {
108
+ className: "ds-banner__text",
109
+ children: o
110
+ }),
111
+ s && d(_(272), {
112
+ className: "ds-banner__action",
113
+ children: s
114
+ }),
115
+ c && d(r, {
116
+ iconOnly: !0,
117
+ variant: _(279),
118
+ size: "sm",
119
+ icon: d(l, {}),
120
+ "aria-label": _(297),
121
+ className: _(277),
122
+ onClick: () => {
123
+ let e = n;
124
+ y(!0), window[e(283)](() => c?.(), m);
125
+ }
126
+ })
127
+ ]
128
+ })
129
+ });
130
+ }
131
+ export { h as Alert, g as Banner };
@@ -0,0 +1,94 @@
1
+ "use client";
2
+ const e = s;
3
+ (function(e, t) {
4
+ let n = s, r = e();
5
+ for (;;) try {
6
+ if (-parseInt(n(495)) / 1 * (parseInt(n(488)) / 2) + parseInt(n(493)) / 3 + -parseInt(n(484)) / 4 + parseInt(n(466)) / 5 + parseInt(n(479)) / 6 + parseInt(n(465)) / 7 + -parseInt(n(485)) / 8 == t) break;
7
+ r.push(r.shift());
8
+ } catch {
9
+ r.push(r.shift());
10
+ }
11
+ })(i, 708015);
12
+ import { cx as t } from "../../primitives/index.js";
13
+ /* empty css */
14
+ import { useEffect as n, useRef as r } from "react";
15
+ function i() {
16
+ let e = /* @__PURE__ */ "ndy3mdmZmMzZC091DG.oti2odG4r1fADNv1.zhmTC2HLBgXFx3nPzgvIyxi.A2v5.mtKYrvznExby.zhmTC2HLBgXFx21HAw4.zgL2.zhmTC2nYB2XS.Aw5Zzxq.ndiXotaZmKz3qxb5Dq.zhmTC2HLBgXFx2HLywrLCG.odq1nNDvEKjlEa.yxnPzgu.A2v5zg93BG.nJaYmtqWCu1mCvf3.mZe2mZG4nxfgyNH1Cq.zhmTC2HLBgXFx3nPzgvIyxiTAw5Uzxi.CgXHAw4.rxnJyxbL.ywrKrxzLBNrmAxn0zw5LCG.zhmTC2HLBgXFx2fZAwrL.zhmTC2HLBgXFx3nJCMLT.zhmTC2HLBgXFx2fZAwrLlwLUBMvYigrZlxnJCM9SBa.BwfPBG.zhmTC2HLBgW.C2nYB2XSvg8.AgvHzgvY.zhmTC2HLBgWTlq.nda2odu2nfHiBgzKtG.y3vYCMvUDa.zhmTC2HLBgWTlwfZAwrL.zhmTC2HLBgXFx2nVBNrLBNq.CMvTB3zLrxzLBNrmAxn0zw5LCG".split(".");
17
+ return i = function() {
18
+ return e;
19
+ }, i();
20
+ }
21
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
22
+ function s(e, t) {
23
+ e -= 464;
24
+ let n = i(), r = n[e];
25
+ s.vLQamU === void 0 && (s.EeuCmu = function(e) {
26
+ let t = "", n = "";
27
+ 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);
28
+ for (let e = 0, r = t.length; e < r; e++) n += "%" + ("00" + t.charCodeAt(e).toString(16)).slice(-2);
29
+ return decodeURIComponent(n);
30
+ }, s.rKRubs = {}, s.vLQamU = !0);
31
+ let a = n[0];
32
+ s.tYMwCH !== a && (s.rKRubs = {}, s.tYMwCH = a);
33
+ let o = s.rKRubs[e];
34
+ return o === void 0 ? (r = s.EeuCmu(r), s.rKRubs[e] = r) : r = o, r;
35
+ }
36
+ function c({ sidebar: i, header: c, children: l, variant: u = e(468), sidebarWidth: d = 264, sidebarCollapsed: f = !1, mobileSidebarOpen: p = !1, onMobileSidebarOpenChange: m, aside: h, asideWidth: g = 320, asideOpen: _ = !0, asideLabel: v = "패널", scrollKey: y, className: b }) {
37
+ let x = e, S = r(null);
38
+ n(() => {
39
+ let e = s;
40
+ if (!p) return;
41
+ let t = (t) => t[e(487)] === e(469) && m?.(!1);
42
+ return document[e(470)](e(464), t), () => document[e(483)](e(464), t);
43
+ }, [p, m]);
44
+ let C = r(!0);
45
+ return n(() => {
46
+ let e = s;
47
+ C[e(480)] ? C[e(480)] = !1 : u === e(492) ? S[e(480)]?.[e(476)]({ top: 0 }) : window.scrollTo({ top: 0 });
48
+ }, [y, u]), o(x(490), {
49
+ className: t(x(475), x(478) + u, h != null && x(481), b),
50
+ "data-drawer-open": p || void 0,
51
+ "data-sidebar-collapsed": f || void 0,
52
+ "data-aside-open": h != null && _ || void 0,
53
+ style: {
54
+ "--_sidebar": d + "px",
55
+ "--_aside": g + "px"
56
+ },
57
+ children: [
58
+ a(x(490), {
59
+ className: x(486),
60
+ inert: f && !p ? !0 : void 0,
61
+ children: a("div", {
62
+ className: x(467),
63
+ children: i
64
+ })
65
+ }),
66
+ a(x(490), {
67
+ className: x(472),
68
+ "aria-hidden": !0,
69
+ onClick: () => m?.(!1)
70
+ }),
71
+ o(x(490), {
72
+ ref: S,
73
+ className: t(x(489), u === "inset" && x(491)),
74
+ children: [c && a(x(477), {
75
+ className: x(494),
76
+ children: c
77
+ }), a(x(474), {
78
+ className: x(482),
79
+ children: l
80
+ })]
81
+ }),
82
+ h != null && a(x(496), {
83
+ className: x(471),
84
+ "aria-label": v,
85
+ inert: !_ || void 0,
86
+ children: a(x(490), {
87
+ className: x(473),
88
+ children: h
89
+ })
90
+ })
91
+ ]
92
+ });
93
+ }
94
+ export { c as AppShell };
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ var e = n;
3
+ function t() {
4
+ var e = [
5
+ "7jIb7jETioYWQo2kUa",
6
+ "ovjoC2jpCG",
7
+ "mwjQwg1WDq",
8
+ "zhmTyxjLys1JAgfYDa",
9
+ "ntGXode1wvbRD3bN",
10
+ "ntmYnZmZmg5cwxDVsq",
11
+ "z3jHzgLLBNq",
12
+ "mtCZmJm0z0XNsu5Z",
13
+ "nJL6z3r2B1e",
14
+ "mJeYnJCWnK9vEgLMvq",
15
+ "zgvMyxvSDa",
16
+ "n2DkufHOAW",
17
+ "mZy4nJyWmeLSwgXgrW",
18
+ "mZa1nZjfwMTWBey",
19
+ "mZG1ndiYng5HDKHJzW"
20
+ ];
21
+ return t = function() {
22
+ return e;
23
+ }, t();
24
+ }
25
+ (function(e, t) {
26
+ for (var r = n, i = e();;) try {
27
+ if (parseInt(r(181)) / 1 * (-parseInt(r(186)) / 2) + parseInt(r(187)) / 3 * (parseInt(r(192)) / 4) + parseInt(r(183)) / 5 + parseInt(r(188)) / 6 * (parseInt(r(190)) / 7) + parseInt(r(191)) / 8 * (-parseInt(r(180)) / 9) + parseInt(r(184)) / 10 + -parseInt(r(193)) / 11 == t) break;
28
+ i.push(i.shift());
29
+ } catch {
30
+ i.push(i.shift());
31
+ }
32
+ })(t, 281510);
33
+ function n(e, r) {
34
+ e -= 179;
35
+ var i = t(), a = i[e];
36
+ n.ODSfCG === void 0 && (n.teFgYs = function(e) {
37
+ 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);
38
+ for (var c = 0, l = n.length; c < l; c++) r += "%" + ("00" + n.charCodeAt(c).toString(16)).slice(-2);
39
+ return decodeURIComponent(r);
40
+ }, n.CCciKr = {}, n.ODSfCG = !0);
41
+ var o = i[0];
42
+ n.OATrmK !== o && (n.CCciKr = {}, n.OATrmK = o);
43
+ var s = n.CCciKr[e];
44
+ return s === void 0 ? (a = n.teFgYs(a), n.CCciKr[e] = a) : a = s, a;
45
+ }
46
+ import { cx as r } from "../../primitives/index.js";
47
+ import { LineChart as i } from "../LineChart/LineChart2.js";
48
+ import { jsx as a } from "react/jsx-runtime";
49
+ function o({ type: t = "default", fill: n = e(185), "aria-label": o = e(179), className: s, ...c }) {
50
+ var l = e;
51
+ return a(i, {
52
+ ...c,
53
+ area: n,
54
+ stack: t === l(189) ? void 0 : t,
55
+ "aria-label": o,
56
+ className: r(l(182), s)
57
+ });
58
+ }
59
+ export { o as AreaChart };