@iamfiro/design 0.1.0 → 0.3.1

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 +66 -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 +90 -0
  13. package/lib/components/Calendar/Calendar2.js +309 -0
  14. package/lib/components/Calendar/DatePicker2.js +228 -0
  15. package/lib/components/Calendar/date.js +118 -0
  16. package/lib/components/Card/Card2.js +103 -0
  17. package/lib/components/CardFrame/CardFrame2.js +67 -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 +48 -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 +111 -0
  26. package/lib/components/ColorPicker/ColorPicker2.js +609 -0
  27. package/lib/components/ColorPicker/color.js +180 -0
  28. package/lib/components/ColorPicker/presets.js +70 -0
  29. package/lib/components/Combobox/Combobox2.js +228 -0
  30. package/lib/components/CommandMenu/CommandMenu.js +267 -0
  31. package/lib/components/Comment/Comment2.js +110 -0
  32. package/lib/components/ContextMenu/ContextMenu2.js +168 -0
  33. package/lib/components/DataGrid/DataGrid2.js +1998 -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 +557 -0
  37. package/lib/components/DataGrid/panels.js +701 -0
  38. package/lib/components/DataGrid/typeMeta.js +75 -0
  39. package/lib/components/DataGrid/types.js +53 -0
  40. package/lib/components/DescriptionList/DescriptionList2.js +180 -0
  41. package/lib/components/Dialog/AlertDialog.js +119 -0
  42. package/lib/components/Dialog/Dialog2.js +110 -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 +393 -0
  46. package/lib/components/DropdownMenu/menuCore.js +63 -0
  47. package/lib/components/Dropzone/Dropzone2.js +145 -0
  48. package/lib/components/EmptyState/EmptyState2.js +70 -0
  49. package/lib/components/FileChip/FileChip2.js +94 -0
  50. package/lib/components/FileUpload/FileUpload.js +259 -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 +72 -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 +110 -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 +132 -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 +222 -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 +128 -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 +52 -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 +90 -0
  77. package/lib/components/PieChart/useArcTween.js +92 -0
  78. package/lib/components/Popover/Popover2.js +111 -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 +238 -0
  82. package/lib/components/Resizable/layout.js +115 -0
  83. package/lib/components/ScaledPreview/ScaledPreview2.js +99 -0
  84. package/lib/components/ScatterChart/ScatterChart2.js +355 -0
  85. package/lib/components/ScatterChart/scatter.js +85 -0
  86. package/lib/components/ScrollArea/ScrollArea2.js +217 -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 +84 -0
  92. package/lib/components/SparkChart/SparkChart2.js +217 -0
  93. package/lib/components/SparkChart/spark.js +71 -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 +357 -0
  101. package/lib/components/TimePicker/TimePicker2.js +388 -0
  102. package/lib/components/TimePicker/time.js +81 -0
  103. package/lib/components/Timeline/Timeline2.js +369 -0
  104. package/lib/components/Timeline/scale.js +81 -0
  105. package/lib/components/Toast/Toaster.js +213 -0
  106. package/lib/components/Toast/store.js +128 -0
  107. package/lib/components/ToggleGroup/ToggleGroup2.js +125 -0
  108. package/lib/components/Toolbar/Toolbar2.js +283 -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 +286 -0
  112. package/lib/hooks/timing.js +57 -0
  113. package/lib/hooks/useControllableState.js +49 -0
  114. package/lib/hooks/useCountdown.js +75 -0
  115. package/lib/hooks/useDigitInput.js +103 -0
  116. package/lib/hooks/useDismiss.js +69 -0
  117. package/lib/hooks/useElapsed.js +85 -0
  118. package/lib/hooks/useFloating.js +70 -0
  119. package/lib/hooks/useFocusTrap.js +85 -0
  120. package/lib/hooks/usePresence.js +58 -0
  121. package/lib/hooks/usePressToOpen.js +70 -0
  122. package/lib/hooks/useScrollLock.js +71 -0
  123. package/lib/hooks/useSelection.js +65 -0
  124. package/lib/index.js +176 -17911
  125. package/lib/primitives/AspectRatio2.js +76 -0
  126. package/lib/primitives/BrandIcon.js +245 -0
  127. package/lib/primitives/ColorDot2.js +71 -0
  128. package/lib/primitives/CopyButton2.js +86 -0
  129. package/lib/primitives/CountBadge2.js +80 -0
  130. package/lib/primitives/Countdown2.js +61 -0
  131. package/lib/primitives/Delta2.js +92 -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 +69 -0
  137. package/lib/primitives/Kbd2.js +88 -0
  138. package/lib/primitives/Layout2.js +118 -0
  139. package/lib/primitives/Link2.js +55 -0
  140. package/lib/primitives/MaskedText2.js +121 -0
  141. package/lib/primitives/Progress2.js +137 -0
  142. package/lib/primitives/RelativeTime.js +82 -0
  143. package/lib/primitives/SearchInput2.js +85 -0
  144. package/lib/primitives/SelectorButton2.js +96 -0
  145. package/lib/primitives/Spinner2.js +94 -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 +54 -0
  151. package/lib/primitives/formatElapsed.js +63 -0
  152. package/lib/primitives/formatRelativeTime.js +64 -0
  153. package/lib/primitives/hotkey.js +94 -0
  154. package/lib/primitives/index.js +351 -0
  155. package/lib/primitives/maskValue.js +69 -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
