@xenide-io/the-old-ui-theme 0.6.14 → 0.7.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.
@@ -1,23 +1,3 @@
1
- import {
2
- ButtonChrome,
3
- DropdownMenu,
4
- DropdownRadioGroup,
5
- DropdownRadioItem,
6
- IconArrowDown,
7
- IconCancel,
8
- IconCheck,
9
- IconCheckCircle,
10
- IconChevronDown,
11
- IconChevronLeft,
12
- IconChevronRight,
13
- IconClose,
14
- IconCodePreview,
15
- IconExclamation,
16
- IconInfo,
17
- IconSearch,
18
- IconTuning,
19
- cn
20
- } from "./chunk-E5ZBQYEX.mjs";
21
1
  import {
22
2
  __objRest,
23
3
  __spreadProps,
@@ -26,7 +6,25 @@ import {
26
6
 
27
7
  // src/components/ui/Button.tsx
28
8
  import { forwardRef } from "react";
29
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+
10
+ // src/components/ui/ButtonChrome.tsx
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ function ButtonChrome({ label, icon, sideIcon, split }) {
13
+ return /* @__PURE__ */ jsxs("span", { className: "ph-btn-chrome", children: [
14
+ icon != null ? /* @__PURE__ */ jsx("span", { className: "ph-btn-icon", children: icon }) : null,
15
+ label != null ? /* @__PURE__ */ jsx("span", { className: "ph-btn-label", children: label }) : null,
16
+ split ? /* @__PURE__ */ jsx("span", { className: "ph-btn-split-divider", "aria-hidden": true }) : null,
17
+ sideIcon != null ? /* @__PURE__ */ jsx("span", { className: "ph-btn-side-icon", children: sideIcon }) : null
18
+ ] });
19
+ }
20
+
21
+ // src/lib/cn.ts
22
+ function cn(...parts) {
23
+ return parts.filter(Boolean).join(" ");
24
+ }
25
+
26
+ // src/components/ui/Button.tsx
27
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
30
28
  var variantClass = {
31
29
  primary: "ph-btn-primary",
32
30
  secondary: "ph-btn-secondary",
@@ -85,14 +83,14 @@ var Button = forwardRef(function Button2(_a, ref) {
85
83
  ]);
86
84
  const usesLemonChrome = !["tertiary", "ghost", "link"].includes(variant);
87
85
  const label = loadingLabel != null ? loadingLabel : children;
88
- const leadingIcon = loading ? /* @__PURE__ */ jsx("span", { className: "ph-btn-spinner", "aria-hidden": true }) : icon;
89
- const content = usesLemonChrome ? /* @__PURE__ */ jsx(ButtonChrome, { label, icon: leadingIcon, sideIcon, split }) : /* @__PURE__ */ jsxs(Fragment, { children: [
90
- leadingIcon != null ? /* @__PURE__ */ jsx("span", { className: "ph-btn-icon", children: leadingIcon }) : null,
91
- label != null ? /* @__PURE__ */ jsx("span", { className: "ph-btn-label", children: label }) : null,
92
- split ? /* @__PURE__ */ jsx("span", { className: "ph-btn-split-divider", "aria-hidden": true }) : null,
93
- sideIcon != null ? /* @__PURE__ */ jsx("span", { className: "ph-btn-side-icon", children: sideIcon }) : null
86
+ const leadingIcon = loading ? /* @__PURE__ */ jsx2("span", { className: "ph-btn-spinner", "aria-hidden": true }) : icon;
87
+ const content = usesLemonChrome ? /* @__PURE__ */ jsx2(ButtonChrome, { label, icon: leadingIcon, sideIcon, split }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
88
+ leadingIcon != null ? /* @__PURE__ */ jsx2("span", { className: "ph-btn-icon", children: leadingIcon }) : null,
89
+ label != null ? /* @__PURE__ */ jsx2("span", { className: "ph-btn-label", children: label }) : null,
90
+ split ? /* @__PURE__ */ jsx2("span", { className: "ph-btn-split-divider", "aria-hidden": true }) : null,
91
+ sideIcon != null ? /* @__PURE__ */ jsx2("span", { className: "ph-btn-side-icon", children: sideIcon }) : null
94
92
  ] });
95
- return /* @__PURE__ */ jsx(
93
+ return /* @__PURE__ */ jsx2(
96
94
  "button",
97
95
  __spreadProps(__spreadValues({
98
96
  ref,
@@ -117,8 +115,549 @@ var Button = forwardRef(function Button2(_a, ref) {
117
115
  Button.displayName = "Button";
118
116
 
119
117
  // src/components/ui/Alert.tsx
118
+ import { forwardRef as forwardRef5 } from "react";
119
+
120
+ // src/components/icons/IconBase.tsx
120
121
  import { forwardRef as forwardRef2 } from "react";
121
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
122
+ import { jsx as jsx3 } from "react/jsx-runtime";
123
+ var IconBase = forwardRef2(function IconBase2(_a, ref) {
124
+ var _b = _a, {
125
+ className,
126
+ size,
127
+ children,
128
+ viewBox = "0 0 24 24",
129
+ fill: fill2 = "none",
130
+ xmlns = "http://www.w3.org/2000/svg",
131
+ focusable = "false",
132
+ style,
133
+ role,
134
+ "aria-hidden": ariaHidden,
135
+ "aria-label": ariaLabel,
136
+ "aria-labelledby": ariaLabelledBy
137
+ } = _b, props = __objRest(_b, [
138
+ "className",
139
+ "size",
140
+ "children",
141
+ "viewBox",
142
+ "fill",
143
+ "xmlns",
144
+ "focusable",
145
+ "style",
146
+ "role",
147
+ "aria-hidden",
148
+ "aria-label",
149
+ "aria-labelledby"
150
+ ]);
151
+ const hasAccessibleName = Boolean(ariaLabel || ariaLabelledBy);
152
+ return /* @__PURE__ */ jsx3(
153
+ "svg",
154
+ __spreadProps(__spreadValues({
155
+ ref,
156
+ className: cn("ph-icon", className),
157
+ viewBox,
158
+ fill: fill2,
159
+ xmlns,
160
+ focusable,
161
+ role: role != null ? role : hasAccessibleName ? "img" : void 0,
162
+ "aria-hidden": ariaHidden != null ? ariaHidden : hasAccessibleName ? void 0 : true,
163
+ "aria-label": ariaLabel,
164
+ "aria-labelledby": ariaLabelledBy,
165
+ style: __spreadValues({ width: size, height: size }, style)
166
+ }, props), {
167
+ children
168
+ })
169
+ );
170
+ });
171
+ IconBase.displayName = "IconBase";
172
+
173
+ // src/components/icons/createIconBase.tsx
174
+ import { forwardRef as forwardRef3 } from "react";
175
+ import { jsx as jsx4 } from "react/jsx-runtime";
176
+ function createIconBase({ name = "IconGlyph", viewBox = "0 0 24 24", paths }) {
177
+ const IconGlyph = forwardRef3(function IconGlyph2(props, ref) {
178
+ return /* @__PURE__ */ jsx4(IconBase, __spreadProps(__spreadValues({ ref, viewBox }, props), { children: paths }));
179
+ });
180
+ IconGlyph.displayName = name;
181
+ return IconGlyph;
182
+ }
183
+ function createIconBasePath(d, viewBox = "0 0 24 24", name) {
184
+ return createIconBase({
185
+ name,
186
+ viewBox,
187
+ paths: /* @__PURE__ */ jsx4("path", { d, fill: "currentColor" })
188
+ });
189
+ }
190
+
191
+ // src/components/icons/icons.tsx
192
+ import { forwardRef as forwardRef4 } from "react";
193
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
194
+ var fill = (d) => /* @__PURE__ */ jsx5("path", { d, fill: "currentColor" });
195
+ var IconAreaChart = createIconBase({
196
+ paths: fill("M3 20V7l4 3 5-7 5 4h4v13Zm5-3 4-5.5 7 5.45V9h-2.7l-3.9-3.125-4.95 6.95L5 11v3.6Z")
197
+ });
198
+ var IconCumulativeChart = createIconBase({
199
+ paths: fill(
200
+ "M20.8805 7.97408C15.0614 18.7809 6.51281 19.5979 2.71265 18.4578L3.28734 16.5422C6.15384 17.4021 13.7386 17.0191 19.1195 7.02588L20.8805 7.97408Z"
201
+ )
202
+ });
203
+ var IconTableChart = createIconBase({
204
+ paths: fill(
205
+ "M20 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 2v3H5V5h15zm-5 14h-5v-9h5v9zM5 10h3v9H5v-9zm12 9v-9h3v9h-3z"
206
+ )
207
+ });
208
+ var IconHandClick = createIconBase({
209
+ viewBox: "0 0 18 18",
210
+ paths: fill(
211
+ "M14.9942 7.90164C14.9942 7.82992 14.9583 7.46993 14.6342 7.10993C14.2925 6.71407 13.7524 6.49822 13.05 6.44407C12.9783 6.33579 12.8883 6.22822 12.7442 6.11993C12.3483 5.81407 11.7359 5.65164 10.9442 5.63407C10.8724 5.54407 10.7459 5.43578 10.6024 5.32822C10.2425 5.0765 9.79245 4.93236 9.23416 4.87822V3.41993C9.23416 3.27579 9.25244 2.66407 8.83831 2.23164C8.65831 2.03335 8.31659 1.79993 7.74002 1.79993C7.14587 1.79993 6.80416 2.03407 6.60587 2.23164C6.22759 2.64578 6.22759 3.18578 6.22759 3.31164V8.46C5.88587 8.1 5.50759 7.70414 5.29173 7.56C4.84173 7.21829 3.99587 7.39828 3.51002 7.75829C3.04173 8.1 2.88002 8.62243 3.06002 9.12658C3.38416 10.0266 4.19416 10.9266 4.39173 11.1424C4.57173 11.4841 5.38173 12.9782 6.10173 13.5182C6.48002 13.8065 6.76759 14.9941 6.84002 15.7499L6.87588 16.1457H13.6801V14.364C13.7701 14.1123 13.9859 13.5723 14.2201 13.3199C14.7783 12.7616 14.9583 11.3582 14.9583 10.9257V7.91986L14.9942 7.90164ZM14.1117 10.89C14.1117 11.4117 13.8959 12.4017 13.6259 12.6717C13.1576 13.14 12.87 14.04 12.8517 14.13L12.8335 14.1841V15.2283H7.68583C7.64997 15.03 7.61411 14.7783 7.54169 14.5083C7.32583 13.6441 7.03754 13.0866 6.65998 12.7983C6.13826 12.4024 5.39998 11.1241 5.16583 10.6566L5.09411 10.5484C5.09411 10.5301 4.2124 9.63008 3.90582 8.80251C3.86996 8.69423 3.86996 8.60422 3.99582 8.47836C4.22997 8.26251 4.67997 8.20836 4.78754 8.24422C5.05754 8.46008 5.88582 9.34251 6.35339 9.86422L7.12754 10.7284L7.12824 3.29418V3.25762C7.12824 3.1859 7.14652 2.95176 7.27238 2.82591C7.36238 2.71763 7.52409 2.66419 7.75824 2.66419C7.95652 2.66419 8.09995 2.71833 8.20824 2.80833C8.35238 2.97005 8.36996 3.25833 8.36996 3.36662V8.02826H9.25167V5.7599C10.0617 5.8499 10.2958 6.19161 10.3317 6.24575L10.3675 6.33575V8.02747H11.2492V6.53332C12.0051 6.60504 12.2934 6.83918 12.3651 6.94747V8.65747H13.2468V7.34332C14.021 7.4516 14.1468 7.86504 14.1651 7.95504L14.1658 10.8899L14.1117 10.89Z"
212
+ )
213
+ });
214
+ var IconSurveys = createIconBase({
215
+ paths: fill(
216
+ "M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17l-.59.59-.58.58V4h16v12zm-9.5-2H18v-2h-5.5zm3.86-5.87c.2-.2.2-.51 0-.71l-1.77-1.77c-.2-.2-.51-.2-.71 0L6 11.53V14h2.47l5.89-5.87z"
217
+ )
218
+ });
219
+ var IconCohort = createIconBase({
220
+ paths: fill(
221
+ "m4 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm1.13 1.1c-.37-.06-.74-.1-1.13-.1-.99 0-1.93.21-2.78.58-.74.32-1.22 1.04-1.22 1.85v1.57h4.5v-1.61c0-.83.23-1.61.63-2.29zm14.87-1.1c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4 3.43c0-.81-.48-1.53-1.22-1.85-.85-.37-1.79-.58-2.78-.58-.39 0-.76.04-1.13.1.4.68.63 1.46.63 2.29v1.61h4.5zm-7.76-2.78c-1.17-.52-2.61-.9-4.24-.9s-3.07.39-4.24.9c-1.08.48-1.76 1.56-1.76 2.74v1.61h12v-1.61c0-1.18-.68-2.26-1.76-2.74zm-8.17 2.35c.09-.23.13-.39.91-.69.97-.38 1.99-.56 3.02-.56s2.05.18 3.02.56c.77.3.81.46.91.69zm3.93-8c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0-2c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"
222
+ )
223
+ });
224
+ var IconRecording = createIconBase({
225
+ paths: fill(
226
+ "m10 8v8l5-4zm9-5h-14c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-14c0-1.1-.9-2-2-2zm0 16h-14v-14h14z"
227
+ )
228
+ });
229
+ var IconFlare = createIconBase({
230
+ paths: fill(
231
+ "m7 11h-6v2h6zm2.17-3.24-2.12-2.12-1.41 1.41 2.12 2.12zm3.83-6.76h-2v6h2zm5.36 6.05-1.41-1.41-2.12 2.12 1.41 1.41zm-1.36 3.95v2h6v-2zm-5-2c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm2.83 7.24 2.12 2.12 1.41-1.41-2.12-2.12zm-9.19.71 1.41 1.41 2.12-2.12-1.41-1.41zm5.36 6.05h2v-6h-2z"
232
+ )
233
+ });
234
+ var IconSelectEvents = createIconBase({
235
+ paths: /* @__PURE__ */ jsxs3(Fragment2, { children: [
236
+ fill("M17.5 9L16.56 6.94L14.5 6L16.56 5.06L17.5 3L18.44 5.06L20.5 6L18.44 6.94L17.5 9Z"),
237
+ fill("M6 12.5L6.94 14.56L9 15.5L6.94 16.44L6 18.5L5.06 16.44L3 15.5L5.06 14.56L6 12.5Z"),
238
+ fill("M6 9L5.06 6.94L3 6L5.06 5.06L6 3L6.94 5.06L9 6L6.94 6.94L6 9Z"),
239
+ fill("M16.23 14.26L20 13L10 10L13 20L14.26 16.23L18.53 20.5L20.51 18.52L16.23 14.26Z")
240
+ ] })
241
+ });
242
+ var IconClipboardEdit = createIconBase({
243
+ paths: fill(
244
+ "M21.04 12.13C21.18 12.13 21.31 12.19 21.42 12.3L22.7 13.58C22.92 13.79 22.92 14.14 22.7 14.35L21.7 15.35L19.65 13.3L20.65 12.3C20.76 12.19 20.9 12.13 21.04 12.13M19.07 13.88L21.12 15.93L15.06 22H13V19.94L19.07 13.88M11 19L9 21H5C3.9 21 3 20.1 3 19V5C3 3.9 3.9 3 5 3H9.18C9.6 1.84 10.7 1 12 1C13.3 1 14.4 1.84 14.82 3H19C20.1 3 21 3.9 21 5V9L19 11V5H17V7H7V5H5V19H11M12 3C11.45 3 11 3.45 11 4C11 4.55 11.45 5 12 5C12.55 5 13 4.55 13 4C13 3.45 12.55 3 12 3Z"
245
+ )
246
+ });
247
+ var IconQueryEditor = createIconBase({
248
+ paths: fill(
249
+ "M4,14V17C4,19 7.05,20.72 11,21V18.11L11.13,18C7.12,17.76 4,16.06 4,14M12,13C7.58,13 4,11.21 4,9V12C4,14.21 7.58,16 12,16C12.39,16 12.77,16 13.16,16L17,12.12C15.4,12.72 13.71,13 12,13M12,3C7.58,3 4,4.79 4,7C4,9.21 7.58,11 12,11C16.42,11 20,9.21 20,7C20,4.79 16.42,3 12,3M21,11.13C20.85,11.13 20.71,11.19 20.61,11.3L19.61,12.3L21.66,14.3L22.66,13.3C22.87,13.1 22.88,12.76 22.66,12.53L21.42,11.3C21.32,11.19 21.18,11.13 21.04,11.13M19.04,12.88L13,18.94V21H15.06L21.12,14.93L19.04,12.88Z"
250
+ )
251
+ });
252
+ var IconTuning = createIconBase({
253
+ paths: fill(
254
+ "M3,17V19H9V17H3M3,5V7H13V5H3M13,21V19H21V17H13V15H11V21H13M7,9V11H3V13H7V15H9V9H7M21,13V11H11V13H21M15,9H17V7H21V5H17V3H15V9Z"
255
+ )
256
+ });
257
+ var IconSync = createIconBase({
258
+ paths: fill(
259
+ "m12.5 4v-3l-4 4 4 4v-3c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46c.78-1.23 1.24-2.69 1.24-4.26 0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8l-1.46-1.46c-.78 1.23-1.24 2.69-1.24 4.26 0 4.42 3.58 8 8 8v3l4-4-4-4z"
260
+ )
261
+ });
262
+ var IconPlayCircle = createIconBase({
263
+ paths: fill(
264
+ "M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM9.5 16.5L16.5 12L9.5 7.5V16.5Z"
265
+ )
266
+ });
267
+ var IconGridView = createIconBase({
268
+ paths: fill(
269
+ "M3,3v8h8V3H3z M9,9H5V5h4V9z M3,13v8h8v-8H3z M9,19H5v-4h4V19z M13,3v8h8V3H13z M19,9h-4V5h4V9z M13,13v8h8v-8H13z M19,19h-4v-4h4V19z"
270
+ )
271
+ });
272
+ var IconListView = createIconBase({
273
+ paths: fill(
274
+ "M3,5v14h18V5H3z M7,7v2H5V7H7z M5,13v-2h2v2H5z M5,15h2v2H5V15z M19,17H9v-2h10V17z M19,13H9v-2h10V13z M19,9H9V7h10V9z"
275
+ )
276
+ });
277
+ var IconPremium = createIconBase({
278
+ paths: fill(
279
+ "m9.68 13.69 2.32-1.76 2.31 1.76-.88-2.85 2.32-1.84h-2.84l-.91-2.81-.91 2.81h-2.84l2.31 1.84zm10.32-3.69c0-4.42-3.58-8-8-8s-8 3.58-8 8c0 2.03.76 3.87 2 5.28v7.72l6-2 6 2v-7.72c1.24-1.41 2-3.25 2-5.28zm-8-6c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6 2.69-6 6-6zm0 15-4 1.02v-3.1c1.18.68 2.54 1.08 4 1.08s2.82-.4 4-1.08v3.1z"
280
+ )
281
+ });
282
+ var IconGift = createIconBase({
283
+ paths: fill(
284
+ "M14.4495 4.55495C15.264 4.31223 15.8631 4.48426 16.1 4.80007C16.4013 5.20182 16.4765 5.57305 16.4336 5.91424C16.3888 6.27088 16.2084 6.63998 15.9211 7.00139C15.3397 7.73275 14.4193 8.30877 13.8244 8.53186C13.598 8.61674 13.4648 8.85138 13.508 9.08924C13.5511 9.32709 13.7582 9.50002 13.9999 9.50002L19.4999 9.50002V12.5H17.9999C17.7237 12.5 17.4999 12.7239 17.4999 13V20.5H6.49988V14.5C6.49988 14.2239 6.27602 14 5.99988 14C5.72374 14 5.49988 14.2239 5.49988 14.5V21C5.49988 21.2762 5.72374 21.5 5.99988 21.5H17.9999C18.276 21.5 18.4999 21.2762 18.4999 21V13.5H19.9999C20.276 13.5 20.4999 13.2762 20.4999 13V9.00002C20.4999 8.86741 20.4472 8.74023 20.3534 8.64646C20.2597 8.5527 20.1325 8.50002 19.9999 8.50002L15.8202 8.50002C16.1407 8.24235 16.4465 7.94742 16.7039 7.62365C17.0625 7.17257 17.3508 6.63541 17.4258 6.03894C17.5027 5.42702 17.3487 4.79826 16.8999 4.20003C16.2882 3.3845 15.1373 3.30652 14.1639 3.5966C13.3806 3.83005 12.5842 4.3279 12.0008 5.07014C11.4285 4.33982 10.6586 3.86464 9.88727 3.64427C8.91382 3.36616 7.82238 3.47045 7.14633 4.14645C6.65753 4.63523 6.41235 5.18234 6.41347 5.75925C6.41457 6.32144 6.64952 6.84016 6.97799 7.28883C7.30058 7.72946 7.7389 8.13769 8.22434 8.50002L3.99988 8.50002C3.86727 8.50002 3.74009 8.5527 3.64632 8.64646C3.55256 8.74023 3.49988 8.86741 3.49988 9.00002V13C3.49988 13.2762 3.72374 13.5 3.99988 13.5H15.4999C15.776 13.5 15.9999 13.2762 15.9999 13C15.9999 12.7239 15.776 12.5 15.4999 12.5H4.49988V9.50002L9.99995 9.50002C10.2318 9.50002 10.4333 9.34058 10.4866 9.1149C10.5398 8.88921 10.431 8.65651 10.2236 8.55281C9.25206 8.06706 8.29723 7.39797 7.78487 6.69811C7.53216 6.35292 7.41402 6.03722 7.41347 5.7573C7.41295 5.49209 7.51758 5.1894 7.85342 4.85358C8.17738 4.52964 8.83597 4.38393 9.61256 4.6058C10.3657 4.82096 11.1212 5.36045 11.5528 6.22359C11.6375 6.39298 11.8106 6.49997 12 6.49997C12.1894 6.49997 12.3625 6.39297 12.4472 6.22358C12.8783 5.36141 13.672 4.78667 14.4495 4.55495Z"
285
+ )
286
+ });
287
+ var IconRobot = createIconBase({
288
+ paths: fill(
289
+ "M17.5 15.5C17.5 16.61 16.61 17.5 15.5 17.5S13.5 16.61 13.5 15.5 14.4 13.5 15.5 13.5 17.5 14.4 17.5 15.5M8.5 13.5C7.4 13.5 6.5 14.4 6.5 15.5S7.4 17.5 8.5 17.5 10.5 16.61 10.5 15.5 9.61 13.5 8.5 13.5M23 15V18C23 18.55 22.55 19 22 19H21V20C21 21.11 20.11 22 19 22H5C3.9 22 3 21.11 3 20V19H2C1.45 19 1 18.55 1 18V15C1 14.45 1.45 14 2 14H3C3 10.13 6.13 7 10 7H11V5.73C10.4 5.39 10 4.74 10 4C10 2.9 10.9 2 12 2S14 2.9 14 4C14 4.74 13.6 5.39 13 5.73V7H14C17.87 7 21 10.13 21 14H22C22.55 14 23 14.45 23 15M21 16H19V14C19 11.24 16.76 9 14 9H10C7.24 9 5 11.24 5 14V16H3V17H5V20H19V17H21V16Z"
290
+ )
291
+ });
292
+ var IconExclamation = createIconBase({
293
+ paths: /* @__PURE__ */ jsxs3("g", { fill: "currentColor", children: [
294
+ /* @__PURE__ */ jsx5("path", { d: "m12 21c1.1046 0 2-.8954 2-2s-.8954-2-2-2-2 .8954-2 2 .8954 2 2 2z" }),
295
+ /* @__PURE__ */ jsx5("path", { d: "m10 3h4v12h-4z" })
296
+ ] })
297
+ });
298
+ var IconErrorOutline = createIconBase({
299
+ paths: fill(
300
+ "m11 15h2v2h-2zm0-8h2v6h-2zm.99-5c-5.52 0-9.99 4.48-9.99 10s4.47 10 9.99 10c5.53 0 10.01-4.48 10.01-10s-4.48-10-10.01-10zm.01 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
301
+ )
302
+ });
303
+ var IconInfo = createIconBase({
304
+ name: "IconInfo",
305
+ paths: fill(
306
+ "M11 10h2v7h-2v-7zm0-3h2v2h-2V7zm1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
307
+ )
308
+ });
309
+ var IconCancel = createIconBase({
310
+ paths: fill(
311
+ "m12 2c-5.53 0-10 4.47-10 10s4.47 10 10 10 10-4.47 10-10-4.47-10-10-10zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13-3.59 3.59-3.59-3.59-1.41 1.41 3.59 3.59-3.59 3.59 1.41 1.41 3.59-3.59 3.59 3.59 1.41-1.41-3.59-3.59 3.59-3.59z"
312
+ )
313
+ });
314
+ var IconCheckCircle = createIconBase({
315
+ paths: fill(
316
+ "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
317
+ )
318
+ });
319
+ var IconArrowUp = createIconBase({
320
+ paths: fill("M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z")
321
+ });
322
+ var IconArrowDown = createIconBase({
323
+ paths: fill("M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z")
324
+ });
325
+ var IconChevronLeft = createIconBasePath("M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z");
326
+ var IconChevronRight = createIconBasePath("M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z");
327
+ var IconChevronDown = createIconBasePath("M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z");
328
+ var IconSubArrowRight = createIconBase({
329
+ paths: /* @__PURE__ */ jsx5("g", { transform: "translate(4 5.5)", children: fill("M2 0H0V10H12.01V13L16 9L12.01 5V8H2V0Z") })
330
+ });
331
+ var IconSearch = createIconBasePath(
332
+ "M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"
333
+ );
334
+ var IconBell = createIconBasePath(
335
+ "M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2m6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1z"
336
+ );
337
+ var IconBellOff = createIconBasePath(
338
+ "M20 18.69 7.84 6.14 5.27 3.49 4 4.76l2.8 2.8v.01c-.52.99-.8 2.16-.8 3.42v5l-2 2v1h13.73l2 2L21 19.72zM12 22c1.11 0 2-.89 2-2h-4c0 1.11.89 2 2 2m6-7.32V11c0-3.08-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68c-.15.03-.29.08-.42.12-.1.03-.2.07-.3.11h-.01c-.01 0-.01 0-.02.01-.23.09-.46.2-.68.31 0 0-.01 0-.01.01z"
339
+ );
340
+ var IconPerson = createIconBasePath(
341
+ "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"
342
+ );
343
+ var IconHome = createIconBasePath("M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z");
344
+ var IconPanelRight = createIconBasePath(
345
+ "M3 5v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2zm12 4h-5v10h5V9zm-7 0H5v10h3V9z"
346
+ );
347
+ var IconPlus = createIconBasePath("M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z");
348
+ var IconCheck = createIconBasePath("M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z");
349
+ var IconClose = createIconBasePath("M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z");
350
+ var IconTrash = createIconBasePath("M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z");
351
+ var IconDownload = createIconBasePath("M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z");
352
+ var IconUpload = createIconBasePath("M9 16h6v-6h4l-7-7-7 7h4v6zm-4 2h14v2H5v-2z");
353
+ var IconSave = createIconBasePath(
354
+ "M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"
355
+ );
356
+ var IconCopy = createIconBasePath(
357
+ "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"
358
+ );
359
+ var IconEdit = createIconBasePath(
360
+ "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"
361
+ );
362
+ var IconLogout = createIconBasePath(
363
+ "M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.59L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"
364
+ );
365
+ var IconStar = createIconBasePath(
366
+ "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"
367
+ );
368
+ var IconMail = createIconBasePath(
369
+ "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"
370
+ );
371
+ var IconShoppingCart = createIconBasePath(
372
+ "M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"
373
+ );
374
+ var IconMoon = createIconBasePath(
375
+ "M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z"
376
+ );
377
+ var IconSun = createIconBasePath(
378
+ "M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"
379
+ );
380
+ var IconVolume = createIconBasePath(
381
+ "M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"
382
+ );
383
+ var IconVolumeOff = createIconBasePath(
384
+ "M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"
385
+ );
386
+ var IconFlag = createIconBasePath("M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6h-5.6z");
387
+ var IconDatabase = createIconBasePath(
388
+ "M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4zM4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4zm0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4z"
389
+ );
390
+ var IconLayers = createIconBasePath("M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27-7.38 5.74zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16z");
391
+ var IconBox = createIconBasePath(
392
+ "M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"
393
+ );
394
+ var IconBolt = createIconBasePath(
395
+ "M11 21h-1l1-7H7.5c-.58 0-.57-.32-.38-.66-.19-.34-.04-.12-.07-.12C8.48 10.94 10.42 7.54 11 7V3h1v4c.58 0 .57.32.38.66-.19-.34-.04-.12-.07-.12-.95 2.28-2.96 5.66-3.31 6.22H13l-1 7h-1z"
396
+ );
397
+ var IconRadar = createIconBasePath(
398
+ "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm-5.5-2.5l7.51-3.49L17.5 6.5 9.99 9.99 6.5 17.5zm5.5-6.6c.61 0 1.1.49 1.1 1.1s-.49 1.1-1.1 1.1-1.1-.49-1.1-1.1.49-1.1 1.1-1.1z"
399
+ );
400
+ var IconToggle = createIconBasePath(
401
+ "M17 7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h10c2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 8H7c-1.66 0-3-1.34-3-3s1.34-3 3-3h10c1.66 0 3 1.34 3 3s-1.34 3-3 3zM7 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"
402
+ );
403
+ var IconRocket = createIconBasePath(
404
+ "M9.19 6.35c-2.04 2.29-3.44 5.58-3.57 5.89L2 10.69l4.05-4.05c.47-.47 1.15-.68 1.81-.55l1.33 1.26zm5.45 8.67l-1.33-1.26c-.66-.13-1.34.08-1.81.55L2 18.31l3.62 3.57c.31-.13 3.6-1.53 5.89-3.57 1.53-1.72 2.52-3.76 2.87-5.02zM12 2c-1.1 0-2 .9-2 2v1.09c2.84.48 5 2.94 5 5.91 0 2.97-2.16 5.43-5 5.91V20c0 1.1.9 2 2 2s2-.9 2-2v-1.09c-2.84-.48-5-2.94-5-5.91 0-2.97 2.16-5.43 5-5.91V4c0-1.1-.9-2-2-2z"
405
+ );
406
+ var IconTerminal = createIconBase({
407
+ name: "IconTerminal",
408
+ paths: /* @__PURE__ */ jsx5(
409
+ "path",
410
+ {
411
+ d: "M3 4v16h18V4H3zm2 2h14v12H5V6zm2 2.2L10.8 12 7 15.8 8.4 17.2l5.2-5.2-5.2-5.2L7 8.2zM13 17h5v-2h-5v2z",
412
+ fill: "currentColor",
413
+ fillRule: "evenodd",
414
+ clipRule: "evenodd"
415
+ }
416
+ )
417
+ });
418
+ var IconOldWindow = createIconBase({
419
+ name: "IconOldWindow",
420
+ paths: /* @__PURE__ */ jsx5(
421
+ "path",
422
+ {
423
+ d: "M3 3v18h18V3H3zm2 7v9h14v-9H5zm1-4h2v1H6V6zm3 0h2v1H9V6z",
424
+ fill: "currentColor",
425
+ fillRule: "evenodd",
426
+ clipRule: "evenodd"
427
+ }
428
+ )
429
+ });
430
+ var IconCommandCursor = createIconBase({
431
+ name: "IconCommandCursor",
432
+ paths: /* @__PURE__ */ jsx5(
433
+ "path",
434
+ {
435
+ d: "M4 3v18h16V3H4zm2 2h12v14H6V5zm1.5 3.5L11 12l-3.5 3.5L9 17l5-5-5-5-1.5 1.5zM13 17h4v-2h-4v2z",
436
+ fill: "currentColor",
437
+ fillRule: "evenodd",
438
+ clipRule: "evenodd"
439
+ }
440
+ )
441
+ });
442
+ var IconDataReel = createIconBase({
443
+ name: "IconDataReel",
444
+ paths: /* @__PURE__ */ jsx5(
445
+ "path",
446
+ {
447
+ d: "M3 5v14h18V5H3zm2 2h14v10H5V7zm3 1a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm8 0a3 3 0 1 0 0 6 3 3 0 0 0 0-6zM10 11h4v1.5h-4V11z",
448
+ fill: "currentColor",
449
+ fillRule: "evenodd",
450
+ clipRule: "evenodd"
451
+ }
452
+ )
453
+ });
454
+ var IconCodePreview = createIconBase({
455
+ name: "IconCodePreview",
456
+ paths: /* @__PURE__ */ jsx5(
457
+ "path",
458
+ {
459
+ d: "M3 3v15h18V3H3zm2 2h14v11H5V5zm3.5 2L5 10.5 8.5 14l1.4-1.4-2.1-2.1 2.1-2.1L8.5 7zm7 0-1.4 1.4 2.1 2.1-2.1 2.1 1.4 1.4 3.5-3.5L15.5 7zM9 20h6v2H9v-2z",
460
+ fill: "currentColor",
461
+ fillRule: "evenodd",
462
+ clipRule: "evenodd"
463
+ }
464
+ )
465
+ });
466
+ var IconInsightBoard = createIconBase({
467
+ name: "IconInsightBoard",
468
+ paths: /* @__PURE__ */ jsx5(
469
+ "path",
470
+ {
471
+ d: "M3 3v18h18V3H3zm2 2h14v3H5V5zm0 5h6v9H5v-9zm8 0h6v4h-6v-4zm0 6h6v3h-6v-3zM6 6h2v1H6V6zm3 0h2v1H9V6z",
472
+ fill: "currentColor",
473
+ fillRule: "evenodd",
474
+ clipRule: "evenodd"
475
+ }
476
+ )
477
+ });
478
+ var IconEventStream = createIconBase({
479
+ name: "IconEventStream",
480
+ paths: /* @__PURE__ */ jsxs3(Fragment2, { children: [
481
+ /* @__PURE__ */ jsx5("path", { d: "M5 4h2v16H5V4z", fill: "currentColor", opacity: "0.45" }),
482
+ fill("M6 3a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm0 8a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm5-6h10v2H11V5zm0 8h7v2h-7v-2zm0 5h10v2H11v-2z")
483
+ ] })
484
+ });
485
+ var IconFeatureGate = createIconBase({
486
+ name: "IconFeatureGate",
487
+ paths: /* @__PURE__ */ jsx5(
488
+ "path",
489
+ {
490
+ d: "M4 3h2v18H4V3zm3 2h12l-3 4 3 4H7V5zm4 1-2.2 4H12l-1 4 4.2-5H12l1-3h-2z",
491
+ fill: "currentColor",
492
+ fillRule: "evenodd",
493
+ clipRule: "evenodd"
494
+ }
495
+ )
496
+ });
497
+ var IconReplayFrame = createIconBase({
498
+ name: "IconReplayFrame",
499
+ paths: /* @__PURE__ */ jsx5(
500
+ "path",
501
+ {
502
+ d: "M3 3v18h18V3H3zm2 2h14v11H5V5zm5 2v7l6-3.5L10 7zm-5 11h9v1H5v-1zm11 0h3v1h-3v-1z",
503
+ fill: "currentColor",
504
+ fillRule: "evenodd",
505
+ clipRule: "evenodd"
506
+ }
507
+ )
508
+ });
509
+ var IconQueryStack = createIconBase({
510
+ name: "IconQueryStack",
511
+ paths: fill(
512
+ "M4 5c0-1.66 3.58-3 8-3s8 1.34 8 3-3.58 3-8 3-8-1.34-8-3zm0 3v3c0 1.66 3.58 3 8 3 .7 0 1.38-.04 2-.12V11.8c-.64.13-1.31.2-2 .2-4.42 0-8-1.34-8-3zm0 6v3c0 1.66 3.58 3 8 3 .7 0 1.38-.04 2-.12v-2.08c-.64.13-1.31.2-2 .2-4.42 0-8-1.34-8-3zm12-1 5 4-5 4v-3h-4v-2h4v-3z"
513
+ )
514
+ });
515
+ var IconExperimentSplit = createIconBase({
516
+ name: "IconExperimentSplit",
517
+ paths: fill(
518
+ "M5 3a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm14 0a3 3 0 1 0 0 6 3 3 0 0 0 0-6zM5 15a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm1-6h2c0 2.2 1.8 4 4 4h2.17A3 3 0 0 1 19 11v2a3 3 0 0 1-4.83-2H12a6 6 0 0 1-6-6v4zm0 4a6 6 0 0 0 6-6h2a8 8 0 0 1-8 8v-2z"
519
+ )
520
+ });
521
+ var IconSurveyCard = createIconBase({
522
+ name: "IconSurveyCard",
523
+ paths: /* @__PURE__ */ jsx5(
524
+ "path",
525
+ {
526
+ d: "M3 3v18h18V3H3zm2 2h14v14H5V5zm2 2h7v2H7V7zm0 4h4v2H7v-2zm7-.4-2.5 2.5-1-1-1.4 1.4 2.4 2.4 3.9-3.9-1.4-1.4zM7 16h10v1H7v-1z",
527
+ fill: "currentColor",
528
+ fillRule: "evenodd",
529
+ clipRule: "evenodd"
530
+ }
531
+ )
532
+ });
533
+ var OLD_UI_ICONS = {
534
+ oldWindow: IconOldWindow,
535
+ commandCursor: IconCommandCursor,
536
+ dataReel: IconDataReel,
537
+ codePreview: IconCodePreview,
538
+ insightBoard: IconInsightBoard,
539
+ eventStream: IconEventStream,
540
+ featureGate: IconFeatureGate,
541
+ replayFrame: IconReplayFrame,
542
+ queryStack: IconQueryStack,
543
+ experimentSplit: IconExperimentSplit,
544
+ surveyCard: IconSurveyCard
545
+ };
546
+ var IconActivity = createIconBasePath(
547
+ "M22 12h-4l-3 9L9 3l-3 9H2v2h6.76l2.24-6.72L15 15l2.24-6.72L19 14h3v-2z"
548
+ );
549
+ var IconFlask = createIconBasePath(
550
+ "M19.8 18.4L14 10.67V6.5l1.35-1.35c.39-.39.39-1.02 0-1.41L14.65 2.7a.9959.9959 0 0 0-1.41 0L9.35 6.54c-.39.39-.39 1.02 0 1.41L10.7 9.3v4.17L4.2 18.4C3.53 19.07 4.04 20.25 5 20.25h14c.96 0 1.47-1.18.8-1.85zM6.91 18.25l5.09-5.09 5.09 5.09H6.91z"
551
+ );
552
+ var IconSpinner = forwardRef4(function IconSpinner2(_a, ref) {
553
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
554
+ return /* @__PURE__ */ jsx5(IconSync, __spreadValues({ ref, className: cn("ph-icon-spin", className) }, props));
555
+ });
556
+ IconSpinner.displayName = "IconSpinner";
557
+ var CANONICAL_ICONS = {
558
+ activity: IconActivity,
559
+ areaChart: IconAreaChart,
560
+ arrowDown: IconArrowDown,
561
+ arrowUp: IconArrowUp,
562
+ bell: IconBell,
563
+ bellOff: IconBellOff,
564
+ bolt: IconBolt,
565
+ box: IconBox,
566
+ cancel: IconCancel,
567
+ check: IconCheck,
568
+ checkCircle: IconCheckCircle,
569
+ chevronDown: IconChevronDown,
570
+ chevronLeft: IconChevronLeft,
571
+ chevronRight: IconChevronRight,
572
+ clipboardEdit: IconClipboardEdit,
573
+ close: IconClose,
574
+ codePreview: IconCodePreview,
575
+ cohort: IconCohort,
576
+ commandCursor: IconCommandCursor,
577
+ copy: IconCopy,
578
+ cumulativeChart: IconCumulativeChart,
579
+ dataReel: IconDataReel,
580
+ database: IconDatabase,
581
+ download: IconDownload,
582
+ edit: IconEdit,
583
+ errorOutline: IconErrorOutline,
584
+ eventStream: IconEventStream,
585
+ exclamation: IconExclamation,
586
+ experimentSplit: IconExperimentSplit,
587
+ featureGate: IconFeatureGate,
588
+ flag: IconFlag,
589
+ flare: IconFlare,
590
+ flask: IconFlask,
591
+ gift: IconGift,
592
+ gridView: IconGridView,
593
+ handClick: IconHandClick,
594
+ home: IconHome,
595
+ info: IconInfo,
596
+ insightBoard: IconInsightBoard,
597
+ layers: IconLayers,
598
+ listView: IconListView,
599
+ logout: IconLogout,
600
+ mail: IconMail,
601
+ moon: IconMoon,
602
+ oldWindow: IconOldWindow,
603
+ panelRight: IconPanelRight,
604
+ person: IconPerson,
605
+ playCircle: IconPlayCircle,
606
+ plus: IconPlus,
607
+ premium: IconPremium,
608
+ queryEditor: IconQueryEditor,
609
+ queryStack: IconQueryStack,
610
+ radar: IconRadar,
611
+ recording: IconRecording,
612
+ replayFrame: IconReplayFrame,
613
+ robot: IconRobot,
614
+ rocket: IconRocket,
615
+ save: IconSave,
616
+ search: IconSearch,
617
+ selectEvents: IconSelectEvents,
618
+ shoppingCart: IconShoppingCart,
619
+ spinner: IconSpinner,
620
+ star: IconStar,
621
+ subArrowRight: IconSubArrowRight,
622
+ sun: IconSun,
623
+ surveyCard: IconSurveyCard,
624
+ surveys: IconSurveys,
625
+ sync: IconSync,
626
+ tableChart: IconTableChart,
627
+ terminal: IconTerminal,
628
+ toggle: IconToggle,
629
+ trash: IconTrash,
630
+ tuning: IconTuning,
631
+ upload: IconUpload,
632
+ volume: IconVolume,
633
+ volumeOff: IconVolumeOff
634
+ };
635
+ var PH_ICON_ALIASES = {
636
+ clipboard: IconClipboardEdit,
637
+ grid: IconGridView,
638
+ list: IconListView,
639
+ play: IconPlayCircle,
640
+ settings: IconTuning,
641
+ trendingUp: IconArrowUp,
642
+ warning: IconExclamation,
643
+ xCircle: IconCancel
644
+ };
645
+ var PH_ICONS = __spreadValues(__spreadValues({}, CANONICAL_ICONS), PH_ICON_ALIASES);
646
+ for (const [name, Icon] of Object.entries(CANONICAL_ICONS)) {
647
+ const namedIcon = Icon;
648
+ if (!namedIcon.displayName || namedIcon.displayName === "IconGlyph") {
649
+ namedIcon.displayName = `Icon${name[0].toUpperCase()}${name.slice(1)}`;
650
+ }
651
+ }
652
+ var IconByName = forwardRef4(function IconByName2(_a, ref) {
653
+ var _b = _a, { name } = _b, props = __objRest(_b, ["name"]);
654
+ const Icon = PH_ICONS[name];
655
+ return /* @__PURE__ */ jsx5(Icon, __spreadValues({ ref }, props));
656
+ });
657
+ IconByName.displayName = "IconByName";
658
+
659
+ // src/components/ui/Alert.tsx
660
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
122
661
  var statusConfig = {
123
662
  info: { icon: IconInfo },
124
663
  success: { icon: IconCheckCircle },
@@ -131,7 +670,7 @@ var statusClassMap = {
131
670
  warning: "ph-alert-warning",
132
671
  danger: "ph-alert-danger"
133
672
  };
134
- var Alert = forwardRef2(function Alert2(_a, ref) {
673
+ var Alert = forwardRef5(function Alert2(_a, ref) {
135
674
  var _b = _a, {
136
675
  status = "info",
137
676
  title,
@@ -157,7 +696,7 @@ var Alert = forwardRef2(function Alert2(_a, ref) {
157
696
  ]);
158
697
  const config = statusConfig[status];
159
698
  const Icon = config.icon;
160
- return /* @__PURE__ */ jsxs2(
699
+ return /* @__PURE__ */ jsxs4(
161
700
  "div",
162
701
  __spreadProps(__spreadValues({
163
702
  ref,
@@ -166,20 +705,20 @@ var Alert = forwardRef2(function Alert2(_a, ref) {
166
705
  className: cn("ph-alert", statusClassMap[status], className)
167
706
  }, props), {
168
707
  children: [
169
- icon != null ? icon : /* @__PURE__ */ jsx2(Icon, { className: "ph-alert-icon mt-0.5 h-5 w-5 shrink-0", "aria-hidden": true }),
170
- /* @__PURE__ */ jsxs2("div", { className: "min-w-0 flex-1", children: [
171
- title && /* @__PURE__ */ jsx2("p", { className: "font-semibold", children: title }),
172
- description && /* @__PURE__ */ jsx2("p", { className: "mt-1 text-sm text-ph-subtle", children: description }),
708
+ icon != null ? icon : /* @__PURE__ */ jsx6(Icon, { className: "ph-alert-icon mt-0.5 h-5 w-5 shrink-0", "aria-hidden": true }),
709
+ /* @__PURE__ */ jsxs4("div", { className: "min-w-0 flex-1", children: [
710
+ title && /* @__PURE__ */ jsx6("p", { className: "font-semibold", children: title }),
711
+ description && /* @__PURE__ */ jsx6("p", { className: "mt-1 text-sm text-ph-subtle", children: description }),
173
712
  children
174
713
  ] }),
175
- onDismiss && /* @__PURE__ */ jsx2(
714
+ onDismiss && /* @__PURE__ */ jsx6(
176
715
  "button",
177
716
  {
178
717
  type: "button",
179
718
  onClick: onDismiss,
180
719
  className: "ph-alert-dismiss",
181
720
  "aria-label": dismissLabel,
182
- children: /* @__PURE__ */ jsx2(IconClose, { className: "h-4 w-4", "aria-hidden": true })
721
+ children: /* @__PURE__ */ jsx6(IconClose, { className: "h-4 w-4", "aria-hidden": true })
183
722
  }
184
723
  )
185
724
  ]
@@ -189,8 +728,8 @@ var Alert = forwardRef2(function Alert2(_a, ref) {
189
728
  Alert.displayName = "Alert";
190
729
 
191
730
  // src/components/ui/Badge.tsx
192
- import { forwardRef as forwardRef3 } from "react";
193
- import { jsx as jsx3 } from "react/jsx-runtime";
731
+ import { forwardRef as forwardRef6 } from "react";
732
+ import { jsx as jsx7 } from "react/jsx-runtime";
194
733
  var variantMap = {
195
734
  brand: "ph-badge-brand",
196
735
  neutral: "ph-badge-neutral",
@@ -204,7 +743,7 @@ var sizeMap = {
204
743
  sm: "text-[10px] px-1.5 py-0.5",
205
744
  md: ""
206
745
  };
207
- var Badge = forwardRef3(function Badge2(_a, ref) {
746
+ var Badge = forwardRef6(function Badge2(_a, ref) {
208
747
  var _b = _a, {
209
748
  variant = "neutral",
210
749
  size = "md",
@@ -216,7 +755,7 @@ var Badge = forwardRef3(function Badge2(_a, ref) {
216
755
  "children",
217
756
  "className"
218
757
  ]);
219
- return /* @__PURE__ */ jsx3(
758
+ return /* @__PURE__ */ jsx7(
220
759
  "span",
221
760
  __spreadProps(__spreadValues({
222
761
  ref,
@@ -234,15 +773,15 @@ var Badge = forwardRef3(function Badge2(_a, ref) {
234
773
  Badge.displayName = "Badge";
235
774
 
236
775
  // src/components/ui/Card.tsx
237
- import { forwardRef as forwardRef4 } from "react";
238
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
776
+ import { forwardRef as forwardRef7 } from "react";
777
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
239
778
  var variantMap2 = {
240
779
  default: "",
241
780
  outlined: "border-2 border-ph-border",
242
781
  elevated: "ph-card-elevated",
243
782
  highlighted: "ph-card-highlighted"
244
783
  };
245
- var Card = forwardRef4(function Card2(_a, ref) {
784
+ var Card = forwardRef7(function Card2(_a, ref) {
246
785
  var _b = _a, {
247
786
  children,
248
787
  title,
@@ -268,7 +807,7 @@ var Card = forwardRef4(function Card2(_a, ref) {
268
807
  "interactive",
269
808
  "titleAs"
270
809
  ]);
271
- return /* @__PURE__ */ jsxs3(
810
+ return /* @__PURE__ */ jsxs5(
272
811
  "div",
273
812
  __spreadProps(__spreadValues({
274
813
  ref,
@@ -280,14 +819,14 @@ var Card = forwardRef4(function Card2(_a, ref) {
280
819
  )
281
820
  }, props), {
282
821
  children: [
283
- media && /* @__PURE__ */ jsx4("div", { className: "ph-card-media", children: media }),
284
- /* @__PURE__ */ jsxs3("div", { className: cn("ph-card-body", bodyClassName), children: [
285
- title && /* @__PURE__ */ jsx4(Title2, { className: "ph-card-title", children: title }),
286
- description && /* @__PURE__ */ jsx4("p", { className: "text-sm text-ph-subtle", children: description }),
822
+ media && /* @__PURE__ */ jsx8("div", { className: "ph-card-media", children: media }),
823
+ /* @__PURE__ */ jsxs5("div", { className: cn("ph-card-body", bodyClassName), children: [
824
+ title && /* @__PURE__ */ jsx8(Title2, { className: "ph-card-title", children: title }),
825
+ description && /* @__PURE__ */ jsx8("p", { className: "text-sm text-ph-subtle", children: description }),
287
826
  children,
288
- actions && /* @__PURE__ */ jsx4("div", { className: "ph-card-actions", children: actions })
827
+ actions && /* @__PURE__ */ jsx8("div", { className: "ph-card-actions", children: actions })
289
828
  ] }),
290
- footer && /* @__PURE__ */ jsx4("div", { className: "border-t border-ph-border px-6 py-4 text-xs text-ph-subtle", children: footer })
829
+ footer && /* @__PURE__ */ jsx8("div", { className: "border-t border-ph-border px-6 py-4 text-xs text-ph-subtle", children: footer })
291
830
  ]
292
831
  })
293
832
  );
@@ -295,7 +834,7 @@ var Card = forwardRef4(function Card2(_a, ref) {
295
834
  Card.displayName = "Card";
296
835
 
297
836
  // src/components/ui/Kbd.tsx
298
- import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
837
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
299
838
  var platformLabels = {
300
839
  text: {
301
840
  command: "Command",
@@ -354,17 +893,17 @@ function Kbd(_a) {
354
893
  "aria-label"
355
894
  ]);
356
895
  if (variant === "token") {
357
- return /* @__PURE__ */ jsx5("code", __spreadProps(__spreadValues({ className: cn("ph-code-token ph-kbd", className), "aria-label": ariaLabel }, props), { children }));
896
+ return /* @__PURE__ */ jsx9("code", __spreadProps(__spreadValues({ className: cn("ph-code-token ph-kbd", className), "aria-label": ariaLabel }, props), { children }));
358
897
  }
359
898
  const sourceKeys = (keys == null ? void 0 : keys.length) ? keys : children != null ? [children] : [];
360
899
  const displayKeys = sourceKeys.map((key) => formatKey(key, platform));
361
900
  const accessibleLabel = ariaLabel != null ? ariaLabel : getShortcutLabel(displayKeys);
362
901
  if (variant === "key") {
363
- return /* @__PURE__ */ jsx5("kbd", __spreadProps(__spreadValues({ className: cn("ph-keycap", className), "aria-label": accessibleLabel }, props), { children: displayKeys[0] }));
902
+ return /* @__PURE__ */ jsx9("kbd", __spreadProps(__spreadValues({ className: cn("ph-keycap", className), "aria-label": accessibleLabel }, props), { children: displayKeys[0] }));
364
903
  }
365
- return /* @__PURE__ */ jsx5("kbd", __spreadProps(__spreadValues({ className: cn("ph-shortcut-group ph-keycap", className), "aria-label": accessibleLabel }, props), { children: displayKeys.map((key, index) => /* @__PURE__ */ jsxs4("span", { className: "contents", children: [
366
- index > 0 && separator != null ? /* @__PURE__ */ jsx5("span", { className: "ph-shortcut-separator", "aria-hidden": "true", children: separator }) : null,
367
- /* @__PURE__ */ jsx5("span", { className: "ph-shortcut-key", "aria-hidden": accessibleLabel ? true : void 0, children: key })
904
+ return /* @__PURE__ */ jsx9("kbd", __spreadProps(__spreadValues({ className: cn("ph-shortcut-group ph-keycap", className), "aria-label": accessibleLabel }, props), { children: displayKeys.map((key, index) => /* @__PURE__ */ jsxs6("span", { className: "contents", children: [
905
+ index > 0 && separator != null ? /* @__PURE__ */ jsx9("span", { className: "ph-shortcut-separator", "aria-hidden": "true", children: separator }) : null,
906
+ /* @__PURE__ */ jsx9("span", { className: "ph-shortcut-key", "aria-hidden": accessibleLabel ? true : void 0, children: key })
368
907
  ] }, index)) }));
369
908
  }
370
909
  function formatKey(key, platform) {
@@ -383,7 +922,7 @@ function getShortcutLabel(keys) {
383
922
  }
384
923
 
385
924
  // src/components/ui/Loader.tsx
386
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
925
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
387
926
  var loaderSizeClass = {
388
927
  sm: "ph-loader-sm",
389
928
  md: "ph-loader-md",
@@ -409,7 +948,7 @@ function Loader(_a) {
409
948
  "label",
410
949
  "className"
411
950
  ]);
412
- return /* @__PURE__ */ jsxs5(
951
+ return /* @__PURE__ */ jsxs7(
413
952
  "span",
414
953
  __spreadProps(__spreadValues({
415
954
  role: "status",
@@ -417,20 +956,20 @@ function Loader(_a) {
417
956
  className: cn("ph-loader", loaderSizeClass[size], className)
418
957
  }, props), {
419
958
  children: [
420
- variant === "spinner" ? /* @__PURE__ */ jsx6("span", { className: "ph-loading", "aria-hidden": true }) : null,
421
- variant === "dots" ? /* @__PURE__ */ jsxs5("span", { className: "ph-loading-dots", "aria-hidden": true, children: [
422
- /* @__PURE__ */ jsx6("span", {}),
423
- /* @__PURE__ */ jsx6("span", {}),
424
- /* @__PURE__ */ jsx6("span", {})
959
+ variant === "spinner" ? /* @__PURE__ */ jsx10("span", { className: "ph-loading", "aria-hidden": true }) : null,
960
+ variant === "dots" ? /* @__PURE__ */ jsxs7("span", { className: "ph-loading-dots", "aria-hidden": true, children: [
961
+ /* @__PURE__ */ jsx10("span", {}),
962
+ /* @__PURE__ */ jsx10("span", {}),
963
+ /* @__PURE__ */ jsx10("span", {})
425
964
  ] }) : null,
426
- variant === "pulse" ? /* @__PURE__ */ jsx6("span", { className: "ph-loading-pulse", "aria-hidden": true }) : null
965
+ variant === "pulse" ? /* @__PURE__ */ jsx10("span", { className: "ph-loading-pulse", "aria-hidden": true }) : null
427
966
  ]
428
967
  })
429
968
  );
430
969
  }
431
970
  function Skeleton(_a) {
432
971
  var _b = _a, { shape = "text", className } = _b, props = __objRest(_b, ["shape", "className"]);
433
- return /* @__PURE__ */ jsx6(
972
+ return /* @__PURE__ */ jsx10(
434
973
  "span",
435
974
  __spreadValues({
436
975
  className: cn("ph-skeleton", skeletonShapeClass[shape], className),
@@ -454,53 +993,53 @@ function LoadingState(_a) {
454
993
  "size",
455
994
  "className"
456
995
  ]);
457
- return /* @__PURE__ */ jsxs5("div", __spreadProps(__spreadValues({ className: cn("ph-loading-state", className), role: "status", "aria-label": label }, props), { children: [
458
- /* @__PURE__ */ jsx6(Loader, { variant, size, label, "aria-hidden": "true" }),
459
- /* @__PURE__ */ jsxs5("div", { className: "ph-loading-state__copy", children: [
460
- /* @__PURE__ */ jsx6("strong", { children: title }),
461
- description ? /* @__PURE__ */ jsx6("span", { children: description }) : null
996
+ return /* @__PURE__ */ jsxs7("div", __spreadProps(__spreadValues({ className: cn("ph-loading-state", className), role: "status", "aria-label": label }, props), { children: [
997
+ /* @__PURE__ */ jsx10(Loader, { variant, size, label, "aria-hidden": "true" }),
998
+ /* @__PURE__ */ jsxs7("div", { className: "ph-loading-state__copy", children: [
999
+ /* @__PURE__ */ jsx10("strong", { children: title }),
1000
+ description ? /* @__PURE__ */ jsx10("span", { children: description }) : null
462
1001
  ] })
463
1002
  ] }));
464
1003
  }
465
1004
 
466
1005
  // src/components/ui/AuthLayout.tsx
467
1006
  import { useId } from "react";
468
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1007
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
469
1008
  function AuthLayout(_a) {
470
1009
  var _b = _a, { brand, footer, aside, children, className } = _b, props = __objRest(_b, ["brand", "footer", "aside", "children", "className"]);
471
- return /* @__PURE__ */ jsxs6("div", __spreadProps(__spreadValues({ className: cn("ph-auth-layout", aside != null && "ph-auth-layout--split", className) }, props), { children: [
472
- aside ? /* @__PURE__ */ jsx7("aside", { className: "ph-auth-layout__aside", children: aside }) : null,
473
- /* @__PURE__ */ jsx7("div", { className: "ph-auth-layout__main", children: /* @__PURE__ */ jsxs6("div", { className: "ph-auth-layout__column", children: [
474
- brand ? /* @__PURE__ */ jsx7("div", { className: "ph-auth-layout__brand", children: brand }) : null,
1010
+ return /* @__PURE__ */ jsxs8("div", __spreadProps(__spreadValues({ className: cn("ph-auth-layout", aside != null && "ph-auth-layout--split", className) }, props), { children: [
1011
+ aside ? /* @__PURE__ */ jsx11("aside", { className: "ph-auth-layout__aside", children: aside }) : null,
1012
+ /* @__PURE__ */ jsx11("div", { className: "ph-auth-layout__main", children: /* @__PURE__ */ jsxs8("div", { className: "ph-auth-layout__column", children: [
1013
+ brand ? /* @__PURE__ */ jsx11("div", { className: "ph-auth-layout__brand", children: brand }) : null,
475
1014
  children,
476
- footer ? /* @__PURE__ */ jsx7("footer", { className: "ph-auth-layout__footer", children: footer }) : null
1015
+ footer ? /* @__PURE__ */ jsx11("footer", { className: "ph-auth-layout__footer", children: footer }) : null
477
1016
  ] }) })
478
1017
  ] }));
479
1018
  }
480
1019
  function AuthCard(_a) {
481
1020
  var _b = _a, { title, description, footer, children, className } = _b, props = __objRest(_b, ["title", "description", "footer", "children", "className"]);
482
1021
  const titleId = useId();
483
- return /* @__PURE__ */ jsxs6("section", __spreadProps(__spreadValues({ className: cn("ph-auth-card", className), "aria-labelledby": titleId }, props), { children: [
484
- /* @__PURE__ */ jsxs6("header", { className: "ph-auth-card__header", children: [
485
- /* @__PURE__ */ jsx7("h1", { id: titleId, children: title }),
486
- description ? /* @__PURE__ */ jsx7("p", { children: description }) : null
1022
+ return /* @__PURE__ */ jsxs8("section", __spreadProps(__spreadValues({ className: cn("ph-auth-card", className), "aria-labelledby": titleId }, props), { children: [
1023
+ /* @__PURE__ */ jsxs8("header", { className: "ph-auth-card__header", children: [
1024
+ /* @__PURE__ */ jsx11("h1", { id: titleId, children: title }),
1025
+ description ? /* @__PURE__ */ jsx11("p", { children: description }) : null
487
1026
  ] }),
488
- /* @__PURE__ */ jsx7("div", { className: "ph-auth-card__body", children }),
489
- footer ? /* @__PURE__ */ jsx7("footer", { className: "ph-auth-card__footer", children: footer }) : null
1027
+ /* @__PURE__ */ jsx11("div", { className: "ph-auth-card__body", children }),
1028
+ footer ? /* @__PURE__ */ jsx11("footer", { className: "ph-auth-card__footer", children: footer }) : null
490
1029
  ] }));
491
1030
  }
492
1031
  function AuthDivider(_a) {
493
1032
  var _b = _a, { children = "or continue with", className } = _b, props = __objRest(_b, ["children", "className"]);
494
- return /* @__PURE__ */ jsx7("div", __spreadProps(__spreadValues({ className: cn("ph-auth-divider", className) }, props), { children: /* @__PURE__ */ jsx7("span", { children }) }));
1033
+ return /* @__PURE__ */ jsx11("div", __spreadProps(__spreadValues({ className: cn("ph-auth-divider", className) }, props), { children: /* @__PURE__ */ jsx11("span", { children }) }));
495
1034
  }
496
1035
 
497
1036
  // src/components/ui/SettingsLayout.tsx
498
- import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1037
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
499
1038
  function SettingsNav(_a) {
500
1039
  var _b = _a, { groups, className } = _b, props = __objRest(_b, ["groups", "className"]);
501
- return /* @__PURE__ */ jsx8("div", __spreadProps(__spreadValues({ className: cn("ph-settings-nav", className) }, props), { children: groups.map((group, index) => /* @__PURE__ */ jsxs7("div", { className: "ph-settings-nav__group", children: [
502
- /* @__PURE__ */ jsx8("h3", { children: group.label }),
503
- /* @__PURE__ */ jsx8("div", { className: "ph-settings-nav__items", children: group.items.map((item) => /* @__PURE__ */ jsxs7(
1040
+ return /* @__PURE__ */ jsx12("div", __spreadProps(__spreadValues({ className: cn("ph-settings-nav", className) }, props), { children: groups.map((group, index) => /* @__PURE__ */ jsxs9("div", { className: "ph-settings-nav__group", children: [
1041
+ /* @__PURE__ */ jsx12("h3", { children: group.label }),
1042
+ /* @__PURE__ */ jsx12("div", { className: "ph-settings-nav__items", children: group.items.map((item) => /* @__PURE__ */ jsxs9(
504
1043
  "a",
505
1044
  {
506
1045
  href: item.href,
@@ -512,9 +1051,9 @@ function SettingsNav(_a) {
512
1051
  ),
513
1052
  "aria-current": item.active ? "page" : void 0,
514
1053
  children: [
515
- item.icon ? /* @__PURE__ */ jsx8("span", { className: "ph-settings-nav__icon", children: item.icon }) : null,
516
- /* @__PURE__ */ jsx8("span", { children: item.label }),
517
- item.badge ? /* @__PURE__ */ jsx8("span", { className: "ph-settings-nav__badge", children: item.badge }) : null
1054
+ item.icon ? /* @__PURE__ */ jsx12("span", { className: "ph-settings-nav__icon", children: item.icon }) : null,
1055
+ /* @__PURE__ */ jsx12("span", { children: item.label }),
1056
+ item.badge ? /* @__PURE__ */ jsx12("span", { className: "ph-settings-nav__badge", children: item.badge }) : null
518
1057
  ]
519
1058
  },
520
1059
  item.id
@@ -539,34 +1078,302 @@ function SettingsLayout(_a) {
539
1078
  "children",
540
1079
  "className"
541
1080
  ]);
542
- return /* @__PURE__ */ jsxs7("section", __spreadProps(__spreadValues({ className: cn("ph-settings-layout", className) }, props), { children: [
543
- /* @__PURE__ */ jsxs7("header", { className: "ph-settings-layout__header", children: [
544
- /* @__PURE__ */ jsxs7("div", { children: [
545
- /* @__PURE__ */ jsx8("h2", { children: title }),
546
- description ? /* @__PURE__ */ jsx8("p", { children: description }) : null
1081
+ return /* @__PURE__ */ jsxs9("section", __spreadProps(__spreadValues({ className: cn("ph-settings-layout", className) }, props), { children: [
1082
+ /* @__PURE__ */ jsxs9("header", { className: "ph-settings-layout__header", children: [
1083
+ /* @__PURE__ */ jsxs9("div", { children: [
1084
+ /* @__PURE__ */ jsx12("h2", { children: title }),
1085
+ description ? /* @__PURE__ */ jsx12("p", { children: description }) : null
547
1086
  ] }),
548
- actions ? /* @__PURE__ */ jsx8("div", { className: "ph-settings-layout__actions", children: actions }) : null
1087
+ actions ? /* @__PURE__ */ jsx12("div", { className: "ph-settings-layout__actions", children: actions }) : null
549
1088
  ] }),
550
- /* @__PURE__ */ jsxs7("details", { className: "ph-settings-layout__mobile-nav", children: [
551
- /* @__PURE__ */ jsxs7("summary", { children: [
552
- /* @__PURE__ */ jsx8(IconTuning, { className: "h-4 w-4", "aria-hidden": true }),
1089
+ /* @__PURE__ */ jsxs9("details", { className: "ph-settings-layout__mobile-nav", children: [
1090
+ /* @__PURE__ */ jsxs9("summary", { children: [
1091
+ /* @__PURE__ */ jsx12(IconTuning, { className: "h-4 w-4", "aria-hidden": true }),
553
1092
  "Settings menu"
554
1093
  ] }),
555
- /* @__PURE__ */ jsx8("nav", { "aria-label": navigationLabel, children: navigation })
1094
+ /* @__PURE__ */ jsx12("nav", { "aria-label": navigationLabel, children: navigation })
556
1095
  ] }),
557
- /* @__PURE__ */ jsxs7("div", { className: "ph-settings-layout__grid", children: [
558
- /* @__PURE__ */ jsx8("aside", { className: "ph-settings-layout__sidebar", children: /* @__PURE__ */ jsx8("nav", { "aria-label": navigationLabel, children: navigation }) }),
559
- /* @__PURE__ */ jsx8("div", { className: "ph-settings-layout__content", children })
1096
+ /* @__PURE__ */ jsxs9("div", { className: "ph-settings-layout__grid", children: [
1097
+ /* @__PURE__ */ jsx12("aside", { className: "ph-settings-layout__sidebar", children: /* @__PURE__ */ jsx12("nav", { "aria-label": navigationLabel, children: navigation }) }),
1098
+ /* @__PURE__ */ jsx12("div", { className: "ph-settings-layout__content", children })
560
1099
  ] })
561
1100
  ] }));
562
1101
  }
563
1102
 
1103
+ // src/components/ui/DropdownMenu.tsx
1104
+ import * as DropdownPrimitive from "@radix-ui/react-dropdown-menu";
1105
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1106
+ var sizeClass2 = {
1107
+ xs: "ph-btn-xs",
1108
+ sm: "ph-btn-sm",
1109
+ md: "",
1110
+ lg: "ph-btn-lg"
1111
+ };
1112
+ var variantClass2 = {
1113
+ primary: "ph-btn-primary",
1114
+ secondary: "ph-btn-secondary",
1115
+ accent: "ph-btn-accent"
1116
+ };
1117
+ function DropdownContent({
1118
+ children,
1119
+ align = "start",
1120
+ side = "bottom",
1121
+ sideOffset = 7,
1122
+ alignOffset = 0,
1123
+ collisionPadding = 8,
1124
+ avoidCollisions = true,
1125
+ panelClassName
1126
+ }) {
1127
+ return /* @__PURE__ */ jsx13(DropdownPrimitive.Portal, { children: /* @__PURE__ */ jsxs10(
1128
+ DropdownPrimitive.Content,
1129
+ {
1130
+ className: cn("ph-dropdown-panel", panelClassName),
1131
+ align,
1132
+ side,
1133
+ sideOffset,
1134
+ alignOffset,
1135
+ collisionPadding,
1136
+ avoidCollisions,
1137
+ sticky: "partial",
1138
+ children: [
1139
+ children,
1140
+ /* @__PURE__ */ jsx13(
1141
+ DropdownPrimitive.Arrow,
1142
+ {
1143
+ className: "ph-dropdown-arrow",
1144
+ width: 12,
1145
+ height: 6
1146
+ }
1147
+ )
1148
+ ]
1149
+ }
1150
+ ) });
1151
+ }
1152
+ function DropdownMenu(_a) {
1153
+ var _b = _a, {
1154
+ trigger,
1155
+ triggerId,
1156
+ triggerDataTest,
1157
+ children,
1158
+ align,
1159
+ side,
1160
+ sideOffset,
1161
+ alignOffset,
1162
+ collisionPadding,
1163
+ avoidCollisions,
1164
+ className,
1165
+ panelClassName,
1166
+ "aria-label": ariaLabel,
1167
+ open,
1168
+ defaultOpen,
1169
+ onOpenChange,
1170
+ modal = false,
1171
+ disabled
1172
+ } = _b, props = __objRest(_b, [
1173
+ "trigger",
1174
+ "triggerId",
1175
+ "triggerDataTest",
1176
+ "children",
1177
+ "align",
1178
+ "side",
1179
+ "sideOffset",
1180
+ "alignOffset",
1181
+ "collisionPadding",
1182
+ "avoidCollisions",
1183
+ "className",
1184
+ "panelClassName",
1185
+ "aria-label",
1186
+ "open",
1187
+ "defaultOpen",
1188
+ "onOpenChange",
1189
+ "modal",
1190
+ "disabled"
1191
+ ]);
1192
+ return /* @__PURE__ */ jsx13("div", __spreadProps(__spreadValues({ className: cn("ph-dropdown", className) }, props), { children: /* @__PURE__ */ jsxs10(
1193
+ DropdownPrimitive.Root,
1194
+ {
1195
+ open,
1196
+ defaultOpen,
1197
+ onOpenChange,
1198
+ modal,
1199
+ children: [
1200
+ /* @__PURE__ */ jsx13(DropdownPrimitive.Trigger, { asChild: true, disabled, children: /* @__PURE__ */ jsx13(
1201
+ "button",
1202
+ {
1203
+ type: "button",
1204
+ id: triggerId,
1205
+ "data-test": triggerDataTest,
1206
+ className: "ph-dropdown-trigger",
1207
+ "aria-label": ariaLabel,
1208
+ children: trigger
1209
+ }
1210
+ ) }),
1211
+ /* @__PURE__ */ jsx13(
1212
+ DropdownContent,
1213
+ {
1214
+ align,
1215
+ side,
1216
+ sideOffset,
1217
+ alignOffset,
1218
+ collisionPadding,
1219
+ avoidCollisions,
1220
+ panelClassName,
1221
+ children
1222
+ }
1223
+ )
1224
+ ]
1225
+ }
1226
+ ) }));
1227
+ }
1228
+ function DropdownButton(_a) {
1229
+ var _b = _a, {
1230
+ label,
1231
+ variant = "secondary",
1232
+ outline = false,
1233
+ size = "md",
1234
+ split = false,
1235
+ icon,
1236
+ sideIcon,
1237
+ children,
1238
+ align,
1239
+ side,
1240
+ sideOffset,
1241
+ alignOffset,
1242
+ collisionPadding,
1243
+ avoidCollisions,
1244
+ className,
1245
+ panelClassName,
1246
+ "aria-label": ariaLabel,
1247
+ open,
1248
+ defaultOpen,
1249
+ onOpenChange,
1250
+ modal = false,
1251
+ disabled
1252
+ } = _b, props = __objRest(_b, [
1253
+ "label",
1254
+ "variant",
1255
+ "outline",
1256
+ "size",
1257
+ "split",
1258
+ "icon",
1259
+ "sideIcon",
1260
+ "children",
1261
+ "align",
1262
+ "side",
1263
+ "sideOffset",
1264
+ "alignOffset",
1265
+ "collisionPadding",
1266
+ "avoidCollisions",
1267
+ "className",
1268
+ "panelClassName",
1269
+ "aria-label",
1270
+ "open",
1271
+ "defaultOpen",
1272
+ "onOpenChange",
1273
+ "modal",
1274
+ "disabled"
1275
+ ]);
1276
+ const trailing = sideIcon != null ? sideIcon : /* @__PURE__ */ jsx13(IconChevronDown, { className: "h-4 w-4", "aria-hidden": true });
1277
+ return /* @__PURE__ */ jsx13("div", __spreadProps(__spreadValues({ className: cn("ph-dropdown", className) }, props), { children: /* @__PURE__ */ jsxs10(
1278
+ DropdownPrimitive.Root,
1279
+ {
1280
+ open,
1281
+ defaultOpen,
1282
+ onOpenChange,
1283
+ modal,
1284
+ children: [
1285
+ /* @__PURE__ */ jsx13(DropdownPrimitive.Trigger, { asChild: true, disabled, children: /* @__PURE__ */ jsx13(
1286
+ "button",
1287
+ {
1288
+ type: "button",
1289
+ disabled,
1290
+ className: cn(
1291
+ "ph-btn ph-btn-raised ph-dropdown-button",
1292
+ variantClass2[variant],
1293
+ outline && "ph-btn-outline",
1294
+ sizeClass2[size],
1295
+ split && "ph-btn-split"
1296
+ ),
1297
+ "aria-label": ariaLabel,
1298
+ children: /* @__PURE__ */ jsx13(
1299
+ ButtonChrome,
1300
+ {
1301
+ label,
1302
+ icon,
1303
+ sideIcon: trailing,
1304
+ split
1305
+ }
1306
+ )
1307
+ }
1308
+ ) }),
1309
+ /* @__PURE__ */ jsx13(
1310
+ DropdownContent,
1311
+ {
1312
+ align,
1313
+ side,
1314
+ sideOffset,
1315
+ alignOffset,
1316
+ collisionPadding,
1317
+ avoidCollisions,
1318
+ panelClassName,
1319
+ children
1320
+ }
1321
+ )
1322
+ ]
1323
+ }
1324
+ ) }));
1325
+ }
1326
+ function DropdownItem(_a) {
1327
+ var _b = _a, {
1328
+ className,
1329
+ children,
1330
+ disabled
1331
+ } = _b, props = __objRest(_b, [
1332
+ "className",
1333
+ "children",
1334
+ "disabled"
1335
+ ]);
1336
+ return /* @__PURE__ */ jsx13(DropdownPrimitive.Item, { asChild: true, disabled, children: /* @__PURE__ */ jsx13(
1337
+ "button",
1338
+ __spreadProps(__spreadValues({
1339
+ type: "button",
1340
+ disabled,
1341
+ className: cn("ph-dropdown-item w-full text-left", className)
1342
+ }, props), {
1343
+ children
1344
+ })
1345
+ ) });
1346
+ }
1347
+ function DropdownRadioGroup(props) {
1348
+ return /* @__PURE__ */ jsx13(DropdownPrimitive.RadioGroup, __spreadValues({}, props));
1349
+ }
1350
+ function DropdownRadioItem(_a) {
1351
+ var _b = _a, {
1352
+ className,
1353
+ children
1354
+ } = _b, props = __objRest(_b, [
1355
+ "className",
1356
+ "children"
1357
+ ]);
1358
+ return /* @__PURE__ */ jsxs10(
1359
+ DropdownPrimitive.RadioItem,
1360
+ __spreadProps(__spreadValues({
1361
+ className: cn("ph-dropdown-item ph-dropdown-radio-item", className)
1362
+ }, props), {
1363
+ children: [
1364
+ /* @__PURE__ */ jsx13("span", { className: "ph-dropdown-item-indicator", "aria-hidden": true, children: /* @__PURE__ */ jsx13(DropdownPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx13(IconCheck, { className: "h-3.5 w-3.5" }) }) }),
1365
+ /* @__PURE__ */ jsx13("span", { children })
1366
+ ]
1367
+ })
1368
+ );
1369
+ }
1370
+
564
1371
  // src/components/ui/Input.tsx
565
- import { forwardRef as forwardRef5, useId as useId3 } from "react";
1372
+ import { forwardRef as forwardRef8, useId as useId3 } from "react";
566
1373
 
567
1374
  // src/components/ui/FormField.tsx
568
1375
  import { useId as useId2 } from "react";
569
- import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
1376
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
570
1377
  function FormField(_a) {
571
1378
  var _b = _a, {
572
1379
  controlId,
@@ -599,26 +1406,26 @@ function FormField(_a) {
599
1406
  "aria-errormessage": errorId,
600
1407
  "aria-invalid": error ? true : void 0
601
1408
  };
602
- return /* @__PURE__ */ jsxs8("div", __spreadProps(__spreadValues({ className: cn("ph-field", className) }, props), { children: [
603
- label ? /* @__PURE__ */ jsxs8(
1409
+ return /* @__PURE__ */ jsxs11("div", __spreadProps(__spreadValues({ className: cn("ph-field", className) }, props), { children: [
1410
+ label ? /* @__PURE__ */ jsxs11(
604
1411
  "label",
605
1412
  {
606
1413
  htmlFor: id,
607
1414
  className: cn("ph-label", hideLabel && "sr-only", disabled && "opacity-50"),
608
1415
  children: [
609
1416
  label,
610
- required ? /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", children: " *" }) : null
1417
+ required ? /* @__PURE__ */ jsx14("span", { "aria-hidden": "true", children: " *" }) : null
611
1418
  ]
612
1419
  }
613
1420
  ) : null,
614
1421
  typeof children === "function" ? children(controlProps) : children,
615
- descriptionId ? /* @__PURE__ */ jsx9("p", { id: descriptionId, className: "mt-1 text-xs text-ph-subtle", children: helperText }) : null,
616
- errorId ? /* @__PURE__ */ jsx9("p", { id: errorId, className: "mt-1 text-xs font-medium text-ph-danger", children: error }) : null
1422
+ descriptionId ? /* @__PURE__ */ jsx14("p", { id: descriptionId, className: "mt-1 text-xs text-ph-subtle", children: helperText }) : null,
1423
+ errorId ? /* @__PURE__ */ jsx14("p", { id: errorId, className: "mt-1 text-xs font-medium text-ph-danger", children: error }) : null
617
1424
  ] }));
618
1425
  }
619
1426
 
620
1427
  // src/components/ui/Input.tsx
621
- import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1428
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
622
1429
  var sizeMap2 = {
623
1430
  sm: "ph-input-sm",
624
1431
  md: "",
@@ -628,7 +1435,7 @@ function joinIds(...ids) {
628
1435
  const value = ids.filter(Boolean).join(" ");
629
1436
  return value || void 0;
630
1437
  }
631
- var Input = forwardRef5(function Input2(_a, ref) {
1438
+ var Input = forwardRef8(function Input2(_a, ref) {
632
1439
  var _b = _a, {
633
1440
  id: idProp,
634
1441
  label,
@@ -659,7 +1466,7 @@ var Input = forwardRef5(function Input2(_a, ref) {
659
1466
  const autoId = useId3();
660
1467
  const id = idProp != null ? idProp : autoId;
661
1468
  const hasError = Boolean(error);
662
- return /* @__PURE__ */ jsx10(
1469
+ return /* @__PURE__ */ jsx15(
663
1470
  FormField,
664
1471
  {
665
1472
  controlId: id,
@@ -670,7 +1477,7 @@ var Input = forwardRef5(function Input2(_a, ref) {
670
1477
  required,
671
1478
  disabled,
672
1479
  className: wrapperClassName,
673
- children: (fieldProps) => /* @__PURE__ */ jsx10(
1480
+ children: (fieldProps) => /* @__PURE__ */ jsx15(
674
1481
  "input",
675
1482
  __spreadValues(__spreadProps(__spreadValues({}, fieldProps), {
676
1483
  ref,
@@ -691,7 +1498,7 @@ var Input = forwardRef5(function Input2(_a, ref) {
691
1498
  );
692
1499
  });
693
1500
  Input.displayName = "Input";
694
- var Select = forwardRef5(function Select2(_a, ref) {
1501
+ var Select = forwardRef8(function Select2(_a, ref) {
695
1502
  var _b = _a, {
696
1503
  id: idProp,
697
1504
  label,
@@ -722,7 +1529,7 @@ var Select = forwardRef5(function Select2(_a, ref) {
722
1529
  const autoId = useId3();
723
1530
  const id = idProp != null ? idProp : autoId;
724
1531
  const hasError = Boolean(error);
725
- return /* @__PURE__ */ jsx10(FormField, { controlId: id, label, hideLabel, helperText, error, required, disabled, className: wrapperClassName, children: (fieldProps) => /* @__PURE__ */ jsx10(
1532
+ return /* @__PURE__ */ jsx15(FormField, { controlId: id, label, hideLabel, helperText, error, required, disabled, className: wrapperClassName, children: (fieldProps) => /* @__PURE__ */ jsx15(
726
1533
  "select",
727
1534
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({}, fieldProps), {
728
1535
  ref,
@@ -742,7 +1549,7 @@ var Select = forwardRef5(function Select2(_a, ref) {
742
1549
  ) });
743
1550
  });
744
1551
  Select.displayName = "Select";
745
- var Textarea = forwardRef5(function Textarea2(_a, ref) {
1552
+ var Textarea = forwardRef8(function Textarea2(_a, ref) {
746
1553
  var _b = _a, {
747
1554
  id: idProp,
748
1555
  label,
@@ -771,7 +1578,7 @@ var Textarea = forwardRef5(function Textarea2(_a, ref) {
771
1578
  const autoId = useId3();
772
1579
  const id = idProp != null ? idProp : autoId;
773
1580
  const hasError = Boolean(error);
774
- return /* @__PURE__ */ jsx10(FormField, { controlId: id, label, hideLabel, helperText, error, required, disabled, className: wrapperClassName, children: (fieldProps) => /* @__PURE__ */ jsx10(
1581
+ return /* @__PURE__ */ jsx15(FormField, { controlId: id, label, hideLabel, helperText, error, required, disabled, className: wrapperClassName, children: (fieldProps) => /* @__PURE__ */ jsx15(
775
1582
  "textarea",
776
1583
  __spreadValues(__spreadProps(__spreadValues({}, fieldProps), {
777
1584
  ref,
@@ -789,7 +1596,7 @@ var Textarea = forwardRef5(function Textarea2(_a, ref) {
789
1596
  ) });
790
1597
  });
791
1598
  Textarea.displayName = "Textarea";
792
- var Checkbox = forwardRef5(function Checkbox2(_a, ref) {
1599
+ var Checkbox = forwardRef8(function Checkbox2(_a, ref) {
793
1600
  var _b = _a, {
794
1601
  id: idProp,
795
1602
  label,
@@ -814,9 +1621,9 @@ var Checkbox = forwardRef5(function Checkbox2(_a, ref) {
814
1621
  const hasError = Boolean(error);
815
1622
  const descriptionId = helperText && !hasError ? `${id}-description` : void 0;
816
1623
  const errorId = error ? `${id}-error` : void 0;
817
- return /* @__PURE__ */ jsxs9("div", { className: cn("ph-control-row", wrapperClassName), children: [
818
- /* @__PURE__ */ jsxs9("span", { className: "ph-checkbox-wrap", children: [
819
- /* @__PURE__ */ jsx10(
1624
+ return /* @__PURE__ */ jsxs12("div", { className: cn("ph-control-row", wrapperClassName), children: [
1625
+ /* @__PURE__ */ jsxs12("span", { className: "ph-checkbox-wrap", children: [
1626
+ /* @__PURE__ */ jsx15(
820
1627
  "input",
821
1628
  __spreadValues({
822
1629
  ref,
@@ -834,17 +1641,17 @@ var Checkbox = forwardRef5(function Checkbox2(_a, ref) {
834
1641
  )
835
1642
  }, props)
836
1643
  ),
837
- /* @__PURE__ */ jsx10(IconCheck, { className: "ph-checkbox-icon", "aria-hidden": true })
1644
+ /* @__PURE__ */ jsx15(IconCheck, { className: "ph-checkbox-icon", "aria-hidden": true })
838
1645
  ] }),
839
- /* @__PURE__ */ jsxs9("div", { className: "ph-control-copy", children: [
840
- /* @__PURE__ */ jsx10("label", { htmlFor: id, className: cn("cursor-pointer", disabled && "opacity-60"), children: label }),
841
- descriptionId ? /* @__PURE__ */ jsx10("p", { id: descriptionId, className: "text-xs text-ph-subtle", children: helperText }) : null,
842
- errorId ? /* @__PURE__ */ jsx10("p", { id: errorId, className: "text-xs font-medium text-ph-danger", children: error }) : null
1646
+ /* @__PURE__ */ jsxs12("div", { className: "ph-control-copy", children: [
1647
+ /* @__PURE__ */ jsx15("label", { htmlFor: id, className: cn("cursor-pointer", disabled && "opacity-60"), children: label }),
1648
+ descriptionId ? /* @__PURE__ */ jsx15("p", { id: descriptionId, className: "text-xs text-ph-subtle", children: helperText }) : null,
1649
+ errorId ? /* @__PURE__ */ jsx15("p", { id: errorId, className: "text-xs font-medium text-ph-danger", children: error }) : null
843
1650
  ] })
844
1651
  ] });
845
1652
  });
846
1653
  Checkbox.displayName = "Checkbox";
847
- var Radio = forwardRef5(function Radio2(_a, ref) {
1654
+ var Radio = forwardRef8(function Radio2(_a, ref) {
848
1655
  var _b = _a, {
849
1656
  id: idProp,
850
1657
  label,
@@ -860,8 +1667,8 @@ var Radio = forwardRef5(function Radio2(_a, ref) {
860
1667
  ]);
861
1668
  const autoId = useId3();
862
1669
  const id = idProp != null ? idProp : autoId;
863
- return /* @__PURE__ */ jsxs9("div", { className: cn("ph-control-row", wrapperClassName, disabled && "opacity-60"), children: [
864
- /* @__PURE__ */ jsx10(
1670
+ return /* @__PURE__ */ jsxs12("div", { className: cn("ph-control-row", wrapperClassName, disabled && "opacity-60"), children: [
1671
+ /* @__PURE__ */ jsx15(
865
1672
  "input",
866
1673
  __spreadValues({
867
1674
  ref,
@@ -871,11 +1678,11 @@ var Radio = forwardRef5(function Radio2(_a, ref) {
871
1678
  className: cn("ph-radio", disabled && "cursor-not-allowed", className)
872
1679
  }, props)
873
1680
  ),
874
- /* @__PURE__ */ jsx10("label", { htmlFor: id, className: cn("cursor-pointer", disabled && "opacity-60"), children: label })
1681
+ /* @__PURE__ */ jsx15("label", { htmlFor: id, className: cn("cursor-pointer", disabled && "opacity-60"), children: label })
875
1682
  ] });
876
1683
  });
877
1684
  Radio.displayName = "Radio";
878
- var Toggle = forwardRef5(function Toggle2(_a, ref) {
1685
+ var Toggle = forwardRef8(function Toggle2(_a, ref) {
879
1686
  var _b = _a, {
880
1687
  id: idProp,
881
1688
  label,
@@ -891,9 +1698,9 @@ var Toggle = forwardRef5(function Toggle2(_a, ref) {
891
1698
  ]);
892
1699
  const autoId = useId3();
893
1700
  const id = idProp != null ? idProp : autoId;
894
- return /* @__PURE__ */ jsxs9("label", { className: cn("ph-control-row-between", wrapperClassName, disabled && "opacity-60"), children: [
895
- /* @__PURE__ */ jsx10("span", { className: disabled ? "opacity-60" : void 0, children: label }),
896
- /* @__PURE__ */ jsx10(
1701
+ return /* @__PURE__ */ jsxs12("label", { className: cn("ph-control-row-between", wrapperClassName, disabled && "opacity-60"), children: [
1702
+ /* @__PURE__ */ jsx15("span", { className: disabled ? "opacity-60" : void 0, children: label }),
1703
+ /* @__PURE__ */ jsx15(
897
1704
  "input",
898
1705
  __spreadValues({
899
1706
  ref,
@@ -907,7 +1714,7 @@ var Toggle = forwardRef5(function Toggle2(_a, ref) {
907
1714
  ] });
908
1715
  });
909
1716
  Toggle.displayName = "Toggle";
910
- var Range = forwardRef5(function Range2(_a, ref) {
1717
+ var Range = forwardRef8(function Range2(_a, ref) {
911
1718
  var _b = _a, {
912
1719
  id: idProp,
913
1720
  label,
@@ -927,18 +1734,18 @@ var Range = forwardRef5(function Range2(_a, ref) {
927
1734
  ]);
928
1735
  const autoId = useId3();
929
1736
  const id = idProp != null ? idProp : autoId;
930
- return /* @__PURE__ */ jsxs9("div", { className: cn("ph-field", wrapperClassName), children: [
931
- label && /* @__PURE__ */ jsx10("label", { htmlFor: id, className: "ph-label", children: label }),
932
- /* @__PURE__ */ jsx10("input", __spreadValues({ ref, id, type: "range", className: cn("ph-range", className) }, props)),
933
- (minLabel || valueLabel || maxLabel) && /* @__PURE__ */ jsxs9("div", { className: "flex justify-between text-xs text-ph-mutedtext", children: [
934
- /* @__PURE__ */ jsx10("span", { children: minLabel }),
935
- /* @__PURE__ */ jsx10("span", { children: valueLabel }),
936
- /* @__PURE__ */ jsx10("span", { children: maxLabel })
1737
+ return /* @__PURE__ */ jsxs12("div", { className: cn("ph-field", wrapperClassName), children: [
1738
+ label && /* @__PURE__ */ jsx15("label", { htmlFor: id, className: "ph-label", children: label }),
1739
+ /* @__PURE__ */ jsx15("input", __spreadValues({ ref, id, type: "range", className: cn("ph-range", className) }, props)),
1740
+ (minLabel || valueLabel || maxLabel) && /* @__PURE__ */ jsxs12("div", { className: "flex justify-between text-xs text-ph-mutedtext", children: [
1741
+ /* @__PURE__ */ jsx15("span", { children: minLabel }),
1742
+ /* @__PURE__ */ jsx15("span", { children: valueLabel }),
1743
+ /* @__PURE__ */ jsx15("span", { children: maxLabel })
937
1744
  ] })
938
1745
  ] });
939
1746
  });
940
1747
  Range.displayName = "Range";
941
- var FileUpload = forwardRef5(function FileUpload2(_a, ref) {
1748
+ var FileUpload = forwardRef8(function FileUpload2(_a, ref) {
942
1749
  var _b = _a, {
943
1750
  id: idProp,
944
1751
  label,
@@ -954,10 +1761,10 @@ var FileUpload = forwardRef5(function FileUpload2(_a, ref) {
954
1761
  ]);
955
1762
  const autoId = useId3();
956
1763
  const id = idProp != null ? idProp : autoId;
957
- return /* @__PURE__ */ jsxs9("div", { className: cn("ph-field", wrapperClassName), children: [
958
- label && /* @__PURE__ */ jsx10("label", { htmlFor: id, className: "ph-label", children: label }),
959
- /* @__PURE__ */ jsxs9("label", { htmlFor: id, className: "ph-file-upload", children: [
960
- /* @__PURE__ */ jsx10("input", __spreadValues({ ref, id, type: "file", className: cn("sr-only", className) }, props)),
1764
+ return /* @__PURE__ */ jsxs12("div", { className: cn("ph-field", wrapperClassName), children: [
1765
+ label && /* @__PURE__ */ jsx15("label", { htmlFor: id, className: "ph-label", children: label }),
1766
+ /* @__PURE__ */ jsxs12("label", { htmlFor: id, className: "ph-file-upload", children: [
1767
+ /* @__PURE__ */ jsx15("input", __spreadValues({ ref, id, type: "file", className: cn("sr-only", className) }, props)),
961
1768
  prompt
962
1769
  ] })
963
1770
  ] });
@@ -967,7 +1774,7 @@ FileUpload.displayName = "FileUpload";
967
1774
  // src/components/ui/Modal.tsx
968
1775
  import * as Dialog from "@radix-ui/react-dialog";
969
1776
  import { useRef } from "react";
970
- import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1777
+ import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
971
1778
  var sizeMap3 = {
972
1779
  sm: "max-w-sm",
973
1780
  md: "max-w-lg",
@@ -997,15 +1804,15 @@ function Modal({
997
1804
  }) {
998
1805
  const canDismiss = Boolean(onClose);
999
1806
  const restoreFocusRef = useRef(null);
1000
- return /* @__PURE__ */ jsx11(
1807
+ return /* @__PURE__ */ jsx16(
1001
1808
  Dialog.Root,
1002
1809
  {
1003
1810
  open,
1004
1811
  onOpenChange: (nextOpen) => {
1005
1812
  if (!nextOpen) onClose == null ? void 0 : onClose();
1006
1813
  },
1007
- children: /* @__PURE__ */ jsxs10(Dialog.Portal, { children: [
1008
- /* @__PURE__ */ jsx11(
1814
+ children: /* @__PURE__ */ jsxs13(Dialog.Portal, { children: [
1815
+ /* @__PURE__ */ jsx16(
1009
1816
  Dialog.Overlay,
1010
1817
  {
1011
1818
  "data-test": dataTest,
@@ -1013,7 +1820,7 @@ function Modal({
1013
1820
  style: zIndex ? { zIndex } : void 0
1014
1821
  }
1015
1822
  ),
1016
- /* @__PURE__ */ jsx11(
1823
+ /* @__PURE__ */ jsx16(
1017
1824
  Dialog.Content,
1018
1825
  __spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({
1019
1826
  id,
@@ -1036,28 +1843,28 @@ function Modal({
1036
1843
  onPointerDownOutside: (event) => {
1037
1844
  if (!canDismiss || !closeOnOutsideClick) event.preventDefault();
1038
1845
  },
1039
- children: customLayout ? /* @__PURE__ */ jsxs10(Fragment2, { children: [
1040
- /* @__PURE__ */ jsx11(Dialog.Title, { className: "sr-only", children: ariaLabel != null ? ariaLabel : "Dialog" }),
1846
+ children: customLayout ? /* @__PURE__ */ jsxs13(Fragment3, { children: [
1847
+ /* @__PURE__ */ jsx16(Dialog.Title, { className: "sr-only", children: ariaLabel != null ? ariaLabel : "Dialog" }),
1041
1848
  children
1042
- ] }) : /* @__PURE__ */ jsxs10(Fragment2, { children: [
1043
- title ? null : /* @__PURE__ */ jsx11(Dialog.Title, { className: "sr-only", children: ariaLabel != null ? ariaLabel : "Dialog" }),
1044
- title || description || showCloseButton && canDismiss ? /* @__PURE__ */ jsxs10("header", { className: "ph-modal-header", children: [
1045
- /* @__PURE__ */ jsxs10("div", { className: "min-w-0", children: [
1046
- title ? /* @__PURE__ */ jsx11(Dialog.Title, { className: "text-lg font-bold text-ph-ink", children: title }) : null,
1047
- description ? /* @__PURE__ */ jsx11(Dialog.Description, { className: "mt-1 text-sm text-ph-subtle", children: description }) : null
1849
+ ] }) : /* @__PURE__ */ jsxs13(Fragment3, { children: [
1850
+ title ? null : /* @__PURE__ */ jsx16(Dialog.Title, { className: "sr-only", children: ariaLabel != null ? ariaLabel : "Dialog" }),
1851
+ title || description || showCloseButton && canDismiss ? /* @__PURE__ */ jsxs13("header", { className: "ph-modal-header", children: [
1852
+ /* @__PURE__ */ jsxs13("div", { className: "min-w-0", children: [
1853
+ title ? /* @__PURE__ */ jsx16(Dialog.Title, { className: "text-lg font-bold text-ph-ink", children: title }) : null,
1854
+ description ? /* @__PURE__ */ jsx16(Dialog.Description, { className: "mt-1 text-sm text-ph-subtle", children: description }) : null
1048
1855
  ] }),
1049
- showCloseButton && canDismiss ? /* @__PURE__ */ jsx11(Dialog.Close, { asChild: true, children: /* @__PURE__ */ jsx11(
1856
+ showCloseButton && canDismiss ? /* @__PURE__ */ jsx16(Dialog.Close, { asChild: true, children: /* @__PURE__ */ jsx16(
1050
1857
  "button",
1051
1858
  {
1052
1859
  type: "button",
1053
1860
  className: "ph-modal-close",
1054
1861
  "aria-label": "Close dialog",
1055
- children: /* @__PURE__ */ jsx11(IconClose, { className: "h-5 w-5", "aria-hidden": true })
1862
+ children: /* @__PURE__ */ jsx16(IconClose, { className: "h-5 w-5", "aria-hidden": true })
1056
1863
  }
1057
1864
  ) }) : null
1058
1865
  ] }) : null,
1059
- /* @__PURE__ */ jsx11("div", { className: "ph-modal-body", children }),
1060
- footer ? /* @__PURE__ */ jsx11("div", { className: "ph-modal-footer", children: footer }) : null
1866
+ /* @__PURE__ */ jsx16("div", { className: "ph-modal-body", children }),
1867
+ footer ? /* @__PURE__ */ jsx16("div", { className: "ph-modal-footer", children: footer }) : null
1061
1868
  ] })
1062
1869
  })
1063
1870
  )
@@ -1067,19 +1874,19 @@ function Modal({
1067
1874
  }
1068
1875
 
1069
1876
  // src/components/ui/Panel.tsx
1070
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1877
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1071
1878
  function Panel(_a) {
1072
1879
  var _b = _a, { title, description, children, className } = _b, props = __objRest(_b, ["title", "description", "children", "className"]);
1073
- return /* @__PURE__ */ jsxs11("div", __spreadProps(__spreadValues({ className: cn("ph-panel", className) }, props), { children: [
1074
- title && /* @__PURE__ */ jsx12("h3", { className: "text-sm font-semibold uppercase tracking-wider text-ph-mutedtext", children: title }),
1075
- description && /* @__PURE__ */ jsx12("p", { className: "text-sm text-ph-subtle", children: description }),
1880
+ return /* @__PURE__ */ jsxs14("div", __spreadProps(__spreadValues({ className: cn("ph-panel", className) }, props), { children: [
1881
+ title && /* @__PURE__ */ jsx17("h3", { className: "text-sm font-semibold uppercase tracking-wider text-ph-mutedtext", children: title }),
1882
+ description && /* @__PURE__ */ jsx17("p", { className: "text-sm text-ph-subtle", children: description }),
1076
1883
  children
1077
1884
  ] }));
1078
1885
  }
1079
1886
 
1080
1887
  // src/components/ui/SearchInput.tsx
1081
1888
  import { useId as useId4 } from "react";
1082
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1889
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1083
1890
  function SearchInput(_a) {
1084
1891
  var _b = _a, {
1085
1892
  id: idProp,
@@ -1102,10 +1909,10 @@ function SearchInput(_a) {
1102
1909
  ]);
1103
1910
  const autoId = useId4();
1104
1911
  const id = idProp != null ? idProp : autoId;
1105
- return /* @__PURE__ */ jsxs12("div", { className: cn("relative", wrapperClassName), children: [
1106
- /* @__PURE__ */ jsx13("label", { htmlFor: id, className: hideLabel ? "sr-only" : "ph-label mb-1.5 block", children: label }),
1107
- /* @__PURE__ */ jsxs12("div", { className: "relative", children: [
1108
- shortcut != null ? /* @__PURE__ */ jsx13(
1912
+ return /* @__PURE__ */ jsxs15("div", { className: cn("relative", wrapperClassName), children: [
1913
+ /* @__PURE__ */ jsx18("label", { htmlFor: id, className: hideLabel ? "sr-only" : "ph-label mb-1.5 block", children: label }),
1914
+ /* @__PURE__ */ jsxs15("div", { className: "relative", children: [
1915
+ shortcut != null ? /* @__PURE__ */ jsx18(
1109
1916
  "span",
1110
1917
  {
1111
1918
  className: "ph-shortcut pointer-events-none absolute left-3 top-1/2 z-10 -translate-y-1/2 text-xs",
@@ -1113,7 +1920,7 @@ function SearchInput(_a) {
1113
1920
  children: shortcut
1114
1921
  }
1115
1922
  ) : null,
1116
- /* @__PURE__ */ jsx13(
1923
+ /* @__PURE__ */ jsx18(
1117
1924
  "input",
1118
1925
  __spreadValues({
1119
1926
  id,
@@ -1149,10 +1956,10 @@ function SearchGroup(_a) {
1149
1956
  ]);
1150
1957
  const autoId = useId4();
1151
1958
  const id = idProp != null ? idProp : autoId;
1152
- return /* @__PURE__ */ jsxs12("div", { className: cn("ph-field", wrapperClassName), children: [
1153
- /* @__PURE__ */ jsx13("label", { htmlFor: id, className: "ph-label", children: label }),
1154
- /* @__PURE__ */ jsxs12("div", { className: "ph-search-group flex w-full max-w-lg min-h-[2.3125rem] items-stretch divide-x divide-ph-border", children: [
1155
- /* @__PURE__ */ jsx13(
1959
+ return /* @__PURE__ */ jsxs15("div", { className: cn("ph-field", wrapperClassName), children: [
1960
+ /* @__PURE__ */ jsx18("label", { htmlFor: id, className: "ph-label", children: label }),
1961
+ /* @__PURE__ */ jsxs15("div", { className: "ph-search-group flex w-full max-w-lg min-h-[2.3125rem] items-stretch divide-x divide-ph-border", children: [
1962
+ /* @__PURE__ */ jsx18(
1156
1963
  "input",
1157
1964
  __spreadValues({
1158
1965
  id,
@@ -1161,12 +1968,12 @@ function SearchGroup(_a) {
1161
1968
  className: cn("ph-input ph-input-group-field min-w-0 flex-1", className)
1162
1969
  }, props)
1163
1970
  ),
1164
- /* @__PURE__ */ jsx13(
1971
+ /* @__PURE__ */ jsx18(
1165
1972
  Button,
1166
1973
  {
1167
1974
  type: "submit",
1168
1975
  variant: "primary",
1169
- icon: /* @__PURE__ */ jsx13(IconSearch, { className: "h-4 w-4", "aria-hidden": true }),
1976
+ icon: /* @__PURE__ */ jsx18(IconSearch, { className: "h-4 w-4", "aria-hidden": true }),
1170
1977
  className: "ph-search-group__submit",
1171
1978
  "aria-label": submitLabel
1172
1979
  }
@@ -1176,7 +1983,7 @@ function SearchGroup(_a) {
1176
1983
  }
1177
1984
 
1178
1985
  // src/components/ui/Table.tsx
1179
- import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
1986
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1180
1987
  function Table({
1181
1988
  data,
1182
1989
  columns,
@@ -1187,15 +1994,15 @@ function Table({
1187
1994
  className,
1188
1995
  caption
1189
1996
  }) {
1190
- return /* @__PURE__ */ jsx14("div", { className: cn("ph-table-wrap", compact && "ph-table-compact", className), children: /* @__PURE__ */ jsxs13("table", { className: cn("ph-table", zebra && "ph-table-zebra", ribbon && "ph-table--ribbon"), children: [
1191
- caption && /* @__PURE__ */ jsx14("caption", { className: "sr-only", children: caption }),
1192
- /* @__PURE__ */ jsx14("thead", { children: /* @__PURE__ */ jsx14("tr", { children: columns.map((col) => /* @__PURE__ */ jsx14("th", { className: col.className, children: col.header }, col.key)) }) }),
1193
- /* @__PURE__ */ jsx14("tbody", { children: data.map((row, i) => /* @__PURE__ */ jsx14("tr", { style: getRowStyle == null ? void 0 : getRowStyle(row), children: columns.map((col) => /* @__PURE__ */ jsx14("td", { className: col.className, children: col.cell(row) }, col.key)) }, i)) })
1997
+ return /* @__PURE__ */ jsx19("div", { className: cn("ph-table-wrap", compact && "ph-table-compact", className), children: /* @__PURE__ */ jsxs16("table", { className: cn("ph-table", zebra && "ph-table-zebra", ribbon && "ph-table--ribbon"), children: [
1998
+ caption && /* @__PURE__ */ jsx19("caption", { className: "sr-only", children: caption }),
1999
+ /* @__PURE__ */ jsx19("thead", { children: /* @__PURE__ */ jsx19("tr", { children: columns.map((col) => /* @__PURE__ */ jsx19("th", { className: col.className, children: col.header }, col.key)) }) }),
2000
+ /* @__PURE__ */ jsx19("tbody", { children: data.map((row, i) => /* @__PURE__ */ jsx19("tr", { style: getRowStyle == null ? void 0 : getRowStyle(row), children: columns.map((col) => /* @__PURE__ */ jsx19("td", { className: col.className, children: col.cell(row) }, col.key)) }, i)) })
1194
2001
  ] }) });
1195
2002
  }
1196
2003
 
1197
2004
  // src/components/ui/Stat.tsx
1198
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
2005
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
1199
2006
  var toneMap = {
1200
2007
  default: "text-ph-ink",
1201
2008
  brand: "text-ph-brand",
@@ -1212,11 +2019,11 @@ var statMap = {
1212
2019
  };
1213
2020
  function Stat(_a) {
1214
2021
  var _b = _a, { icon, label, value, footer, tone = "default", className } = _b, props = __objRest(_b, ["icon", "label", "value", "footer", "tone", "className"]);
1215
- return /* @__PURE__ */ jsxs14("article", __spreadProps(__spreadValues({ className: cn("ph-stat", statMap[tone], className) }, props), { children: [
1216
- icon && /* @__PURE__ */ jsx15("div", { className: cn("mb-2 h-7 w-7", toneMap[tone]), children: icon }),
1217
- /* @__PURE__ */ jsx15("div", { className: cn("ph-stat-label", tone === "warning" && toneMap[tone]), children: label }),
1218
- /* @__PURE__ */ jsx15("div", { className: cn("ph-stat-val", toneMap[tone]), children: value }),
1219
- footer && /* @__PURE__ */ jsx15("p", { className: "text-xs text-ph-subtle", children: footer })
2022
+ return /* @__PURE__ */ jsxs17("article", __spreadProps(__spreadValues({ className: cn("ph-stat", statMap[tone], className) }, props), { children: [
2023
+ icon && /* @__PURE__ */ jsx20("div", { className: cn("mb-2 h-7 w-7", toneMap[tone]), children: icon }),
2024
+ /* @__PURE__ */ jsx20("div", { className: cn("ph-stat-label", tone === "warning" && toneMap[tone]), children: label }),
2025
+ /* @__PURE__ */ jsx20("div", { className: cn("ph-stat-val", toneMap[tone]), children: value }),
2026
+ footer && /* @__PURE__ */ jsx20("p", { className: "text-xs text-ph-subtle", children: footer })
1220
2027
  ] }));
1221
2028
  }
1222
2029
 
@@ -1367,7 +2174,7 @@ function ThemeDomSync() {
1367
2174
 
1368
2175
  // src/components/ui/ThemeSwitcher.tsx
1369
2176
  import { useEffect, useState } from "react";
1370
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
2177
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
1371
2178
  function ThemeSwitcher({ className }) {
1372
2179
  const [themeId, setThemeId] = useState(DEFAULT_THEME_ID);
1373
2180
  useEffect(() => {
@@ -1375,9 +2182,9 @@ function ThemeSwitcher({ className }) {
1375
2182
  persistTheme(id);
1376
2183
  setThemeId(id);
1377
2184
  }, []);
1378
- return /* @__PURE__ */ jsxs15("label", { className: cn("flex min-w-0 items-center gap-2", className), children: [
1379
- /* @__PURE__ */ jsx16("span", { className: "shrink-0 text-xs font-medium text-ph-mutedtext sm:text-sm", children: "Theme" }),
1380
- /* @__PURE__ */ jsx16(
2185
+ return /* @__PURE__ */ jsxs18("label", { className: cn("flex min-w-0 items-center gap-2", className), children: [
2186
+ /* @__PURE__ */ jsx21("span", { className: "shrink-0 text-xs font-medium text-ph-mutedtext sm:text-sm", children: "Theme" }),
2187
+ /* @__PURE__ */ jsx21(
1381
2188
  "select",
1382
2189
  {
1383
2190
  className: "ph-select max-w-[11rem] !min-h-[2rem] py-1 pl-2.5 pr-8 text-xs sm:max-w-[14rem] sm:text-sm",
@@ -1388,7 +2195,7 @@ function ThemeSwitcher({ className }) {
1388
2195
  persistTheme(next);
1389
2196
  setThemeId(next);
1390
2197
  },
1391
- children: THEME_GROUPS.map((group) => /* @__PURE__ */ jsx16("optgroup", { label: group, children: THEMES.filter((theme) => theme.group === group).map((theme) => /* @__PURE__ */ jsx16("option", { value: theme.id, children: theme.name }, theme.id)) }, group))
2198
+ children: THEME_GROUPS.map((group) => /* @__PURE__ */ jsx21("optgroup", { label: group, children: THEMES.filter((theme) => theme.group === group).map((theme) => /* @__PURE__ */ jsx21("option", { value: theme.id, children: theme.name }, theme.id)) }, group))
1392
2199
  }
1393
2200
  )
1394
2201
  ] });
@@ -1396,7 +2203,7 @@ function ThemeSwitcher({ className }) {
1396
2203
 
1397
2204
  // src/components/ui/Accordion.tsx
1398
2205
  import { useState as useState2 } from "react";
1399
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
2206
+ import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
1400
2207
  function Accordion({
1401
2208
  items,
1402
2209
  allowMultiple = false,
@@ -1418,18 +2225,18 @@ function Accordion({
1418
2225
  return next;
1419
2226
  });
1420
2227
  };
1421
- return /* @__PURE__ */ jsx17("div", { className: cn("divide-y divide-ph-border rounded-xl border border-ph-border bg-ph-surface", className), children: items.map((item) => {
2228
+ return /* @__PURE__ */ jsx22("div", { className: cn("divide-y divide-ph-border rounded-xl border border-ph-border bg-ph-surface", className), children: items.map((item) => {
1422
2229
  const isOpen = openItems.has(item.id);
1423
- return /* @__PURE__ */ jsxs16("div", { className: "first:rounded-t-xl last:rounded-b-xl", children: [
1424
- /* @__PURE__ */ jsxs16(
2230
+ return /* @__PURE__ */ jsxs19("div", { className: "first:rounded-t-xl last:rounded-b-xl", children: [
2231
+ /* @__PURE__ */ jsxs19(
1425
2232
  "button",
1426
2233
  {
1427
2234
  type: "button",
1428
2235
  onClick: () => toggleItem(item.id),
1429
2236
  className: "flex w-full items-center justify-between px-5 py-4 text-left transition hover:bg-ph-muted",
1430
2237
  children: [
1431
- /* @__PURE__ */ jsx17("span", { className: "font-semibold text-ph-ink", children: item.title }),
1432
- /* @__PURE__ */ jsx17(
2238
+ /* @__PURE__ */ jsx22("span", { className: "font-semibold text-ph-ink", children: item.title }),
2239
+ /* @__PURE__ */ jsx22(
1433
2240
  IconChevronDown,
1434
2241
  {
1435
2242
  className: cn(
@@ -1441,14 +2248,14 @@ function Accordion({
1441
2248
  ]
1442
2249
  }
1443
2250
  ),
1444
- /* @__PURE__ */ jsx17(
2251
+ /* @__PURE__ */ jsx22(
1445
2252
  "div",
1446
2253
  {
1447
2254
  className: cn(
1448
2255
  "grid transition-all duration-200",
1449
2256
  isOpen ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
1450
2257
  ),
1451
- children: /* @__PURE__ */ jsx17("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx17("div", { className: "px-5 pb-4 text-ph-subtle", children: item.content }) })
2258
+ children: /* @__PURE__ */ jsx22("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx22("div", { className: "px-5 pb-4 text-ph-subtle", children: item.content }) })
1452
2259
  }
1453
2260
  )
1454
2261
  ] }, item.id);
@@ -1456,16 +2263,16 @@ function Accordion({
1456
2263
  }
1457
2264
 
1458
2265
  // src/components/ui/SegmentedControl.tsx
1459
- import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
2266
+ import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
1460
2267
  function SegmentedControl({ options, value, onChange, className }) {
1461
- return /* @__PURE__ */ jsx18(
2268
+ return /* @__PURE__ */ jsx23(
1462
2269
  "div",
1463
2270
  {
1464
2271
  className: cn(
1465
2272
  "inline-flex rounded-lg bg-ph-muted p-1",
1466
2273
  className
1467
2274
  ),
1468
- children: options.map((option) => /* @__PURE__ */ jsxs17(
2275
+ children: options.map((option) => /* @__PURE__ */ jsxs20(
1469
2276
  "button",
1470
2277
  {
1471
2278
  type: "button",
@@ -1476,7 +2283,7 @@ function SegmentedControl({ options, value, onChange, className }) {
1476
2283
  value === option.value ? "bg-ph-surface text-ph-ink shadow-ph" : "text-ph-subtle hover:text-ph-ink"
1477
2284
  ),
1478
2285
  children: [
1479
- option.icon && /* @__PURE__ */ jsx18("span", { className: "h-4 w-4", children: option.icon }),
2286
+ option.icon && /* @__PURE__ */ jsx23("span", { className: "h-4 w-4", children: option.icon }),
1480
2287
  option.label
1481
2288
  ]
1482
2289
  },
@@ -1488,7 +2295,7 @@ function SegmentedControl({ options, value, onChange, className }) {
1488
2295
 
1489
2296
  // src/components/ui/CommandPalette.tsx
1490
2297
  import { useState as useState3, useEffect as useEffect2, useRef as useRef2 } from "react";
1491
- import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
2298
+ import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
1492
2299
  function CommandPalette({
1493
2300
  items,
1494
2301
  isOpen,
@@ -1565,7 +2372,7 @@ function CommandPalette({
1565
2372
  return () => window.removeEventListener("keydown", handleKeyDown);
1566
2373
  }, [isOpen, filtered, selectedIndex, onClose]);
1567
2374
  if (!isOpen) return null;
1568
- return /* @__PURE__ */ jsx19(
2375
+ return /* @__PURE__ */ jsx24(
1569
2376
  "div",
1570
2377
  {
1571
2378
  id,
@@ -1574,7 +2381,7 @@ function CommandPalette({
1574
2381
  onMouseDown: (event) => {
1575
2382
  if (event.target === event.currentTarget) onClose();
1576
2383
  },
1577
- children: /* @__PURE__ */ jsxs18(
2384
+ children: /* @__PURE__ */ jsxs21(
1578
2385
  "div",
1579
2386
  {
1580
2387
  ref: panelRef,
@@ -1586,9 +2393,9 @@ function CommandPalette({
1586
2393
  className
1587
2394
  ),
1588
2395
  children: [
1589
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3 border-b border-ph-border px-4 py-3", children: [
1590
- /* @__PURE__ */ jsx19(IconSearch, { className: "h-5 w-5 text-ph-mutedtext" }),
1591
- /* @__PURE__ */ jsx19(
2396
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-3 border-b border-ph-border px-4 py-3", children: [
2397
+ /* @__PURE__ */ jsx24(IconSearch, { className: "h-5 w-5 text-ph-mutedtext" }),
2398
+ /* @__PURE__ */ jsx24(
1592
2399
  "input",
1593
2400
  {
1594
2401
  ref: inputRef,
@@ -1605,9 +2412,9 @@ function CommandPalette({
1605
2412
  className: "flex-1 bg-transparent text-ph-ink outline-none placeholder:text-ph-mutedtext"
1606
2413
  }
1607
2414
  ),
1608
- /* @__PURE__ */ jsx19("kbd", { className: "rounded border border-ph-border bg-ph-muted px-1.5 py-0.5 text-xs text-ph-mutedtext", children: "ESC" })
2415
+ /* @__PURE__ */ jsx24("kbd", { className: "rounded border border-ph-border bg-ph-muted px-1.5 py-0.5 text-xs text-ph-mutedtext", children: "ESC" })
1609
2416
  ] }),
1610
- /* @__PURE__ */ jsx19("div", { className: "max-h-[50vh] overflow-y-auto py-2", children: filtered.length === 0 ? /* @__PURE__ */ jsx19("div", { className: "px-4 py-8 text-center text-sm text-ph-mutedtext", children: "No results found." }) : filtered.map((item, index) => /* @__PURE__ */ jsxs18(
2417
+ /* @__PURE__ */ jsx24("div", { className: "max-h-[50vh] overflow-y-auto py-2", children: filtered.length === 0 ? /* @__PURE__ */ jsx24("div", { className: "px-4 py-8 text-center text-sm text-ph-mutedtext", children: "No results found." }) : filtered.map((item, index) => /* @__PURE__ */ jsxs21(
1611
2418
  "button",
1612
2419
  {
1613
2420
  type: "button",
@@ -1623,9 +2430,9 @@ function CommandPalette({
1623
2430
  index === selectedIndex ? "bg-ph-muted text-ph-ink" : "text-ph-subtle"
1624
2431
  ),
1625
2432
  children: [
1626
- item.icon && /* @__PURE__ */ jsx19("span", { className: "h-5 w-5", children: item.icon }),
1627
- /* @__PURE__ */ jsx19("span", { className: "flex-1", children: item.label }),
1628
- item.shortcut && /* @__PURE__ */ jsx19("kbd", { className: "rounded border border-ph-border bg-ph-surface px-1.5 py-0.5 text-xs text-ph-mutedtext", children: item.shortcut })
2433
+ item.icon && /* @__PURE__ */ jsx24("span", { className: "h-5 w-5", children: item.icon }),
2434
+ /* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
2435
+ item.shortcut && /* @__PURE__ */ jsx24("kbd", { className: "rounded border border-ph-border bg-ph-surface px-1.5 py-0.5 text-xs text-ph-mutedtext", children: item.shortcut })
1629
2436
  ]
1630
2437
  },
1631
2438
  item.id
@@ -1639,7 +2446,7 @@ function CommandPalette({
1639
2446
 
1640
2447
  // src/components/ui/Calendar.tsx
1641
2448
  import { useState as useState4 } from "react";
1642
- import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
2449
+ import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
1643
2450
  function Calendar({ value, onChange, className }) {
1644
2451
  const [currentMonth, setCurrentMonth] = useState4(value || /* @__PURE__ */ new Date());
1645
2452
  const today = /* @__PURE__ */ new Date();
@@ -1681,37 +2488,37 @@ function Calendar({ value, onChange, className }) {
1681
2488
  for (let i = 1; i <= daysInMonth; i++) {
1682
2489
  days.push(i);
1683
2490
  }
1684
- return /* @__PURE__ */ jsxs19("div", { className: cn("w-[280px] rounded-xl border border-ph-border bg-ph-surface p-4 shadow-ph", className), children: [
1685
- /* @__PURE__ */ jsxs19("div", { className: "mb-4 flex items-center justify-between", children: [
1686
- /* @__PURE__ */ jsx20(
2491
+ return /* @__PURE__ */ jsxs22("div", { className: cn("w-[280px] rounded-xl border border-ph-border bg-ph-surface p-4 shadow-ph", className), children: [
2492
+ /* @__PURE__ */ jsxs22("div", { className: "mb-4 flex items-center justify-between", children: [
2493
+ /* @__PURE__ */ jsx25(
1687
2494
  "button",
1688
2495
  {
1689
2496
  type: "button",
1690
2497
  onClick: prevMonth,
1691
2498
  "aria-label": "Previous month",
1692
2499
  className: "rounded-lg p-1 text-ph-subtle transition hover:bg-ph-muted hover:text-ph-ink",
1693
- children: /* @__PURE__ */ jsx20(IconChevronLeft, { className: "h-5 w-5", "aria-hidden": true })
2500
+ children: /* @__PURE__ */ jsx25(IconChevronLeft, { className: "h-5 w-5", "aria-hidden": true })
1694
2501
  }
1695
2502
  ),
1696
- /* @__PURE__ */ jsxs19("span", { className: "text-sm font-semibold text-ph-ink", children: [
2503
+ /* @__PURE__ */ jsxs22("span", { className: "text-sm font-semibold text-ph-ink", children: [
1697
2504
  monthNames[month],
1698
2505
  " ",
1699
2506
  year
1700
2507
  ] }),
1701
- /* @__PURE__ */ jsx20(
2508
+ /* @__PURE__ */ jsx25(
1702
2509
  "button",
1703
2510
  {
1704
2511
  type: "button",
1705
2512
  onClick: nextMonth,
1706
2513
  "aria-label": "Next month",
1707
2514
  className: "rounded-lg p-1 text-ph-subtle transition hover:bg-ph-muted hover:text-ph-ink",
1708
- children: /* @__PURE__ */ jsx20(IconChevronRight, { className: "h-5 w-5", "aria-hidden": true })
2515
+ children: /* @__PURE__ */ jsx25(IconChevronRight, { className: "h-5 w-5", "aria-hidden": true })
1709
2516
  }
1710
2517
  )
1711
2518
  ] }),
1712
- /* @__PURE__ */ jsxs19("div", { className: "grid grid-cols-7 gap-1", children: [
1713
- weekDays.map((day) => /* @__PURE__ */ jsx20("div", { className: "py-1 text-center text-xs font-medium text-ph-mutedtext", children: day }, day)),
1714
- days.map((day, index) => /* @__PURE__ */ jsx20("div", { className: "aspect-square", children: day && /* @__PURE__ */ jsx20(
2519
+ /* @__PURE__ */ jsxs22("div", { className: "grid grid-cols-7 gap-1", children: [
2520
+ weekDays.map((day) => /* @__PURE__ */ jsx25("div", { className: "py-1 text-center text-xs font-medium text-ph-mutedtext", children: day }, day)),
2521
+ days.map((day, index) => /* @__PURE__ */ jsx25("div", { className: "aspect-square", children: day && /* @__PURE__ */ jsx25(
1715
2522
  "button",
1716
2523
  {
1717
2524
  type: "button",
@@ -1727,10 +2534,159 @@ function Calendar({ value, onChange, className }) {
1727
2534
  ] });
1728
2535
  }
1729
2536
 
2537
+ // src/components/ui/Tooltip.tsx
2538
+ import {
2539
+ cloneElement,
2540
+ createContext,
2541
+ useContext,
2542
+ useEffect as useEffect3,
2543
+ useId as useId5,
2544
+ useRef as useRef3,
2545
+ useState as useState5
2546
+ } from "react";
2547
+ import { createPortal } from "react-dom";
2548
+ import { Fragment as Fragment4, jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
2549
+ var TooltipDelayContext = createContext(0);
2550
+ function TooltipProvider({
2551
+ children,
2552
+ delayDuration = 0
2553
+ }) {
2554
+ return /* @__PURE__ */ jsx26(TooltipDelayContext.Provider, { value: delayDuration, children });
2555
+ }
2556
+ function tooltipPosition(trigger, side, align, offset) {
2557
+ const horizontal = align === "start" ? trigger.left : align === "end" ? trigger.right : trigger.left + trigger.width / 2;
2558
+ const vertical = align === "start" ? trigger.top : align === "end" ? trigger.bottom : trigger.top + trigger.height / 2;
2559
+ if (side === "top")
2560
+ return {
2561
+ left: horizontal,
2562
+ top: trigger.top - offset,
2563
+ transform: "translate(-50%, -100%)"
2564
+ };
2565
+ if (side === "bottom")
2566
+ return {
2567
+ left: horizontal,
2568
+ top: trigger.bottom + offset,
2569
+ transform: "translate(-50%, 0)"
2570
+ };
2571
+ if (side === "left")
2572
+ return {
2573
+ left: trigger.left - offset,
2574
+ top: vertical,
2575
+ transform: "translate(-100%, -50%)"
2576
+ };
2577
+ return {
2578
+ left: trigger.right + offset,
2579
+ top: vertical,
2580
+ transform: "translate(0, -50%)"
2581
+ };
2582
+ }
2583
+ function Tooltip({
2584
+ content,
2585
+ children,
2586
+ side = "top",
2587
+ align = "center",
2588
+ sideOffset = 7,
2589
+ className,
2590
+ open,
2591
+ defaultOpen = false,
2592
+ onOpenChange,
2593
+ delayDuration
2594
+ }) {
2595
+ const providerDelay = useContext(TooltipDelayContext);
2596
+ const generatedId = useId5().replace(/:/g, "");
2597
+ const triggerRef = useRef3(null);
2598
+ const timerRef = useRef3(null);
2599
+ const [internalOpen, setInternalOpen] = useState5(defaultOpen);
2600
+ const [position, setPosition] = useState5(null);
2601
+ const isOpen = open != null ? open : internalOpen;
2602
+ const triggerId = children.props.id;
2603
+ const tooltipId = triggerId ? `${triggerId}-tooltip` : `ph-tooltip-${generatedId}`;
2604
+ function setOpen(next) {
2605
+ if (open === void 0) setInternalOpen(next);
2606
+ onOpenChange == null ? void 0 : onOpenChange(next);
2607
+ }
2608
+ function clearTimer() {
2609
+ if (timerRef.current) clearTimeout(timerRef.current);
2610
+ timerRef.current = null;
2611
+ }
2612
+ function updatePosition() {
2613
+ if (!triggerRef.current) return;
2614
+ setPosition(
2615
+ tooltipPosition(
2616
+ triggerRef.current.getBoundingClientRect(),
2617
+ side,
2618
+ align,
2619
+ sideOffset
2620
+ )
2621
+ );
2622
+ }
2623
+ function show(immediate) {
2624
+ clearTimer();
2625
+ updatePosition();
2626
+ const delay = immediate ? 0 : delayDuration != null ? delayDuration : providerDelay;
2627
+ if (!delay) setOpen(true);
2628
+ else timerRef.current = setTimeout(() => setOpen(true), delay);
2629
+ }
2630
+ function hide() {
2631
+ clearTimer();
2632
+ setOpen(false);
2633
+ }
2634
+ useEffect3(() => {
2635
+ if (!isOpen) return;
2636
+ const reposition = () => updatePosition();
2637
+ window.addEventListener("resize", reposition);
2638
+ window.addEventListener("scroll", reposition, true);
2639
+ return () => {
2640
+ window.removeEventListener("resize", reposition);
2641
+ window.removeEventListener("scroll", reposition, true);
2642
+ };
2643
+ });
2644
+ useEffect3(() => () => clearTimer(), []);
2645
+ const describedBy = [children.props["aria-describedby"], tooltipId].filter(Boolean).join(" ");
2646
+ const trigger = cloneElement(children, { "aria-describedby": describedBy });
2647
+ return /* @__PURE__ */ jsxs23(Fragment4, { children: [
2648
+ /* @__PURE__ */ jsx26(
2649
+ "span",
2650
+ {
2651
+ ref: triggerRef,
2652
+ className: "inline-flex",
2653
+ onMouseEnter: () => show(false),
2654
+ onMouseLeave: hide,
2655
+ onFocusCapture: () => show(true),
2656
+ onBlurCapture: hide,
2657
+ onKeyDown: (event) => {
2658
+ if (event.key === "Escape") hide();
2659
+ },
2660
+ children: trigger
2661
+ }
2662
+ ),
2663
+ isOpen && position && typeof document !== "undefined" ? createPortal(
2664
+ /* @__PURE__ */ jsx26(
2665
+ "span",
2666
+ {
2667
+ style: __spreadValues({ position: "fixed" }, position),
2668
+ className: "pointer-events-none z-[200]",
2669
+ children: /* @__PURE__ */ jsx26(
2670
+ "span",
2671
+ {
2672
+ id: tooltipId,
2673
+ role: "tooltip",
2674
+ "data-side": side,
2675
+ className: cn("ph-tooltip-content", className),
2676
+ children: content
2677
+ }
2678
+ )
2679
+ }
2680
+ ),
2681
+ document.body
2682
+ ) : null
2683
+ ] });
2684
+ }
2685
+
1730
2686
  // src/components/ui/EmptyState.tsx
1731
- import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
2687
+ import { jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
1732
2688
  function EmptyState({ icon, title, description, action, className }) {
1733
- return /* @__PURE__ */ jsxs20(
2689
+ return /* @__PURE__ */ jsxs24(
1734
2690
  "div",
1735
2691
  {
1736
2692
  className: cn(
@@ -1738,17 +2694,17 @@ function EmptyState({ icon, title, description, action, className }) {
1738
2694
  className
1739
2695
  ),
1740
2696
  children: [
1741
- icon && /* @__PURE__ */ jsx21("div", { className: "mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-ph-muted text-ph-mutedtext", children: icon }),
1742
- /* @__PURE__ */ jsx21("h3", { className: "text-base font-semibold text-ph-ink", children: title }),
1743
- description && /* @__PURE__ */ jsx21("p", { className: "mt-1 max-w-sm text-sm text-ph-subtle", children: description }),
1744
- action && /* @__PURE__ */ jsx21("div", { className: "mt-4", children: action })
2697
+ icon && /* @__PURE__ */ jsx27("div", { className: "mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-ph-muted text-ph-mutedtext", children: icon }),
2698
+ /* @__PURE__ */ jsx27("h3", { className: "text-base font-semibold text-ph-ink", children: title }),
2699
+ description && /* @__PURE__ */ jsx27("p", { className: "mt-1 max-w-sm text-sm text-ph-subtle", children: description }),
2700
+ action && /* @__PURE__ */ jsx27("div", { className: "mt-4", children: action })
1745
2701
  ]
1746
2702
  }
1747
2703
  );
1748
2704
  }
1749
2705
 
1750
2706
  // src/components/ui/FilterChips.tsx
1751
- import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
2707
+ import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
1752
2708
  function FilterChips({
1753
2709
  chips,
1754
2710
  onToggle,
@@ -1756,20 +2712,20 @@ function FilterChips({
1756
2712
  className,
1757
2713
  "aria-label": ariaLabel = "Applied filters"
1758
2714
  }) {
1759
- return /* @__PURE__ */ jsx22("div", { className: cn("ph-filter-chips", className), role: "group", "aria-label": ariaLabel, children: chips.map((chip) => {
2715
+ return /* @__PURE__ */ jsx28("div", { className: cn("ph-filter-chips", className), role: "group", "aria-label": ariaLabel, children: chips.map((chip) => {
1760
2716
  var _a;
1761
2717
  const label = (_a = chip.removeLabel) != null ? _a : getChipText(chip);
1762
- const content = /* @__PURE__ */ jsxs21(Fragment3, { children: [
1763
- /* @__PURE__ */ jsx22("span", { className: "ph-filter-chip__label", children: chip.label }),
1764
- chip.value != null ? /* @__PURE__ */ jsx22("span", { className: "ph-filter-chip__value", children: chip.value }) : null
2718
+ const content = /* @__PURE__ */ jsxs25(Fragment5, { children: [
2719
+ /* @__PURE__ */ jsx28("span", { className: "ph-filter-chip__label", children: chip.label }),
2720
+ chip.value != null ? /* @__PURE__ */ jsx28("span", { className: "ph-filter-chip__value", children: chip.value }) : null
1765
2721
  ] });
1766
- return /* @__PURE__ */ jsxs21(
2722
+ return /* @__PURE__ */ jsxs25(
1767
2723
  "span",
1768
2724
  {
1769
2725
  className: cn("ph-filter-chip", chip.active && "ph-filter-chip--active"),
1770
2726
  "data-state": chip.active ? "on" : "off",
1771
2727
  children: [
1772
- onToggle ? /* @__PURE__ */ jsx22(
2728
+ onToggle ? /* @__PURE__ */ jsx28(
1773
2729
  "button",
1774
2730
  {
1775
2731
  type: "button",
@@ -1778,15 +2734,15 @@ function FilterChips({
1778
2734
  onClick: () => onToggle(chip.id),
1779
2735
  children: content
1780
2736
  }
1781
- ) : /* @__PURE__ */ jsx22("span", { className: "ph-filter-chip__main", children: content }),
1782
- chip.active && onRemove ? /* @__PURE__ */ jsx22(
2737
+ ) : /* @__PURE__ */ jsx28("span", { className: "ph-filter-chip__main", children: content }),
2738
+ chip.active && onRemove ? /* @__PURE__ */ jsx28(
1783
2739
  "button",
1784
2740
  {
1785
2741
  type: "button",
1786
2742
  className: "ph-filter-chip__remove",
1787
2743
  "aria-label": `Remove ${label} filter`,
1788
2744
  onClick: () => onRemove(chip.id),
1789
- children: /* @__PURE__ */ jsx22(IconClose, { className: "h-3 w-3", "aria-hidden": true })
2745
+ children: /* @__PURE__ */ jsx28(IconClose, { className: "h-3 w-3", "aria-hidden": true })
1790
2746
  }
1791
2747
  ) : null
1792
2748
  ]
@@ -1802,7 +2758,7 @@ function getChipText(chip) {
1802
2758
  }
1803
2759
 
1804
2760
  // src/components/ui/FilterBar.tsx
1805
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2761
+ import { jsx as jsx29, jsxs as jsxs26 } from "react/jsx-runtime";
1806
2762
  function FilterBar(_a) {
1807
2763
  var _b = _a, {
1808
2764
  children,
@@ -1819,12 +2775,12 @@ function FilterBar(_a) {
1819
2775
  "resultCount",
1820
2776
  "className"
1821
2777
  ]);
1822
- return /* @__PURE__ */ jsxs22("div", __spreadProps(__spreadValues({ className: cn("ph-filter-bar", className) }, props), { children: [
1823
- /* @__PURE__ */ jsxs22("div", { className: "ph-filter-bar__controls", role: "group", "aria-label": label, children: [
2778
+ return /* @__PURE__ */ jsxs26("div", __spreadProps(__spreadValues({ className: cn("ph-filter-bar", className) }, props), { children: [
2779
+ /* @__PURE__ */ jsxs26("div", { className: "ph-filter-bar__controls", role: "group", "aria-label": label, children: [
1824
2780
  children,
1825
- onClear ? /* @__PURE__ */ jsx23("button", { type: "button", className: "ph-filter-bar__clear", onClick: onClear, children: clearLabel }) : null
2781
+ onClear ? /* @__PURE__ */ jsx29("button", { type: "button", className: "ph-filter-bar__clear", onClick: onClear, children: clearLabel }) : null
1826
2782
  ] }),
1827
- resultCount != null ? /* @__PURE__ */ jsx23("output", { className: "ph-filter-bar__results", "aria-live": "polite", children: resultCount }) : null
2783
+ resultCount != null ? /* @__PURE__ */ jsx29("output", { className: "ph-filter-bar__results", "aria-live": "polite", children: resultCount }) : null
1828
2784
  ] }));
1829
2785
  }
1830
2786
  function FilterMenu({
@@ -1841,19 +2797,19 @@ function FilterMenu({
1841
2797
  const selected = options.find((option) => option.value === value);
1842
2798
  const displayValue = (_a = selected == null ? void 0 : selected.label) != null ? _a : placeholder;
1843
2799
  const accessibleValue = selected ? getOptionText(selected) : String(placeholder);
1844
- return /* @__PURE__ */ jsx23(
2800
+ return /* @__PURE__ */ jsx29(
1845
2801
  DropdownMenu,
1846
2802
  {
1847
2803
  "aria-label": `${label}: ${accessibleValue}`,
1848
2804
  align,
1849
2805
  disabled,
1850
2806
  className,
1851
- trigger: /* @__PURE__ */ jsxs22("span", { className: cn("ph-filter-menu-trigger", selected && "ph-filter-menu-trigger--active"), children: [
1852
- /* @__PURE__ */ jsx23(IconTuning, { className: "h-3.5 w-3.5", "aria-hidden": true }),
1853
- /* @__PURE__ */ jsx23("span", { className: "ph-filter-menu-trigger__label", children: label }),
1854
- /* @__PURE__ */ jsx23("span", { className: "ph-filter-menu-trigger__value", children: displayValue })
2807
+ trigger: /* @__PURE__ */ jsxs26("span", { className: cn("ph-filter-menu-trigger", selected && "ph-filter-menu-trigger--active"), children: [
2808
+ /* @__PURE__ */ jsx29(IconTuning, { className: "h-3.5 w-3.5", "aria-hidden": true }),
2809
+ /* @__PURE__ */ jsx29("span", { className: "ph-filter-menu-trigger__label", children: label }),
2810
+ /* @__PURE__ */ jsx29("span", { className: "ph-filter-menu-trigger__value", children: displayValue })
1855
2811
  ] }),
1856
- children: /* @__PURE__ */ jsx23(DropdownRadioGroup, { value, onValueChange, children: options.map((option) => /* @__PURE__ */ jsx23(
2812
+ children: /* @__PURE__ */ jsx29(DropdownRadioGroup, { value, onValueChange, children: options.map((option) => /* @__PURE__ */ jsx29(
1857
2813
  DropdownRadioItem,
1858
2814
  {
1859
2815
  value: option.value,
@@ -1877,25 +2833,25 @@ function SortMenu({
1877
2833
  className
1878
2834
  }) {
1879
2835
  const selected = options.find((option) => option.value === value);
1880
- return /* @__PURE__ */ jsx23(
2836
+ return /* @__PURE__ */ jsx29(
1881
2837
  DropdownMenu,
1882
2838
  {
1883
2839
  "aria-label": `${label}: ${selected ? getOptionText(selected) : "Choose sort order"}`,
1884
2840
  align,
1885
2841
  disabled,
1886
2842
  className,
1887
- trigger: /* @__PURE__ */ jsxs22("span", { className: "ph-filter-menu-trigger ph-sort-menu-trigger", children: [
1888
- /* @__PURE__ */ jsx23(
2843
+ trigger: /* @__PURE__ */ jsxs26("span", { className: "ph-filter-menu-trigger ph-sort-menu-trigger", children: [
2844
+ /* @__PURE__ */ jsx29(
1889
2845
  IconArrowDown,
1890
2846
  {
1891
2847
  className: cn("h-3.5 w-3.5", direction === "ascending" && "rotate-180"),
1892
2848
  "aria-hidden": true
1893
2849
  }
1894
2850
  ),
1895
- /* @__PURE__ */ jsx23("span", { className: "ph-filter-menu-trigger__label", children: label }),
1896
- selected ? /* @__PURE__ */ jsx23("span", { className: "ph-filter-menu-trigger__value", children: selected.label }) : null
2851
+ /* @__PURE__ */ jsx29("span", { className: "ph-filter-menu-trigger__label", children: label }),
2852
+ selected ? /* @__PURE__ */ jsx29("span", { className: "ph-filter-menu-trigger__value", children: selected.label }) : null
1897
2853
  ] }),
1898
- children: /* @__PURE__ */ jsx23(DropdownRadioGroup, { value, onValueChange, children: options.map((option) => /* @__PURE__ */ jsx23(
2854
+ children: /* @__PURE__ */ jsx29(DropdownRadioGroup, { value, onValueChange, children: options.map((option) => /* @__PURE__ */ jsx29(
1899
2855
  DropdownRadioItem,
1900
2856
  {
1901
2857
  value: option.value,
@@ -1915,7 +2871,7 @@ function getOptionText(option) {
1915
2871
  }
1916
2872
 
1917
2873
  // src/components/ui/FilterControls.tsx
1918
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2874
+ import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
1919
2875
  function FilterControls(_a) {
1920
2876
  var _b = _a, {
1921
2877
  children,
@@ -1931,33 +2887,33 @@ function FilterControls(_a) {
1931
2887
  "className"
1932
2888
  ]);
1933
2889
  const hasChips = Boolean(chipsProps == null ? void 0 : chipsProps.chips.length);
1934
- return /* @__PURE__ */ jsxs23("div", __spreadProps(__spreadValues({ className: cn("ph-filter-controls", className) }, props), { children: [
1935
- /* @__PURE__ */ jsx24(FilterBar, __spreadProps(__spreadValues({}, barProps), { children })),
1936
- hasChips && chipsProps ? /* @__PURE__ */ jsx24(FilterChips, __spreadValues({}, chipsProps)) : emptyState != null ? emptyState : null
2890
+ return /* @__PURE__ */ jsxs27("div", __spreadProps(__spreadValues({ className: cn("ph-filter-controls", className) }, props), { children: [
2891
+ /* @__PURE__ */ jsx30(FilterBar, __spreadProps(__spreadValues({}, barProps), { children })),
2892
+ hasChips && chipsProps ? /* @__PURE__ */ jsx30(FilterChips, __spreadValues({}, chipsProps)) : emptyState != null ? emptyState : null
1937
2893
  ] }));
1938
2894
  }
1939
2895
 
1940
2896
  // src/components/ui/CodeBlock.tsx
1941
- import { useState as useState5 } from "react";
1942
- import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
2897
+ import { useState as useState6 } from "react";
2898
+ import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
1943
2899
  function CodeBlock({ code, language = "tsx", filename, className }) {
1944
- const [copied, setCopied] = useState5(false);
2900
+ const [copied, setCopied] = useState6(false);
1945
2901
  const handleCopy = async () => {
1946
2902
  await navigator.clipboard.writeText(code);
1947
2903
  setCopied(true);
1948
2904
  setTimeout(() => setCopied(false), 2e3);
1949
2905
  };
1950
- return /* @__PURE__ */ jsxs24("div", { className: cn("overflow-hidden rounded-lg border border-ph-border bg-[#1a1a2e]", className), children: [
1951
- (filename || language) && /* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between border-b border-white/10 px-4 py-2", children: [
1952
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
1953
- /* @__PURE__ */ jsxs24("div", { className: "flex gap-1.5", children: [
1954
- /* @__PURE__ */ jsx25("div", { className: "h-3 w-3 rounded-full bg-red-400" }),
1955
- /* @__PURE__ */ jsx25("div", { className: "h-3 w-3 rounded-full bg-amber-400" }),
1956
- /* @__PURE__ */ jsx25("div", { className: "h-3 w-3 rounded-full bg-emerald-400" })
2906
+ return /* @__PURE__ */ jsxs28("div", { className: cn("overflow-hidden rounded-lg border border-ph-border bg-[#1a1a2e]", className), children: [
2907
+ (filename || language) && /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between border-b border-white/10 px-4 py-2", children: [
2908
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
2909
+ /* @__PURE__ */ jsxs28("div", { className: "flex gap-1.5", children: [
2910
+ /* @__PURE__ */ jsx31("div", { className: "h-3 w-3 rounded-full bg-red-400" }),
2911
+ /* @__PURE__ */ jsx31("div", { className: "h-3 w-3 rounded-full bg-amber-400" }),
2912
+ /* @__PURE__ */ jsx31("div", { className: "h-3 w-3 rounded-full bg-emerald-400" })
1957
2913
  ] }),
1958
- filename && /* @__PURE__ */ jsx25("span", { className: "ml-2 text-xs text-white/60", children: filename })
2914
+ filename && /* @__PURE__ */ jsx31("span", { className: "ml-2 text-xs text-white/60", children: filename })
1959
2915
  ] }),
1960
- /* @__PURE__ */ jsx25(
2916
+ /* @__PURE__ */ jsx31(
1961
2917
  "button",
1962
2918
  {
1963
2919
  type: "button",
@@ -1967,35 +2923,35 @@ function CodeBlock({ code, language = "tsx", filename, className }) {
1967
2923
  }
1968
2924
  )
1969
2925
  ] }),
1970
- /* @__PURE__ */ jsx25("pre", { className: "overflow-x-auto p-4 text-sm leading-relaxed", children: /* @__PURE__ */ jsx25("code", { className: "font-mono text-[#e4e4e7]", children: code }) })
2926
+ /* @__PURE__ */ jsx31("pre", { className: "overflow-x-auto p-4 text-sm leading-relaxed", children: /* @__PURE__ */ jsx31("code", { className: "font-mono text-[#e4e4e7]", children: code }) })
1971
2927
  ] });
1972
2928
  }
1973
2929
 
1974
2930
  // src/components/ui/ComponentDocs.tsx
1975
- import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
2931
+ import { jsx as jsx32, jsxs as jsxs29 } from "react/jsx-runtime";
1976
2932
  function ComponentDocs({ title = "Props & variants", rows, defaultOpen = false, className }) {
1977
- return /* @__PURE__ */ jsxs25("details", { className: cn("ph-panel group overflow-hidden p-0", className), open: defaultOpen, children: [
1978
- /* @__PURE__ */ jsxs25("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 border-b border-ph-border px-4 py-3 transition hover:bg-ph-muted/60 [&::-webkit-details-marker]:hidden", children: [
1979
- /* @__PURE__ */ jsx26("h3", { className: "text-xs font-semibold uppercase tracking-wider text-ph-mutedtext", children: title }),
1980
- /* @__PURE__ */ jsxs25("span", { className: "rounded-full border border-ph-border bg-ph-surface px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-ph-mutedtext transition group-open:bg-ph-brand group-open:text-white", children: [
1981
- /* @__PURE__ */ jsx26("span", { className: "group-open:hidden", children: "Show" }),
1982
- /* @__PURE__ */ jsx26("span", { className: "hidden group-open:inline", children: "Hide" })
2933
+ return /* @__PURE__ */ jsxs29("details", { className: cn("ph-panel group overflow-hidden p-0", className), open: defaultOpen, children: [
2934
+ /* @__PURE__ */ jsxs29("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 border-b border-ph-border px-4 py-3 transition hover:bg-ph-muted/60 [&::-webkit-details-marker]:hidden", children: [
2935
+ /* @__PURE__ */ jsx32("h3", { className: "text-xs font-semibold uppercase tracking-wider text-ph-mutedtext", children: title }),
2936
+ /* @__PURE__ */ jsxs29("span", { className: "rounded-full border border-ph-border bg-ph-surface px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-ph-mutedtext transition group-open:bg-ph-brand group-open:text-white", children: [
2937
+ /* @__PURE__ */ jsx32("span", { className: "group-open:hidden", children: "Show" }),
2938
+ /* @__PURE__ */ jsx32("span", { className: "hidden group-open:inline", children: "Hide" })
1983
2939
  ] })
1984
2940
  ] }),
1985
- /* @__PURE__ */ jsx26("div", { className: "overflow-x-auto border-t border-ph-border", children: /* @__PURE__ */ jsxs25("table", { className: "w-full text-left text-sm", children: [
1986
- /* @__PURE__ */ jsx26("thead", { className: "bg-ph-muted text-xs uppercase tracking-wider text-ph-mutedtext", children: /* @__PURE__ */ jsxs25("tr", { children: [
1987
- /* @__PURE__ */ jsx26("th", { className: "px-4 py-2 font-semibold", children: "Prop" }),
1988
- /* @__PURE__ */ jsx26("th", { className: "px-4 py-2 font-semibold", children: "Type" }),
1989
- /* @__PURE__ */ jsx26("th", { className: "px-4 py-2 font-semibold", children: "Default" }),
1990
- /* @__PURE__ */ jsx26("th", { className: "px-4 py-2 font-semibold", children: "Use" })
2941
+ /* @__PURE__ */ jsx32("div", { className: "overflow-x-auto border-t border-ph-border", children: /* @__PURE__ */ jsxs29("table", { className: "w-full text-left text-sm", children: [
2942
+ /* @__PURE__ */ jsx32("thead", { className: "bg-ph-muted text-xs uppercase tracking-wider text-ph-mutedtext", children: /* @__PURE__ */ jsxs29("tr", { children: [
2943
+ /* @__PURE__ */ jsx32("th", { className: "px-4 py-2 font-semibold", children: "Prop" }),
2944
+ /* @__PURE__ */ jsx32("th", { className: "px-4 py-2 font-semibold", children: "Type" }),
2945
+ /* @__PURE__ */ jsx32("th", { className: "px-4 py-2 font-semibold", children: "Default" }),
2946
+ /* @__PURE__ */ jsx32("th", { className: "px-4 py-2 font-semibold", children: "Use" })
1991
2947
  ] }) }),
1992
- /* @__PURE__ */ jsx26("tbody", { className: "divide-y divide-ph-border", children: rows.map((row) => {
2948
+ /* @__PURE__ */ jsx32("tbody", { className: "divide-y divide-ph-border", children: rows.map((row) => {
1993
2949
  var _a, _b;
1994
- return /* @__PURE__ */ jsxs25("tr", { children: [
1995
- /* @__PURE__ */ jsx26("td", { className: "px-4 py-3 align-top font-mono text-xs text-ph-ink", children: row.name }),
1996
- /* @__PURE__ */ jsx26("td", { className: "px-4 py-3 align-top font-mono text-xs text-ph-subtle", children: row.type }),
1997
- /* @__PURE__ */ jsx26("td", { className: "px-4 py-3 align-top font-mono text-xs text-ph-subtle", children: (_a = row.defaultValue) != null ? _a : "-" }),
1998
- /* @__PURE__ */ jsx26("td", { className: "px-4 py-3 align-top text-ph-subtle", children: (_b = row.description) != null ? _b : /* @__PURE__ */ jsx26("span", { className: "text-ph-mutedtext", children: "\u2014" }) })
2950
+ return /* @__PURE__ */ jsxs29("tr", { children: [
2951
+ /* @__PURE__ */ jsx32("td", { className: "px-4 py-3 align-top font-mono text-xs text-ph-ink", children: row.name }),
2952
+ /* @__PURE__ */ jsx32("td", { className: "px-4 py-3 align-top font-mono text-xs text-ph-subtle", children: row.type }),
2953
+ /* @__PURE__ */ jsx32("td", { className: "px-4 py-3 align-top font-mono text-xs text-ph-subtle", children: (_a = row.defaultValue) != null ? _a : "-" }),
2954
+ /* @__PURE__ */ jsx32("td", { className: "px-4 py-3 align-top text-ph-subtle", children: (_b = row.description) != null ? _b : /* @__PURE__ */ jsx32("span", { className: "text-ph-mutedtext", children: "\u2014" }) })
1999
2955
  ] }, row.name);
2000
2956
  }) })
2001
2957
  ] }) })
@@ -2003,8 +2959,8 @@ function ComponentDocs({ title = "Props & variants", rows, defaultOpen = false,
2003
2959
  }
2004
2960
 
2005
2961
  // src/components/ui/ShowcaseWrapper.tsx
2006
- import { useState as useState6 } from "react";
2007
- import { jsx as jsx27, jsxs as jsxs26 } from "react/jsx-runtime";
2962
+ import { useState as useState7 } from "react";
2963
+ import { jsx as jsx33, jsxs as jsxs30 } from "react/jsx-runtime";
2008
2964
  function ShowcaseWrapper({
2009
2965
  id,
2010
2966
  title,
@@ -2016,13 +2972,13 @@ function ShowcaseWrapper({
2016
2972
  className
2017
2973
  }) {
2018
2974
  var _a;
2019
- const [showCode, setShowCode] = useState6(false);
2975
+ const [showCode, setShowCode] = useState7(false);
2020
2976
  const fallbackId = (_a = titleIdMap[title]) != null ? _a : title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
2021
- return /* @__PURE__ */ jsxs26("section", { id: id != null ? id : fallbackId, className: cn("scroll-mt-20", className), children: [
2022
- /* @__PURE__ */ jsxs26("div", { className: "ph-h2-rule mb-8", children: [
2023
- /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-1.5", children: [
2024
- /* @__PURE__ */ jsx27("h2", { children: title }),
2025
- /* @__PURE__ */ jsx27(
2977
+ return /* @__PURE__ */ jsxs30("section", { id: id != null ? id : fallbackId, className: cn("scroll-mt-20", className), children: [
2978
+ /* @__PURE__ */ jsxs30("div", { className: "ph-h2-rule mb-8", children: [
2979
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-1.5", children: [
2980
+ /* @__PURE__ */ jsx33("h2", { children: title }),
2981
+ /* @__PURE__ */ jsx33(
2026
2982
  "button",
2027
2983
  {
2028
2984
  type: "button",
@@ -2033,15 +2989,15 @@ function ShowcaseWrapper({
2033
2989
  ),
2034
2990
  title: showCode ? "Hide code" : "Show code",
2035
2991
  "aria-label": showCode ? "Hide code" : "Show code",
2036
- children: /* @__PURE__ */ jsx27(IconCodePreview, { className: "h-5 w-5", "aria-hidden": true })
2992
+ children: /* @__PURE__ */ jsx33(IconCodePreview, { className: "h-5 w-5", "aria-hidden": true })
2037
2993
  }
2038
2994
  )
2039
2995
  ] }),
2040
- /* @__PURE__ */ jsx27("hr", {})
2996
+ /* @__PURE__ */ jsx33("hr", {})
2041
2997
  ] }),
2042
- description && /* @__PURE__ */ jsx27("p", { className: "mb-6 text-sm text-ph-subtle", children: description }),
2043
- docs && /* @__PURE__ */ jsx27("div", { className: "mb-6", children: docs }),
2044
- /* @__PURE__ */ jsxs26(
2998
+ description && /* @__PURE__ */ jsx33("p", { className: "mb-6 text-sm text-ph-subtle", children: description }),
2999
+ docs && /* @__PURE__ */ jsx33("div", { className: "mb-6", children: docs }),
3000
+ /* @__PURE__ */ jsxs30(
2045
3001
  "div",
2046
3002
  {
2047
3003
  className: cn(
@@ -2049,15 +3005,15 @@ function ShowcaseWrapper({
2049
3005
  showCode ? "lg:grid lg:grid-cols-[1fr,minmax(360px,420px)]" : "block"
2050
3006
  ),
2051
3007
  children: [
2052
- /* @__PURE__ */ jsx27("div", { className: cn("min-w-0", showCode && "lg:pr-2"), children }),
2053
- /* @__PURE__ */ jsx27(
3008
+ /* @__PURE__ */ jsx33("div", { className: cn("min-w-0", showCode && "lg:pr-2"), children }),
3009
+ /* @__PURE__ */ jsx33(
2054
3010
  "div",
2055
3011
  {
2056
3012
  className: cn(
2057
3013
  "transition-all duration-300",
2058
3014
  showCode ? "block opacity-100" : "hidden opacity-0 lg:hidden"
2059
3015
  ),
2060
- children: /* @__PURE__ */ jsx27("div", { className: "sticky top-20", children: /* @__PURE__ */ jsx27(CodeBlock, { code, filename }) })
3016
+ children: /* @__PURE__ */ jsx33("div", { className: "sticky top-20", children: /* @__PURE__ */ jsx33(CodeBlock, { code, filename }) })
2061
3017
  }
2062
3018
  )
2063
3019
  ]
@@ -2106,14 +3062,14 @@ var titleIdMap = {
2106
3062
  };
2107
3063
 
2108
3064
  // src/components/ui/CollapsibleSection.tsx
2109
- import { useId as useId5, useState as useState7 } from "react";
2110
- import { jsx as jsx28, jsxs as jsxs27 } from "react/jsx-runtime";
3065
+ import { useId as useId6, useState as useState8 } from "react";
3066
+ import { jsx as jsx34, jsxs as jsxs31 } from "react/jsx-runtime";
2111
3067
  function CollapsibleSection({ title, children, defaultOpen = true, id }) {
2112
- const [isOpen, setIsOpen] = useState7(defaultOpen);
2113
- const generatedId = useId5();
3068
+ const [isOpen, setIsOpen] = useState8(defaultOpen);
3069
+ const generatedId = useId6();
2114
3070
  const contentId = `${id != null ? id : generatedId}-content`;
2115
- return /* @__PURE__ */ jsxs27("section", { id, className: "scroll-mt-20", children: [
2116
- /* @__PURE__ */ jsxs27(
3071
+ return /* @__PURE__ */ jsxs31("section", { id, className: "scroll-mt-20", children: [
3072
+ /* @__PURE__ */ jsxs31(
2117
3073
  "button",
2118
3074
  {
2119
3075
  type: "button",
@@ -2122,8 +3078,8 @@ function CollapsibleSection({ title, children, defaultOpen = true, id }) {
2122
3078
  "aria-controls": contentId,
2123
3079
  className: "mb-6 flex w-full items-center justify-between rounded-lg border border-ph-border bg-ph-muted px-5 py-4 text-left transition hover:bg-ph-muted/80",
2124
3080
  children: [
2125
- /* @__PURE__ */ jsx28("span", { className: "text-lg font-bold text-ph-ink", children: title }),
2126
- /* @__PURE__ */ jsx28(
3081
+ /* @__PURE__ */ jsx34("span", { className: "text-lg font-bold text-ph-ink", children: title }),
3082
+ /* @__PURE__ */ jsx34(
2127
3083
  IconChevronDown,
2128
3084
  {
2129
3085
  className: cn(
@@ -2136,7 +3092,7 @@ function CollapsibleSection({ title, children, defaultOpen = true, id }) {
2136
3092
  ]
2137
3093
  }
2138
3094
  ),
2139
- /* @__PURE__ */ jsx28(
3095
+ /* @__PURE__ */ jsx34(
2140
3096
  "div",
2141
3097
  {
2142
3098
  id: contentId,
@@ -2152,7 +3108,7 @@ function CollapsibleSection({ title, children, defaultOpen = true, id }) {
2152
3108
  }
2153
3109
 
2154
3110
  // src/components/ui/Typography.tsx
2155
- import { jsx as jsx29 } from "react/jsx-runtime";
3111
+ import { jsx as jsx35 } from "react/jsx-runtime";
2156
3112
  var toneMap2 = {
2157
3113
  default: "text-ph-ink",
2158
3114
  muted: "text-ph-mutedtext",
@@ -2181,50 +3137,50 @@ function Display({
2181
3137
  truncate,
2182
3138
  className
2183
3139
  }) {
2184
- return /* @__PURE__ */ jsx29("h1", { className: textClass("ph-hero-title", tone, weight, truncate, className), children });
3140
+ return /* @__PURE__ */ jsx35("h1", { className: textClass("ph-hero-title", tone, weight, truncate, className), children });
2185
3141
  }
2186
3142
  function SectionTitle({ children, tone = "default", weight, truncate, className }) {
2187
- return /* @__PURE__ */ jsx29("h2", { className: textClass("ph-section-title", tone, weight, truncate, className), children });
3143
+ return /* @__PURE__ */ jsx35("h2", { className: textClass("ph-section-title", tone, weight, truncate, className), children });
2188
3144
  }
2189
3145
  function H1({ children, tone = "default", weight, truncate, className }) {
2190
- return /* @__PURE__ */ jsx29("h1", { className: textClass("text-3xl font-bold tracking-tight md:text-4xl", tone, weight, truncate, className), children });
3146
+ return /* @__PURE__ */ jsx35("h1", { className: textClass("text-3xl font-bold tracking-tight md:text-4xl", tone, weight, truncate, className), children });
2191
3147
  }
2192
3148
  function H2({ children, tone = "default", weight, truncate, className }) {
2193
- return /* @__PURE__ */ jsx29("h2", { className: textClass("text-2xl font-bold tracking-tight", tone, weight, truncate, className), children });
3149
+ return /* @__PURE__ */ jsx35("h2", { className: textClass("text-2xl font-bold tracking-tight", tone, weight, truncate, className), children });
2194
3150
  }
2195
3151
  function H3({ children, tone = "default", weight, truncate, className }) {
2196
- return /* @__PURE__ */ jsx29("h3", { className: textClass("text-xl font-semibold", tone, weight, truncate, className), children });
3152
+ return /* @__PURE__ */ jsx35("h3", { className: textClass("text-xl font-semibold", tone, weight, truncate, className), children });
2197
3153
  }
2198
3154
  function H4({ children, tone = "default", weight, truncate, className }) {
2199
- return /* @__PURE__ */ jsx29("h4", { className: textClass("text-lg font-semibold", tone, weight, truncate, className), children });
3155
+ return /* @__PURE__ */ jsx35("h4", { className: textClass("text-lg font-semibold", tone, weight, truncate, className), children });
2200
3156
  }
2201
3157
  function H5({ children, tone = "default", weight, truncate, className }) {
2202
- return /* @__PURE__ */ jsx29("h5", { className: textClass("text-base font-semibold", tone, weight, truncate, className), children });
3158
+ return /* @__PURE__ */ jsx35("h5", { className: textClass("text-base font-semibold", tone, weight, truncate, className), children });
2203
3159
  }
2204
3160
  function P({ children, tone = "default", weight, truncate, className }) {
2205
- return /* @__PURE__ */ jsx29("p", { className: textClass("text-base leading-relaxed", tone, weight, truncate, className), children });
3161
+ return /* @__PURE__ */ jsx35("p", { className: textClass("text-base leading-relaxed", tone, weight, truncate, className), children });
2206
3162
  }
2207
3163
  function Small({ children, tone = "default", weight, truncate, className }) {
2208
- return /* @__PURE__ */ jsx29("span", { className: textClass("text-sm leading-relaxed", tone, weight, truncate, className), children });
3164
+ return /* @__PURE__ */ jsx35("span", { className: textClass("text-sm leading-relaxed", tone, weight, truncate, className), children });
2209
3165
  }
2210
3166
  function Caption({ children, tone = "muted", weight, truncate, className }) {
2211
- return /* @__PURE__ */ jsx29("span", { className: textClass("text-[11px] font-medium uppercase tracking-wider", tone, weight, truncate, className), children });
3167
+ return /* @__PURE__ */ jsx35("span", { className: textClass("text-[11px] font-medium uppercase tracking-wider", tone, weight, truncate, className), children });
2212
3168
  }
2213
3169
  function Overline({ children, tone = "muted", weight, truncate, className }) {
2214
- return /* @__PURE__ */ jsx29("span", { className: textClass("text-[10px] font-bold uppercase tracking-[0.15em]", tone, weight, truncate, className), children });
3170
+ return /* @__PURE__ */ jsx35("span", { className: textClass("text-[10px] font-bold uppercase tracking-[0.15em]", tone, weight, truncate, className), children });
2215
3171
  }
2216
3172
  function Lead({ children, tone = "subtle", weight, truncate, className }) {
2217
- return /* @__PURE__ */ jsx29("p", { className: textClass("ph-lead", tone, weight, truncate, className), children });
3173
+ return /* @__PURE__ */ jsx35("p", { className: textClass("ph-lead", tone, weight, truncate, className), children });
2218
3174
  }
2219
3175
  function Mono({ children, tone = "default", weight, truncate, className }) {
2220
- return /* @__PURE__ */ jsx29("code", { className: textClass("text-sm font-mono leading-relaxed", tone, weight, truncate, className), children });
3176
+ return /* @__PURE__ */ jsx35("code", { className: textClass("text-sm font-mono leading-relaxed", tone, weight, truncate, className), children });
2221
3177
  }
2222
3178
  function Label({ children, tone = "default", weight, truncate, className }) {
2223
- return /* @__PURE__ */ jsx29("label", { className: textClass("text-sm font-medium", tone, weight, truncate, className), children });
3179
+ return /* @__PURE__ */ jsx35("label", { className: textClass("text-sm font-medium", tone, weight, truncate, className), children });
2224
3180
  }
2225
3181
 
2226
3182
  // src/components/ui/Avatar.tsx
2227
- import { jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
3183
+ import { jsx as jsx36, jsxs as jsxs32 } from "react/jsx-runtime";
2228
3184
  var sizeMap4 = {
2229
3185
  xs: "h-8 w-8 text-[10px]",
2230
3186
  sm: "h-10 w-10 text-xs",
@@ -2256,8 +3212,8 @@ function Avatar(_a) {
2256
3212
  "badge",
2257
3213
  "className"
2258
3214
  ]);
2259
- return /* @__PURE__ */ jsxs28("div", __spreadProps(__spreadValues({ className: cn("relative inline-flex shrink-0", className) }, props), { children: [
2260
- /* @__PURE__ */ jsx30(
3215
+ return /* @__PURE__ */ jsxs32("div", __spreadProps(__spreadValues({ className: cn("relative inline-flex shrink-0", className) }, props), { children: [
3216
+ /* @__PURE__ */ jsx36(
2261
3217
  "div",
2262
3218
  {
2263
3219
  className: cn(
@@ -2268,7 +3224,7 @@ function Avatar(_a) {
2268
3224
  children: icon || label
2269
3225
  }
2270
3226
  ),
2271
- status && /* @__PURE__ */ jsx30(
3227
+ status && /* @__PURE__ */ jsx36(
2272
3228
  "span",
2273
3229
  {
2274
3230
  className: cn(
@@ -2277,7 +3233,7 @@ function Avatar(_a) {
2277
3233
  )
2278
3234
  }
2279
3235
  ),
2280
- badge && /* @__PURE__ */ jsx30("span", { className: "absolute -bottom-1 -right-1 flex min-w-[22px] items-center justify-center rounded-full bg-ph-brand px-1.5 py-px text-[10px] font-bold text-white", children: badge })
3236
+ badge && /* @__PURE__ */ jsx36("span", { className: "absolute -bottom-1 -right-1 flex min-w-[22px] items-center justify-center rounded-full bg-ph-brand px-1.5 py-px text-[10px] font-bold text-white", children: badge })
2281
3237
  ] }));
2282
3238
  }
2283
3239
  function AvatarGroup(_a) {
@@ -2285,9 +3241,9 @@ function AvatarGroup(_a) {
2285
3241
  const items = Array.isArray(children) ? children : [children];
2286
3242
  const visible = max ? items.slice(0, max) : items;
2287
3243
  const remaining = max ? items.length - max : 0;
2288
- return /* @__PURE__ */ jsxs28("div", __spreadProps(__spreadValues({ className: cn("-space-x-3 flex rtl:space-x-reverse", className) }, props), { children: [
3244
+ return /* @__PURE__ */ jsxs32("div", __spreadProps(__spreadValues({ className: cn("-space-x-3 flex rtl:space-x-reverse", className) }, props), { children: [
2289
3245
  visible,
2290
- remaining > 0 && /* @__PURE__ */ jsx30(
3246
+ remaining > 0 && /* @__PURE__ */ jsx36(
2291
3247
  Avatar,
2292
3248
  {
2293
3249
  label: `+${remaining}`,
@@ -2299,7 +3255,7 @@ function AvatarGroup(_a) {
2299
3255
  }
2300
3256
 
2301
3257
  // src/components/ui/Progress.tsx
2302
- import { jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
3258
+ import { jsx as jsx37, jsxs as jsxs33 } from "react/jsx-runtime";
2303
3259
  var sizeMap5 = {
2304
3260
  sm: "h-1",
2305
3261
  md: "h-2",
@@ -2324,15 +3280,15 @@ function Progress(_a) {
2324
3280
  "className"
2325
3281
  ]);
2326
3282
  const percentage = Math.min(100, Math.max(0, value / max * 100));
2327
- return /* @__PURE__ */ jsxs29("div", __spreadProps(__spreadValues({ className: cn("w-full", className) }, props), { children: [
2328
- (label || showPercentage) && /* @__PURE__ */ jsxs29("div", { className: "mb-1.5 flex justify-between text-sm text-ph-subtle", children: [
2329
- label && /* @__PURE__ */ jsx31("span", { children: label }),
2330
- showPercentage && /* @__PURE__ */ jsxs29("span", { className: "tabular-nums", children: [
3283
+ return /* @__PURE__ */ jsxs33("div", __spreadProps(__spreadValues({ className: cn("w-full", className) }, props), { children: [
3284
+ (label || showPercentage) && /* @__PURE__ */ jsxs33("div", { className: "mb-1.5 flex justify-between text-sm text-ph-subtle", children: [
3285
+ label && /* @__PURE__ */ jsx37("span", { children: label }),
3286
+ showPercentage && /* @__PURE__ */ jsxs33("span", { className: "tabular-nums", children: [
2331
3287
  Math.round(percentage),
2332
3288
  "%"
2333
3289
  ] })
2334
3290
  ] }),
2335
- /* @__PURE__ */ jsx31("div", { className: cn("ph-progress", sizeMap5[size]), children: /* @__PURE__ */ jsx31(
3291
+ /* @__PURE__ */ jsx37("div", { className: cn("ph-progress", sizeMap5[size]), children: /* @__PURE__ */ jsx37(
2336
3292
  "div",
2337
3293
  {
2338
3294
  className: cn("ph-progress-bar", color),
@@ -2347,9 +3303,9 @@ function Progress(_a) {
2347
3303
  }
2348
3304
 
2349
3305
  // src/components/ui/Link.tsx
2350
- import { forwardRef as forwardRef6 } from "react";
2351
- import { jsx as jsx32 } from "react/jsx-runtime";
2352
- var Link = forwardRef6(function Link2(_a, ref) {
3306
+ import { forwardRef as forwardRef9 } from "react";
3307
+ import { jsx as jsx38 } from "react/jsx-runtime";
3308
+ var Link = forwardRef9(function Link2(_a, ref) {
2353
3309
  var _b = _a, {
2354
3310
  className,
2355
3311
  disabled = false,
@@ -2359,7 +3315,7 @@ var Link = forwardRef6(function Link2(_a, ref) {
2359
3315
  "disabled",
2360
3316
  "children"
2361
3317
  ]);
2362
- return /* @__PURE__ */ jsx32(
3318
+ return /* @__PURE__ */ jsx38(
2363
3319
  "a",
2364
3320
  __spreadProps(__spreadValues({
2365
3321
  ref,
@@ -2378,10 +3334,10 @@ var Link = forwardRef6(function Link2(_a, ref) {
2378
3334
  Link.displayName = "Link";
2379
3335
 
2380
3336
  // src/components/ui/Spinner.tsx
2381
- import { jsx as jsx33, jsxs as jsxs30 } from "react/jsx-runtime";
3337
+ import { jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
2382
3338
  function Spinner(_a) {
2383
3339
  var _b = _a, { size = "sm", textColored = false, className } = _b, props = __objRest(_b, ["size", "textColored", "className"]);
2384
- return /* @__PURE__ */ jsx33(
3340
+ return /* @__PURE__ */ jsx39(
2385
3341
  "span",
2386
3342
  __spreadProps(__spreadValues({
2387
3343
  className: cn(
@@ -2393,9 +3349,9 @@ function Spinner(_a) {
2393
3349
  role: "status",
2394
3350
  "aria-label": "Loading"
2395
3351
  }, props), {
2396
- children: /* @__PURE__ */ jsxs30("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "ph-spinner__svg", children: [
2397
- /* @__PURE__ */ jsx33("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3", opacity: 0.2 }),
2398
- /* @__PURE__ */ jsx33("path", { d: "M12 2a10 10 0 0 1 10 10", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round" })
3352
+ children: /* @__PURE__ */ jsxs34("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "ph-spinner__svg", children: [
3353
+ /* @__PURE__ */ jsx39("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3", opacity: 0.2 }),
3354
+ /* @__PURE__ */ jsx39("path", { d: "M12 2a10 10 0 0 1 10 10", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round" })
2399
3355
  ] })
2400
3356
  })
2401
3357
  );
@@ -2403,7 +3359,7 @@ function Spinner(_a) {
2403
3359
  Spinner.displayName = "Spinner";
2404
3360
 
2405
3361
  // src/components/ui/Dot.tsx
2406
- import { jsx as jsx34 } from "react/jsx-runtime";
3362
+ import { jsx as jsx40 } from "react/jsx-runtime";
2407
3363
  var colorMap = {
2408
3364
  green: "bg-ph-success",
2409
3365
  yellow: "bg-ph-warning",
@@ -2413,7 +3369,7 @@ var colorMap = {
2413
3369
  };
2414
3370
  function Dot(_a) {
2415
3371
  var _b = _a, { color = "gray", size = "md", className } = _b, props = __objRest(_b, ["color", "size", "className"]);
2416
- return /* @__PURE__ */ jsx34(
3372
+ return /* @__PURE__ */ jsx40(
2417
3373
  "span",
2418
3374
  __spreadValues({
2419
3375
  className: cn(
@@ -2429,9 +3385,9 @@ function Dot(_a) {
2429
3385
  Dot.displayName = "Dot";
2430
3386
 
2431
3387
  // src/components/ui/Chip.tsx
2432
- import { forwardRef as forwardRef7 } from "react";
2433
- import { jsx as jsx35, jsxs as jsxs31 } from "react/jsx-runtime";
2434
- var Chip = forwardRef7(function Chip2(_a, ref) {
3388
+ import { forwardRef as forwardRef10 } from "react";
3389
+ import { jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
3390
+ var Chip = forwardRef10(function Chip2(_a, ref) {
2435
3391
  var _b = _a, {
2436
3392
  selected = false,
2437
3393
  onRemove,
@@ -2450,18 +3406,18 @@ var Chip = forwardRef7(function Chip2(_a, ref) {
2450
3406
  );
2451
3407
  if (onRemove) {
2452
3408
  const removeLabel = typeof children === "string" ? `Remove ${children}` : "Remove";
2453
- return /* @__PURE__ */ jsxs31("span", { className: chipClassName, children: [
2454
- /* @__PURE__ */ jsx35(
3409
+ return /* @__PURE__ */ jsxs35("span", { className: chipClassName, children: [
3410
+ /* @__PURE__ */ jsx41(
2455
3411
  "button",
2456
3412
  __spreadProps(__spreadValues({
2457
3413
  ref,
2458
3414
  type: "button",
2459
3415
  className: "min-w-0 bg-transparent p-0 text-inherit"
2460
3416
  }, props), {
2461
- children: /* @__PURE__ */ jsx35("span", { className: "ph-chip__text", children })
3417
+ children: /* @__PURE__ */ jsx41("span", { className: "ph-chip__text", children })
2462
3418
  })
2463
3419
  ),
2464
- /* @__PURE__ */ jsx35(
3420
+ /* @__PURE__ */ jsx41(
2465
3421
  "button",
2466
3422
  {
2467
3423
  type: "button",
@@ -2469,26 +3425,111 @@ var Chip = forwardRef7(function Chip2(_a, ref) {
2469
3425
  disabled: props.disabled,
2470
3426
  className: "ph-chip__remove",
2471
3427
  "aria-label": removeLabel,
2472
- children: /* @__PURE__ */ jsx35("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx35("path", { d: "M2 2l6 6M8 2l-6 6" }) })
3428
+ children: /* @__PURE__ */ jsx41("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx41("path", { d: "M2 2l6 6M8 2l-6 6" }) })
2473
3429
  }
2474
3430
  )
2475
3431
  ] });
2476
3432
  }
2477
- return /* @__PURE__ */ jsx35(
3433
+ return /* @__PURE__ */ jsx41(
2478
3434
  "button",
2479
3435
  __spreadProps(__spreadValues({
2480
3436
  ref,
2481
3437
  type: "button",
2482
3438
  className: chipClassName
2483
3439
  }, props), {
2484
- children: /* @__PURE__ */ jsx35("span", { className: "ph-chip__text", children })
3440
+ children: /* @__PURE__ */ jsx41("span", { className: "ph-chip__text", children })
2485
3441
  })
2486
3442
  );
2487
3443
  });
2488
3444
  Chip.displayName = "Chip";
2489
3445
 
2490
3446
  export {
3447
+ ButtonChrome,
2491
3448
  Button,
3449
+ IconBase,
3450
+ createIconBase,
3451
+ createIconBasePath,
3452
+ IconAreaChart,
3453
+ IconCumulativeChart,
3454
+ IconTableChart,
3455
+ IconHandClick,
3456
+ IconSurveys,
3457
+ IconCohort,
3458
+ IconRecording,
3459
+ IconFlare,
3460
+ IconSelectEvents,
3461
+ IconClipboardEdit,
3462
+ IconQueryEditor,
3463
+ IconTuning,
3464
+ IconSync,
3465
+ IconPlayCircle,
3466
+ IconGridView,
3467
+ IconListView,
3468
+ IconPremium,
3469
+ IconGift,
3470
+ IconRobot,
3471
+ IconExclamation,
3472
+ IconErrorOutline,
3473
+ IconInfo,
3474
+ IconCancel,
3475
+ IconCheckCircle,
3476
+ IconArrowUp,
3477
+ IconArrowDown,
3478
+ IconChevronLeft,
3479
+ IconChevronRight,
3480
+ IconChevronDown,
3481
+ IconSubArrowRight,
3482
+ IconSearch,
3483
+ IconBell,
3484
+ IconBellOff,
3485
+ IconPerson,
3486
+ IconHome,
3487
+ IconPanelRight,
3488
+ IconPlus,
3489
+ IconCheck,
3490
+ IconClose,
3491
+ IconTrash,
3492
+ IconDownload,
3493
+ IconUpload,
3494
+ IconSave,
3495
+ IconCopy,
3496
+ IconEdit,
3497
+ IconLogout,
3498
+ IconStar,
3499
+ IconMail,
3500
+ IconShoppingCart,
3501
+ IconMoon,
3502
+ IconSun,
3503
+ IconVolume,
3504
+ IconVolumeOff,
3505
+ IconFlag,
3506
+ IconDatabase,
3507
+ IconLayers,
3508
+ IconBox,
3509
+ IconBolt,
3510
+ IconRadar,
3511
+ IconToggle,
3512
+ IconRocket,
3513
+ IconTerminal,
3514
+ IconOldWindow,
3515
+ IconCommandCursor,
3516
+ IconDataReel,
3517
+ IconCodePreview,
3518
+ IconInsightBoard,
3519
+ IconEventStream,
3520
+ IconFeatureGate,
3521
+ IconReplayFrame,
3522
+ IconQueryStack,
3523
+ IconExperimentSplit,
3524
+ IconSurveyCard,
3525
+ OLD_UI_ICONS,
3526
+ IconActivity,
3527
+ IconFlask,
3528
+ IconSpinner,
3529
+ CANONICAL_ICONS,
3530
+ PH_ICON_ALIASES,
3531
+ PH_ICONS,
3532
+ IconByName,
2492
3533
  Alert,
2493
3534
  Badge,
2494
3535
  Card,
@@ -2501,6 +3542,11 @@ export {
2501
3542
  AuthDivider,
2502
3543
  SettingsNav,
2503
3544
  SettingsLayout,
3545
+ DropdownMenu,
3546
+ DropdownButton,
3547
+ DropdownItem,
3548
+ DropdownRadioGroup,
3549
+ DropdownRadioItem,
2504
3550
  FormField,
2505
3551
  Input,
2506
3552
  Select,
@@ -2530,6 +3576,8 @@ export {
2530
3576
  SegmentedControl,
2531
3577
  CommandPalette,
2532
3578
  Calendar,
3579
+ TooltipProvider,
3580
+ Tooltip,
2533
3581
  EmptyState,
2534
3582
  FilterChips,
2535
3583
  FilterBar,