@@ -0,0 +1,701 @@
1
+ "use client";
2
+ const e = K;
3
+ (function(e, t) {
4
+ let n = K, r = e();
5
+ for (;;) try {
6
+ if (-parseInt(n(434)) / 1 * (parseInt(n(353)) / 2) + -parseInt(n(451)) / 3 * (-parseInt(n(432)) / 4) + parseInt(n(338)) / 5 + -parseInt(n(436)) / 6 * (-parseInt(n(444)) / 7) + -parseInt(n(366)) / 8 * (-parseInt(n(459)) / 9) + -parseInt(n(402)) / 10 * (parseInt(n(395)) / 11) + parseInt(n(389)) / 12 * (-parseInt(n(349)) / 13) == t) break;
7
+ r.push(r.shift());
8
+ } catch {
9
+ r.push(r.shift());
10
+ }
11
+ })($, 909913);
12
+ import { Text as t } from "../../primitives/Typography2.js";
13
+ import { Badge as n, Button as r, Input as i, NativeSelect as a, SegmentedControl as o, Switch as s, cx as c } from "../../primitives/index.js";
14
+ import { AGGREGATE_LABEL as l, FILTER_OPS as u, FILTER_OP_LABEL as d, aggregatesFor as f, filterOptions as p, formatNumber as m, newId as h, opNeedsValue as g, toISODate as _, todayISO as v, typeOf as y } from "./model.js";
15
+ import { Menu as b } from "./GridPopover.js";
16
+ import { TYPE_META as x } from "./typeMeta.js";
17
+ import { useState as S } from "react";
18
+ import { ArrowDown as C, ArrowLeft as w, ArrowLeftToLine as T, ArrowRightToLine as E, ArrowUp as D, Check as O, ChevronLeft as k, ChevronRight as A, Copy as ee, Download as j, Eye as M, EyeOff as N, Hash as P, Layers as F, ListFilter as I, Pin as L, PinOff as R, Plus as z, Trash2 as B, WrapText as V, X as H } from "lucide-react";
19
+ import { Fragment as U, jsx as W, jsxs as G } from "react/jsx-runtime";
20
+ function K(e, t) {
21
+ e -= 319;
22
+ let n = $(), r = n[e];
23
+ K.JXxJGp === void 0 && (K.PSKuaD = function(e) {
24
+ let t = "", n = "";
25
+ 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);
26
+ for (let e = 0, r = t.length; e < r; e++) n += "%" + ("00" + t.charCodeAt(e).toString(16)).slice(-2);
27
+ return decodeURIComponent(n);
28
+ }, K.iYJyho = {}, K.JXxJGp = !0);
29
+ let i = n[0];
30
+ K.hGqcgM !== i && (K.iYJyho = {}, K.hGqcgM = i);
31
+ let a = K.iYJyho[e];
32
+ return a === void 0 ? (r = K.PSKuaD(r), K.iYJyho[e] = r) : r = a, r;
33
+ }
34
+ var q = {
35
+ plain: "숫자",
36
+ comma: e(330),
37
+ percent: "퍼센트",
38
+ won: "원",
39
+ usd: "달러"
40
+ };
41
+ function J({ column: t, grouped: n, canEditColumns: r, actions: a }) {
42
+ let o = e, [s, c] = S("main"), [l, u] = S(t[o(347)]), d = y(t), f = () => l.trim() && l[o(322)]() !== t[o(347)] && a[o(320)](l[o(322)]());
43
+ if (s !== o(440)) {
44
+ let e = G("button", {
45
+ type: o(404),
46
+ className: o(427),
47
+ onClick: () => c(o(440)),
48
+ children: [W(w, {}), s === o(446) ? o(460) : o(429)]
49
+ }), n = s === o(446) ? Object.keys(x)[o(417)]((e) => ({
50
+ key: e,
51
+ label: x[e][o(381)],
52
+ icon: x[e][o(430)],
53
+ checked: e === d,
54
+ onSelect: () => {
55
+ e !== d && a.setType(e), c("main");
56
+ }
57
+ })) : Object[o(359)](q)[o(417)]((e) => ({
58
+ key: e,
59
+ label: q[e],
60
+ hint: m(e === o(463) ? .125 : 1234.5, e),
61
+ checked: (t[o(369)] ?? o(448)) === e,
62
+ onSelect: () => {
63
+ a[o(439)]({ format: e }), c("main");
64
+ }
65
+ }));
66
+ return G(U, { children: [e, W(b, { items: n }, s)] });
67
+ }
68
+ let p = [
69
+ {
70
+ key: o(446),
71
+ label: "타입",
72
+ icon: x[d][o(430)],
73
+ hint: x[d][o(381)],
74
+ submenu: !0,
75
+ disabled: !r || t[o(325)],
76
+ onSelect: () => c(o(446))
77
+ },
78
+ ...d === o(433) ? [{
79
+ key: o(369),
80
+ label: o(429),
81
+ icon: W(P, {}),
82
+ hint: q[t[o(369)] ?? o(448)],
83
+ submenu: !0,
84
+ onSelect: () => c(o(369))
85
+ }] : [],
86
+ "separator",
87
+ {
88
+ key: "asc",
89
+ label: "오름차순 정렬",
90
+ icon: W(D, {}),
91
+ onSelect: () => a[o(340)](o(321))
92
+ },
93
+ {
94
+ key: o(332),
95
+ label: "내림차순 정렬",
96
+ icon: W(C, {}),
97
+ onSelect: () => a[o(340)](o(332))
98
+ },
99
+ {
100
+ key: o(328),
101
+ label: "필터",
102
+ icon: W(I, {}),
103
+ onSelect: a[o(328)]
104
+ },
105
+ {
106
+ key: o(358),
107
+ label: o(n ? 374 : 447),
108
+ icon: W(F, {}),
109
+ onSelect: a.group
110
+ },
111
+ o(364),
112
+ {
113
+ key: o(329),
114
+ label: t[o(477)] ? o(409) : o(372),
115
+ icon: t[o(477)] ? W(R, {}) : W(L, {}),
116
+ onSelect: () => a.update({ pinned: !t[o(477)] })
117
+ },
118
+ {
119
+ key: o(458),
120
+ label: o(401),
121
+ icon: W(V, {}),
122
+ checked: !!t[o(458)],
123
+ onSelect: () => a.update({ wrap: !t[o(458)] })
124
+ },
125
+ {
126
+ key: o(342),
127
+ label: o(351),
128
+ icon: W(N, {}),
129
+ onSelect: a[o(342)]
130
+ },
131
+ ...r ? [
132
+ o(364),
133
+ {
134
+ key: o(412),
135
+ label: "왼쪽에 삽입",
136
+ icon: W(T, {}),
137
+ onSelect: () => a[o(345)]("left")
138
+ },
139
+ {
140
+ key: o(441),
141
+ label: o(421),
142
+ icon: W(E, {}),
143
+ onSelect: () => a[o(345)](o(441))
144
+ },
145
+ {
146
+ key: o(334),
147
+ label: o(456),
148
+ icon: W(ee, {}),
149
+ onSelect: a[o(431)]
150
+ },
151
+ {
152
+ key: "del",
153
+ label: o(331),
154
+ icon: W(B, {}),
155
+ danger: !0,
156
+ disabled: t[o(325)],
157
+ onSelect: a[o(473)]
158
+ }
159
+ ] : []
160
+ ];
161
+ return G(U, { children: [W("div", {
162
+ className: o(360),
163
+ children: W(i, {
164
+ size: "sm",
165
+ value: l,
166
+ "aria-label": "속성 이름",
167
+ readOnly: !r,
168
+ leading: W("span", {
169
+ className: "ds-grid-pop__type-icon",
170
+ children: x[d][o(430)]
171
+ }),
172
+ onChange: (e) => u(e[o(465)].value),
173
+ onBlur: f,
174
+ onKeyDown: (e) => {
175
+ let t = o;
176
+ e[t(373)] === t(423) && !e[t(407)][t(397)] && (f(), e[t(416)][t(467)](t(453))?.[t(386)]());
177
+ }
178
+ })
179
+ }), W(b, { items: p }, o(440))] });
180
+ }
181
+ function Y({ column: t, onPick: n }) {
182
+ let r = e, i = t[r(457)] ?? r(418);
183
+ return W(b, { items: [{ heading: "계산" }, ...f(y(t))[r(417)]((e) => ({
184
+ key: e,
185
+ label: l[e],
186
+ checked: e === i,
187
+ onSelect: () => n(e)
188
+ }))] });
189
+ }
190
+ function X({ columns: n, view: o, onChange: s }) {
191
+ let c = e, l = o[c(462)], f = (e) => s({ filters: e }), p = (e, t) => f(l[c(417)]((n) => n.id === e ? {
192
+ ...n,
193
+ ...t
194
+ } : n));
195
+ return G(c(474), {
196
+ className: c(336),
197
+ children: [
198
+ G(c(474), {
199
+ className: c(365),
200
+ children: [W(t, {
201
+ variant: c(476),
202
+ tone: "secondary",
203
+ children: "필터"
204
+ }), l[c(324)] > 1 && G(a, {
205
+ value: o.filterMode,
206
+ onChange: (e) => s({ filterMode: e.target[c(396)] }),
207
+ "aria-label": "필터 결합 방식",
208
+ children: [W(c(371), {
209
+ value: c(382),
210
+ children: c(337)
211
+ }), W(c(371), {
212
+ value: "or",
213
+ children: c(437)
214
+ })]
215
+ })]
216
+ }),
217
+ !l.length && W("p", {
218
+ className: c(362),
219
+ children: "조건을 추가하면 맞는 행만 보여요."
220
+ }),
221
+ l[c(417)]((e, t) => {
222
+ let o = c, s = n.find((t) => t[o(373)] === e[o(373)]) ?? n[0], m = y(s);
223
+ return G(o(474), {
224
+ className: o(426),
225
+ style: { animationDelay: t * 40 + "ms" },
226
+ children: [
227
+ W(a, {
228
+ value: e.key,
229
+ "aria-label": "속성",
230
+ onChange: (t) => {
231
+ let r = o, i = n[r(355)]((e) => e[r(373)] === t[r(465)].value);
232
+ p(e.id, {
233
+ key: i.key,
234
+ op: u[y(i)][0],
235
+ value: void 0
236
+ });
237
+ },
238
+ children: n[o(417)]((e) => W(o(371), {
239
+ value: e[o(373)],
240
+ children: e.name
241
+ }, e[o(373)]))
242
+ }),
243
+ W(a, {
244
+ value: e.op,
245
+ "aria-label": "조건",
246
+ onChange: (t) => p(e.id, { op: t[o(465)][o(396)] }),
247
+ children: u[m].map((e) => W(o(371), {
248
+ value: e,
249
+ children: d[e]
250
+ }, e))
251
+ }),
252
+ g(e.op) ? m === o(344) || m === o(376) ? G(a, {
253
+ value: e.value ?? "",
254
+ "aria-label": "값",
255
+ onChange: (t) => p(e.id, { value: t.target[o(396)] }),
256
+ children: [W(o(371), {
257
+ value: "",
258
+ children: "선택…"
259
+ }), (s[o(400)] ?? []).map((e) => W(o(371), {
260
+ value: e[o(381)],
261
+ children: e[o(381)]
262
+ }, e[o(381)]))]
263
+ }) : W(i, {
264
+ size: "sm",
265
+ value: e[o(396)] ?? "",
266
+ "aria-label": "값",
267
+ placeholder: m === "date" ? o(464) : m === "number" ? "0" : o(445),
268
+ inputMode: m === o(433) ? "decimal" : void 0,
269
+ onChange: (t) => p(e.id, { value: t.target.value }),
270
+ autoFocus: t === l.length - 1 && !e.value
271
+ }) : W(o(385), {}),
272
+ W(r, {
273
+ iconOnly: !0,
274
+ size: "sm",
275
+ variant: o(398),
276
+ icon: W(H, {}),
277
+ "aria-label": o(380),
278
+ onClick: () => f(l[o(328)]((t) => t.id !== e.id))
279
+ })
280
+ ]
281
+ }, e.id);
282
+ }),
283
+ G("div", {
284
+ className: c(415),
285
+ children: [W(r, {
286
+ size: "sm",
287
+ variant: c(398),
288
+ icon: W(z, {}),
289
+ onClick: () => {
290
+ let e = c, t = n[0];
291
+ t && f([...l, {
292
+ id: h(e(328)),
293
+ key: t[e(373)],
294
+ op: u[y(t)][0]
295
+ }]);
296
+ },
297
+ children: c(375)
298
+ }), l[c(324)] > 0 && W(r, {
299
+ size: "sm",
300
+ variant: "ghost",
301
+ onClick: () => f([]),
302
+ children: "모두 지우기"
303
+ })]
304
+ })
305
+ ]
306
+ });
307
+ }
308
+ function Z({ columns: n, sorts: i, onChange: o }) {
309
+ let s = e, c = n[s(328)]((e) => !i[s(343)]((t) => t.key === e[s(373)]));
310
+ return G("div", {
311
+ className: s(336),
312
+ children: [
313
+ G(s(474), {
314
+ className: s(365),
315
+ children: [W(t, {
316
+ variant: s(476),
317
+ tone: s(384),
318
+ children: "정렬"
319
+ }), W(t, {
320
+ variant: "caption",
321
+ tone: s(399),
322
+ children: "머리글을 Shift+클릭해도 추가돼요"
323
+ })]
324
+ }),
325
+ !i[s(324)] && W("p", {
326
+ className: s(362),
327
+ children: s(450)
328
+ }),
329
+ i[s(417)]((e, t) => G(s(474), {
330
+ className: "ds-grid-panel__rule ds-grid-panel__rule--sort",
331
+ style: { animationDelay: t * 40 + "ms" },
332
+ children: [
333
+ W(a, {
334
+ value: e[s(373)],
335
+ "aria-label": "정렬 속성",
336
+ onChange: (t) => o(i[s(417)]((n) => n.key === e[s(373)] ? {
337
+ ...n,
338
+ key: t[s(465)].value
339
+ } : n)),
340
+ children: n[s(328)]((t) => t.key === e[s(373)] || c[s(391)](t))[s(417)]((e) => W(s(371), {
341
+ value: e[s(373)],
342
+ children: e.name
343
+ }, e[s(373)]))
344
+ }),
345
+ G(a, {
346
+ value: e[s(352)],
347
+ "aria-label": "방향",
348
+ onChange: (t) => o(i[s(417)]((n) => n[s(373)] === e[s(373)] ? {
349
+ ...n,
350
+ dir: t[s(465)][s(396)]
351
+ } : n)),
352
+ children: [W(s(371), {
353
+ value: s(321),
354
+ children: s(455)
355
+ }), W("option", {
356
+ value: s(332),
357
+ children: s(377)
358
+ })]
359
+ }),
360
+ W(r, {
361
+ iconOnly: !0,
362
+ size: "sm",
363
+ variant: "ghost",
364
+ icon: W(H, {}),
365
+ "aria-label": s(367),
366
+ onClick: () => o(i[s(328)]((t) => t[s(373)] !== e[s(373)]))
367
+ })
368
+ ]
369
+ }, e[s(373)])),
370
+ G(s(474), {
371
+ className: s(415),
372
+ children: [W(r, {
373
+ size: "sm",
374
+ variant: s(398),
375
+ icon: W(z, {}),
376
+ disabled: !c[s(324)],
377
+ onClick: () => o([...i, {
378
+ key: c[0][s(373)],
379
+ dir: s(321)
380
+ }]),
381
+ children: s(475)
382
+ }), i[s(324)] > 0 && W(r, {
383
+ size: "sm",
384
+ variant: s(398),
385
+ onClick: () => o([]),
386
+ children: "모두 지우기"
387
+ })]
388
+ })
389
+ ]
390
+ });
391
+ }
392
+ function Q({ columns: t, groupBy: n, onPick: r }) {
393
+ let i = e;
394
+ return W(b, { items: [
395
+ { heading: "그룹 기준" },
396
+ {
397
+ key: "∅",
398
+ label: "없음",
399
+ checked: n == null,
400
+ onSelect: () => r(null)
401
+ },
402
+ ...t[i(417)]((e) => ({
403
+ key: e[i(373)],
404
+ label: e[i(347)],
405
+ icon: x[y(e)][i(430)],
406
+ checked: n === e[i(373)],
407
+ onSelect: () => r(e[i(373)])
408
+ }))
409
+ ] });
410
+ }
411
+ function te({ columns: n, onUpdate: a, onShowAll: o }) {
412
+ let s = e, [l, u] = S(""), d = n[s(328)]((e) => e.name[s(368)]()[s(391)](l[s(322)]()[s(368)]())), f = n.every((e) => !e[s(470)]);
413
+ return G(s(474), {
414
+ className: s(336),
415
+ children: [
416
+ W(i, {
417
+ size: "sm",
418
+ placeholder: "속성 검색",
419
+ value: l,
420
+ onChange: (e) => u(e[s(465)].value),
421
+ "aria-label": s(356)
422
+ }),
423
+ G(s(474), {
424
+ className: s(365),
425
+ children: [G(t, {
426
+ variant: s(476),
427
+ tone: "secondary",
428
+ children: [
429
+ s(452),
430
+ n.filter((e) => !e[s(470)])[s(324)],
431
+ "/",
432
+ n[s(324)]
433
+ ]
434
+ }), W(r, {
435
+ size: "sm",
436
+ variant: s(398),
437
+ onClick: () => o(f),
438
+ children: f ? "모두 숨기기" : s(378)
439
+ })]
440
+ }),
441
+ W(s(474), {
442
+ className: s(406),
443
+ children: d.map((e) => G("div", {
444
+ className: s(354),
445
+ "data-hidden": e[s(470)] || void 0,
446
+ children: [
447
+ W(s(385), {
448
+ className: s(461),
449
+ children: x[y(e)][s(430)]
450
+ }),
451
+ W("span", {
452
+ className: s(443),
453
+ children: e.name
454
+ }),
455
+ W(r, {
456
+ iconOnly: !0,
457
+ size: "sm",
458
+ variant: s(398),
459
+ icon: e[s(477)] ? W(L, {}) : W(R, {}),
460
+ "aria-label": e[s(477)] ? e[s(347)] + " 고정 해제" : e[s(347)] + s(357),
461
+ "aria-pressed": !!e.pinned,
462
+ className: c(s(335), e[s(477)] && "ds-grid-prop__btn--on"),
463
+ onClick: () => a(e.key, { pinned: !e[s(477)] })
464
+ }),
465
+ W(r, {
466
+ iconOnly: !0,
467
+ size: "sm",
468
+ variant: s(398),
469
+ icon: e[s(470)] ? W(N, {}) : W(M, {}),
470
+ "aria-label": e[s(470)] ? e[s(347)] + " 표시" : e[s(347)] + s(420),
471
+ "aria-pressed": !e.hidden,
472
+ className: c("ds-grid-prop__btn", !e.hidden && s(348)),
473
+ onClick: () => a(e[s(373)], { hidden: !e[s(470)] })
474
+ })
475
+ ]
476
+ }, e[s(373)]))
477
+ })
478
+ ]
479
+ });
480
+ }
481
+ function ne({ view: n, onChange: i, onExport: a }) {
482
+ let c = e;
483
+ return G(c(474), {
484
+ className: c(336),
485
+ children: [
486
+ W(t, {
487
+ variant: c(476),
488
+ tone: c(384),
489
+ children: c(341)
490
+ }),
491
+ W(o, {
492
+ value: n[c(435)],
493
+ onChange: (e) => i({ density: e }),
494
+ ariaLabel: c(341),
495
+ options: [
496
+ {
497
+ value: c(361),
498
+ label: "촘촘"
499
+ },
500
+ {
501
+ value: c(346),
502
+ label: "기본"
503
+ },
504
+ {
505
+ value: c(414),
506
+ label: "넉넉"
507
+ }
508
+ ]
509
+ }),
510
+ G("div", {
511
+ className: "ds-grid-panel__switches",
512
+ children: [W(s, {
513
+ label: "행 번호",
514
+ checked: n[c(428)],
515
+ onChange: (e) => i({ rowNumbers: e[c(465)][c(390)] })
516
+ }), W(s, {
517
+ label: c(327),
518
+ checked: n.gridlines,
519
+ onChange: (e) => i({ gridlines: e[c(465)][c(390)] })
520
+ })]
521
+ }),
522
+ W(r, {
523
+ size: "sm",
524
+ icon: W(j, {}),
525
+ onClick: a,
526
+ children: "CSV로 내보내기"
527
+ })
528
+ ]
529
+ });
530
+ }
531
+ function re({ options: t, query: r, selected: i, active: a, multiple: o, creatable: s, onActive: c, onPick: l, onRemove: u }) {
532
+ let d = e, f = p(t, r), m = s && !!r[d(322)]() && !t[d(343)]((e) => e[d(381)][d(368)]() === r[d(322)]()[d(368)]());
533
+ return G(d(474), {
534
+ className: "ds-grid-options",
535
+ children: [
536
+ o && i.length > 0 && W("div", {
537
+ className: d(383),
538
+ children: i.map((e) => W(d(385), {
539
+ className: d(468),
540
+ children: G(n, {
541
+ tone: t.find((t) => t[d(381)] === e)?.tone ?? d(449),
542
+ children: [e, W(d(404), {
543
+ type: d(404),
544
+ "aria-label": e + d(442),
545
+ onClick: () => u(e),
546
+ children: W(H, {})
547
+ })]
548
+ })
549
+ }, e))
550
+ }),
551
+ W(d(474), {
552
+ className: d(410),
553
+ children: m ? d(405) : "선택지"
554
+ }),
555
+ G(d(474), {
556
+ role: d(392),
557
+ "aria-multiselectable": o || void 0,
558
+ className: d(472),
559
+ children: [
560
+ f[d(417)]((e, t) => G(d(474), {
561
+ role: d(371),
562
+ "aria-selected": i[d(391)](e[d(381)]),
563
+ "data-active": t === a || void 0,
564
+ className: "ds-option",
565
+ onPointerMove: () => t !== a && c(t),
566
+ onClick: () => l(e[d(381)]),
567
+ children: [W(d(385), {
568
+ className: d(422),
569
+ children: W(d(385), { children: W(n, {
570
+ tone: e[d(419)] ?? d(449),
571
+ children: e[d(381)]
572
+ }) })
573
+ }), i[d(391)](e[d(381)]) && W(O, { className: d(394) })]
574
+ }, e[d(381)])),
575
+ m && G(d(474), {
576
+ role: d(371),
577
+ "aria-selected": !1,
578
+ "data-active": a === f[d(324)] || void 0,
579
+ className: d(319),
580
+ onPointerMove: () => a !== f[d(324)] && c(f[d(324)]),
581
+ onClick: () => l(r.trim()),
582
+ children: [W(z, { className: d(454) }), W(d(385), {
583
+ className: "ds-option__text",
584
+ children: G(d(385), { children: [W(n, { children: r[d(322)]() }), d(466)] })
585
+ })]
586
+ }),
587
+ !f[d(324)] && !m && W(d(474), {
588
+ className: d(471),
589
+ children: d(323)
590
+ })
591
+ ]
592
+ })
593
+ ]
594
+ });
595
+ }
596
+ function $() {
597
+ let e = /* @__PURE__ */ "zhmTBgLZDgjVEa.CMvTB3zL.zgL2.7kcv66cSioY2LoQWGa.BgfIzwWTC20.CgLUBMvK.zhmTB3b0Aw9UigrZlw9WDgLVBI0Tywn0Aw9U.CMvUyw1L.yxnJ.DhjPBq.66EE64QuioYeOo2dNEYNGoQWGcdSL4BSLRtSMPq.BgvUz3rO.Bg9JA2vK.z2v0rgf0zq.6RkP7j6q7isG.zMLSDgvY.CgLU.7lkCioUlQoYCHcdSIBZTKzW.7iAn7isXioYcREYGNa.zgvZyW.z3jPza.zhvW.zhmTz3jPzc1WCM9Wx19IDg4.zhmTz3jPzc1Wyw5LBa.66QO65gqioYDVoY5Ma.ndK2mJu1mfHiELnnqW.zhmTz3jPzc1KyxrLx19OzwfK.C29YDa.7zAjioUgKUYDTa.AgLKzq.C29Tzq.C2vSzwn0.Aw5Zzxj0.zgvMyxvSDa.BMfTzq.zhmTz3jPzc1WCM9Wx19IDg4Tlw9U.nJyZDMvosxrM.7kEa7jQW6RIW.7iIO6RIW6RIW.zgLY.mtq1ne5Trg5fua.zhmTz3jPzc1WCM9W.zMLUza.7iAn7isXioQYGoYdIq.ioQZOoYGLq.z3jVDxa.A2v5CW.zhmTz3jPzc1WB3bFx2HLywq.y29TCgfJDa.zhmTz3jPzc1Wyw5LBf9Fzw1WDhK.C2v0rgf0zq.C2vWyxjHDg9Y.zhmTz3jPzc1Wyw5LBf9FDgL0Bgu.nJyZnJC3nKz0q1fhEa.7kcv66cSioYcREYGNa.Dg9mB3DLCKnHC2u.zM9YBwf0.7j207kceioUlRa.B3b0Aw9U.7jM87kQ97jEqioQZOoYGLq.A2v5.6RE466o5io2vToYGNa.7zwe7ysWioY2LoQWGa.BxvSDgLtzwXLy3q.64k066A87lcO7iIC.66QO65gqio2rNoYlNa.zhmTz3jPzc1KyxrLx19XDwLJAW.7kgW6Rg0ioYcREYGNa.BgfIzwW.yw5K.zhmTz3jPzc1VChrPB25Zx19JAg9Zzw4.C2vJB25Kyxj5.C3bHBG.zM9JDxm.zNjVBq.64UK7j2mioYJVa.mtiXmJm2EfnSq2DI.y2HLy2TLza.Aw5JBhvKzxm.BgLZDgjVEa.zhmTz3jPzc1KyxrLx19KyxK.zhmTB3b0Aw9Ux19JAgvJAW.nJe2mtyXn3zgA2jqyq.DMfSDwu.AxndB21WB3nPBMC.z2HVC3q.DgvYDgLHCNK.B3b0Aw9UCW.7ywn7iQK7yQ4ioYKHoUWLoQ/Ia.mZbqy3HHs2i.64UK7j2mioUlRa.yNv0Dg9U.7isG7yoD7zwy6RgW64kyioYdIoUHNcdRP4ZRK6tQUla.zhmTz3jPzc1Wyw5LBf9FChjVChm.BMf0AxzLrxzLBNq.zhmTz3jPzc1KyxrLx19NCMLK.6RoG7kcvio2vToYGNa.zhmTBgLZDgjVEf9Fz3jVDxa.z2v0tw9UDgG.BgvMDa.z2v0rgf5.y29TzM9YDgfIBgu.zhmTz3jPzc1Wyw5LBf9FzM9VDa.y3vYCMvUDfrHCMDLDa.BwfW.BM9Uzq.Dg9Uzq.ioYiQoQ4SoQ4Sa.7jIK66w47kQ97jEqioYcVEYEHq.zhmTB3b0Aw9Ux190zxH0.rw50zxi.zhmTz3jPzc1KyxrL.vdaWoJaWoJaW.zhmTz3jPzc1Wyw5LBf9FCNvSzq.zhmTz3jPzc1WB3bFx2jHy2S.CM93tNvTyMvYCW.7iIR7j6qio2yLEYlNq.AwnVBG.zhvWBgLJyxrL.ofHYrMDjqq.BNvTyMvY.mteYow1jtLDcEa.zgvUC2L0Eq.mtC5mtK2nM90ChnOEq.7zwy64ky652864+eioYDVoY5Ma.z2v0rNvSBfLLyxi.DxbKyxrL.BwfPBG.CMLNAhq.ioU5VoQ4Sa.zhmTz3jPzc1WCM9Wx19Uyw1L.mZvjuencuMW.6RcsioYEHEUGPq.DhLWzq.7j20ioYgJEYeSEYCVoUHNcdQT7JRO7NTMzq.y29TBwe.BMv1DhjHBa.7kcv66cSioQ4SoYKGoYDTcdSL4BSLRtSMPqUioYBKoUEMcdSIjZSHjZRJidROzWG67o07jES7jQulG.ote2ndy3q0jsAeDZ.7iAn7isXia.lMrZlwDYAwqTCg9W.zhmTz3jPzc1VChrPB25Zx19WBhvZ.7jIK66Ae7lcO7iIC.7iAn7isXioUZTEYGNa.ywDNCMvNyxrL.D3jHCa.oxfgwvP3wG.7iAn7isXio2dGoYEHq.zhmTz3jPzc1WCM9Wx19Py29U.zMLSDgvYCW.CgvYy2vUDa.mtdSM5qGmJxSNBW.DgfYz2v0.ioUNJoUtPoQ4Sa.y2XVC2vZDa.zhmTz3jPzc10ywCTEa.zhmTz3jPzc1KyxrLx193za.AgLKzgvU.zhmTBgLZDgjVEf9Fzw1WDhK".split(".");
598
+ return $ = function() {
599
+ return e;
600
+ }, $();
601
+ }
602
+ var ie = [
603
+ "일",
604
+ "월",
605
+ "화",
606
+ "수",
607
+ "목",
608
+ "금",
609
+ "토"
610
+ ];
611
+ function ae({ value: n, onPick: i }) {
612
+ let a = e, [o, s] = S(() => {
613
+ let e = K, t = n ? new Date(n + e(425)) : /* @__PURE__ */ new Date();
614
+ return new Date(t.getFullYear(), t[e(411)](), 1);
615
+ }), [c] = S(v), l = new Date(o.getFullYear(), o.getMonth(), 1 - o[a(413)]()), u = Array[a(387)]({ length: 42 }, (e, t) => new Date(l.getFullYear(), l.getMonth(), l.getDate() + t)), d = (e) => s(new Date(o[a(438)](), o.getMonth() + e, 1)), f = (e) => {
616
+ let t = a, n = /* @__PURE__ */ new Date();
617
+ n[t(363)](n[t(326)]() + e), i(_(n));
618
+ };
619
+ return G(a(474), {
620
+ className: a(424),
621
+ children: [
622
+ G(a(474), {
623
+ className: a(339),
624
+ children: [G(t, {
625
+ variant: "label-md",
626
+ numeric: !0,
627
+ children: [
628
+ o[a(438)](),
629
+ "년 ",
630
+ o[a(411)]() + 1,
631
+ "월"
632
+ ]
633
+ }), G(a(474), { children: [W(r, {
634
+ iconOnly: !0,
635
+ size: "sm",
636
+ variant: a(398),
637
+ icon: W(k, {}),
638
+ "aria-label": a(370),
639
+ onClick: () => d(-1)
640
+ }), W(r, {
641
+ iconOnly: !0,
642
+ size: "sm",
643
+ variant: "ghost",
644
+ icon: W(A, {}),
645
+ "aria-label": a(403),
646
+ onClick: () => d(1)
647
+ })] })]
648
+ }),
649
+ G(a(474), {
650
+ className: a(408),
651
+ role: a(333),
652
+ children: [ie.map((e) => W(a(385), {
653
+ className: a(469),
654
+ children: e
655
+ }, e)), u[a(417)]((e) => {
656
+ let t = a, r = _(e);
657
+ return W("button", {
658
+ type: t(404),
659
+ className: t(393),
660
+ "data-outside": e[t(411)]() !== o[t(411)]() || void 0,
661
+ "data-today": r === c || void 0,
662
+ "aria-pressed": r === n,
663
+ onClick: () => i(r),
664
+ children: e[t(326)]()
665
+ }, r);
666
+ })]
667
+ }),
668
+ G(a(474), {
669
+ className: a(379),
670
+ children: [
671
+ W(r, {
672
+ size: "sm",
673
+ variant: "ghost",
674
+ onClick: () => f(0),
675
+ children: "오늘"
676
+ }),
677
+ W(r, {
678
+ size: "sm",
679
+ variant: a(398),
680
+ onClick: () => f(1),
681
+ children: "내일"
682
+ }),
683
+ W(r, {
684
+ size: "sm",
685
+ variant: a(398),
686
+ onClick: () => f(7),
687
+ children: a(388)
688
+ }),
689
+ W(r, {
690
+ size: "sm",
691
+ variant: a(398),
692
+ onClick: () => i(null),
693
+ disabled: !n,
694
+ children: a(350)
695
+ })
696
+ ]
697
+ })
698
+ ]
699
+ });
700
+ }
701
+ export { Y as AggregateMenu, J as ColumnMenu, ae as DatePicker, X as FilterPanel, Q as GroupMenu, re as OptionList, te as PropertiesPanel, Z as SortPanel, ne as ViewPanel };