@agentiffai/design 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +21 -0
  3. package/README.md +187 -0
  4. package/assets/layout/main-pane-section.png +0 -0
  5. package/assets/layout/nav-complete.png +0 -0
  6. package/assets/layout/nav-horizontal-section.png +0 -0
  7. package/assets/layout/nav-vertical-section.png +0 -0
  8. package/assets/layout/pane-section-dropdowns.png +0 -0
  9. package/assets/layout/pane-section-header.png +0 -0
  10. package/dist/Window-B6e_UfLV.d.ts +429 -0
  11. package/dist/Window-CgGFIYHS.d.cts +429 -0
  12. package/dist/chunk-CNVJ5UF2.js +2069 -0
  13. package/dist/chunk-CNVJ5UF2.js.map +1 -0
  14. package/dist/chunk-CVHHTWDQ.cjs +72 -0
  15. package/dist/chunk-CVHHTWDQ.cjs.map +1 -0
  16. package/dist/chunk-H4VHCHCP.cjs +1268 -0
  17. package/dist/chunk-H4VHCHCP.cjs.map +1 -0
  18. package/dist/chunk-JQ6Q7MDQ.js +67 -0
  19. package/dist/chunk-JQ6Q7MDQ.js.map +1 -0
  20. package/dist/chunk-KNSPBTTJ.cjs +2158 -0
  21. package/dist/chunk-KNSPBTTJ.cjs.map +1 -0
  22. package/dist/chunk-MNXQDDWP.js +2143 -0
  23. package/dist/chunk-MNXQDDWP.js.map +1 -0
  24. package/dist/chunk-P4Q3MHIY.cjs +2093 -0
  25. package/dist/chunk-P4Q3MHIY.cjs.map +1 -0
  26. package/dist/chunk-PAOXD7DF.js +1253 -0
  27. package/dist/chunk-PAOXD7DF.js.map +1 -0
  28. package/dist/copilotkit/index.cjs +611 -0
  29. package/dist/copilotkit/index.cjs.map +1 -0
  30. package/dist/copilotkit/index.d.cts +162 -0
  31. package/dist/copilotkit/index.d.ts +162 -0
  32. package/dist/copilotkit/index.js +538 -0
  33. package/dist/copilotkit/index.js.map +1 -0
  34. package/dist/icons/index.cjs +48 -0
  35. package/dist/icons/index.cjs.map +1 -0
  36. package/dist/icons/index.d.cts +375 -0
  37. package/dist/icons/index.d.ts +375 -0
  38. package/dist/icons/index.js +3 -0
  39. package/dist/icons/index.js.map +1 -0
  40. package/dist/index.cjs +536 -0
  41. package/dist/index.cjs.map +1 -0
  42. package/dist/index.d-DYU1eVeb.d.cts +252 -0
  43. package/dist/index.d-DYU1eVeb.d.ts +252 -0
  44. package/dist/index.d.cts +185 -0
  45. package/dist/index.d.ts +185 -0
  46. package/dist/index.js +358 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/layout/index.cjs +48 -0
  49. package/dist/layout/index.cjs.map +1 -0
  50. package/dist/layout/index.d.cts +206 -0
  51. package/dist/layout/index.d.ts +206 -0
  52. package/dist/layout/index.js +3 -0
  53. package/dist/layout/index.js.map +1 -0
  54. package/dist/theme/index.cjs +24 -0
  55. package/dist/theme/index.cjs.map +1 -0
  56. package/dist/theme/index.d.cts +95 -0
  57. package/dist/theme/index.d.ts +95 -0
  58. package/dist/theme/index.js +3 -0
  59. package/dist/theme/index.js.map +1 -0
  60. package/package.json +148 -0
  61. package/public/assets/bg-set/brand-logos/Google.svg +1 -0
  62. package/public/assets/bg-set/brand-logos/Google2.svg +1 -0
  63. package/public/assets/bg-set/brand-logos/Microsoft.svg +1 -0
  64. package/public/assets/bg-set/brand-logos/Microsoft2.svg +1 -0
  65. package/public/assets/bg-set/brand-logos/Slack.svg +1 -0
  66. package/public/assets/bg-set/brand-logos/Slack2.svg +1 -0
  67. package/public/assets/bg-set/brand-logos/YouTube.svg +1 -0
  68. package/public/assets/bg-set/brand-logos/YouTube2.svg +1 -0
  69. package/public/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg +1 -0
  70. package/public/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg +1 -0
  71. package/public/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg +1 -0
  72. package/public/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg +1 -0
  73. package/public/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg +1 -0
  74. package/public/assets/icon-set/Icon-add-circle-fill.svg +1 -0
  75. package/public/assets/icon-set/Icon-calendar-fill.svg +1 -0
  76. package/public/assets/icon-set/Icon-chat-1-fill.svg +1 -0
  77. package/public/assets/icon-set/Icon-download-2-fill.svg +1 -0
  78. package/public/assets/icon-set/Icon-home-fill.svg +1 -0
  79. package/public/assets/icon-set/Icon-mic-fill.svg +1 -0
  80. package/public/assets/icon-set/Icon-settings-3-fill.svg +1 -0
  81. package/public/assets/icon-set/Icon-settings-fill.svg +1 -0
  82. package/public/assets/icon-set/Icon-settings-line.svg +1 -0
@@ -0,0 +1,2158 @@
1
+ 'use strict';
2
+
3
+ var styled8 = require('styled-components');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var button = require('@react-aria/button');
6
+ var react = require('react');
7
+ var meter = require('@react-aria/meter');
8
+ var tabs$1 = require('@react-aria/tabs');
9
+ var collections = require('@react-stately/collections');
10
+ var tabs = require('@react-stately/tabs');
11
+ var reactAriaComponents = require('react-aria-components');
12
+
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var styled8__default = /*#__PURE__*/_interopDefault(styled8);
16
+
17
+ // src/components/layout/Icon/Icon.styles.ts
18
+ var IconWrapper = styled8__default.default.span`
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ width: ${({ $size }) => $size}px;
23
+ height: ${({ $size }) => $size}px;
24
+ color: ${({ $color }) => $color};
25
+ line-height: 1;
26
+
27
+ img {
28
+ width: 100%;
29
+ height: 100%;
30
+ filter: ${({ $color }) => {
31
+ if ($color === "currentColor" || !$color) return "inherit";
32
+ if ($color === "white" || $color === "#ffffff" || $color === "#fff") {
33
+ return "brightness(0) saturate(100%) invert(100%)";
34
+ }
35
+ if ($color === "#b9bbbe") {
36
+ return "brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)";
37
+ }
38
+ if ($color === "#ed4245" || $color === "#f04747") {
39
+ return "brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)";
40
+ }
41
+ return "none";
42
+ }};
43
+ }
44
+ `;
45
+
46
+ // src/components/layout/Icon/icons.ts
47
+ var ICON_BASE_PATH = "/assets/icon-set";
48
+ var IconNames = {
49
+ MIC: "mic-fill",
50
+ MIC_OFF: "mic-off-fill",
51
+ HEADPHONE: "headphone-fill",
52
+ VOLUME_MUTE: "volume-mute-fill",
53
+ SETTINGS: "settings-3-fill",
54
+ SETTINGS_FILL: "settings-fill",
55
+ SETTINGS_LINE: "settings-line",
56
+ HOME: "home-fill",
57
+ ADD_CIRCLE: "add-circle-fill",
58
+ COMPASS_DISCOVER: "compass-discover-fill",
59
+ DOWNLOAD: "download-2-fill",
60
+ ARROW_LEFT: "arrow-left-fill",
61
+ CALENDAR: "calendar-fill",
62
+ CHAT: "chat-1-fill"
63
+ };
64
+ var iconFiles = {
65
+ "mic-fill": "Icon-mic-fill.svg",
66
+ "mic-off-fill": "Icon-mic-off-fill.svg",
67
+ "headphone-fill": "Icon-headphone-fill.svg",
68
+ "volume-mute-fill": "Icon-volume-mute-fill.svg",
69
+ "settings-3-fill": "Icon-settings-3-fill.svg",
70
+ "settings-fill": "Icon-settings-fill.svg",
71
+ "settings-line": "Icon-settings-line.svg",
72
+ "home-fill": "Icon-home-fill.svg",
73
+ "add-circle-fill": "Icon-add-circle-fill.svg",
74
+ "compass-discover-fill": "Icon-compass-discover-fill.svg",
75
+ "download-2-fill": "Icon-download-2-fill.svg",
76
+ "arrow-left-fill": "Icon-arrow-left-fill.svg",
77
+ "calendar-fill": "Icon-calendar-fill.svg",
78
+ "chat-1-fill": "Icon-chat-1-fill.svg"
79
+ };
80
+ function getIconPath(name) {
81
+ return `${ICON_BASE_PATH}/${iconFiles[name]}`;
82
+ }
83
+ function Icon({
84
+ name,
85
+ size = 20,
86
+ color = "currentColor",
87
+ className,
88
+ ...imgProps
89
+ }) {
90
+ const iconPath = getIconPath(name);
91
+ return /* @__PURE__ */ jsxRuntime.jsx(IconWrapper, { $size: size, $color: color, className, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: iconPath, alt: "", width: size, height: size, ...imgProps }) });
92
+ }
93
+ Icon.displayName = "Icon";
94
+ var NAV_BG = "#232428";
95
+ var NAV_BORDER = "#1E1F22";
96
+ var Container = styled8__default.default.nav`
97
+ position: absolute;
98
+ bottom: 0;
99
+ left: 0;
100
+ right: 0;
101
+ background-color: ${NAV_BG};
102
+ border-top: 1px solid ${NAV_BORDER};
103
+ height: 52px;
104
+ z-index: 10;
105
+
106
+ /* Dark theme support */
107
+ @media (prefers-color-scheme: dark) {
108
+ background-color: #1a1b1e;
109
+ }
110
+ `;
111
+ var ContentWrapper = styled8__default.default.div`
112
+ display: flex;
113
+ justify-content: space-between;
114
+ align-items: center;
115
+ height: 100%;
116
+ padding: 0 8px;
117
+ max-width: 100%;
118
+
119
+ /* Responsive padding */
120
+ @media (min-width: 768px) {
121
+ padding: 0 16px;
122
+ }
123
+ `;
124
+ var UserStatusSlot = styled8__default.default.div`
125
+ display: flex;
126
+ align-items: center;
127
+ min-width: 0; /* Allow flex item to shrink */
128
+ flex: 0 1 auto;
129
+
130
+ /* Handle overflow for long usernames */
131
+ > * {
132
+ overflow: hidden;
133
+ text-overflow: ellipsis;
134
+ white-space: nowrap;
135
+ }
136
+ `;
137
+ var ActionButtonsSlot = styled8__default.default.div`
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 4px;
141
+ flex-shrink: 0;
142
+
143
+ /* Ensure buttons stay visible */
144
+ @media (min-width: 480px) {
145
+ gap: 8px;
146
+ }
147
+ `;
148
+ function NavHorizontal({
149
+ userStatusSlot,
150
+ actionsSlot,
151
+ className,
152
+ "aria-label": ariaLabel = "Horizontal navigation bar"
153
+ }) {
154
+ return /* @__PURE__ */ jsxRuntime.jsx(Container, { className, role: "navigation", "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsxs(ContentWrapper, { children: [
155
+ /* @__PURE__ */ jsxRuntime.jsx(UserStatusSlot, { children: userStatusSlot }),
156
+ /* @__PURE__ */ jsxRuntime.jsx(ActionButtonsSlot, { children: actionsSlot })
157
+ ] }) });
158
+ }
159
+ NavHorizontal.displayName = "NavHorizontal";
160
+ var NAV_BG2 = "#202225";
161
+ var NAV_SEPARATOR = "#36393F";
162
+ var Container2 = styled8__default.default.nav`
163
+ position: absolute;
164
+ top: 0;
165
+ left: 0;
166
+ bottom: 52px; /* Account for horizontal nav height */
167
+ width: 72px;
168
+ background-color: ${NAV_BG2};
169
+ display: flex;
170
+ flex-direction: column;
171
+ z-index: 9; /* Below horizontal nav and chat sidebar */
172
+ overflow-y: auto;
173
+ overflow-x: hidden;
174
+ scrollbar-width: none; /* Firefox */
175
+
176
+ /* Hide scrollbar for Chrome, Safari and Opera */
177
+ &::-webkit-scrollbar {
178
+ display: none;
179
+ }
180
+
181
+ /* Dark theme support */
182
+ @media (prefers-color-scheme: dark) {
183
+ background-color: #1a1b1e;
184
+ }
185
+
186
+ /* Responsive adjustments */
187
+ @media (max-width: 768px) {
188
+ width: 60px; /* Match MainPane left offset on mobile */
189
+ }
190
+ `;
191
+ var TopSection = styled8__default.default.div`
192
+ display: flex;
193
+ flex-direction: column;
194
+ align-items: center;
195
+ height: 56px; /* Same as PaneSectionHeader on mobile */
196
+ padding: 0;
197
+ flex-shrink: 0;
198
+ position: relative;
199
+
200
+ @media (min-width: 768px) {
201
+ height: 64px; /* Same as PaneSectionHeader on desktop */
202
+ }
203
+ `;
204
+ var BackButton = styled8__default.default.button`
205
+ position: absolute;
206
+ top: 50%;
207
+ left: 50%;
208
+ transform: translate(-50%, -50%);
209
+ width: 40px;
210
+ height: 40px;
211
+ border-radius: 50%;
212
+ border: none;
213
+ background-color: ${NAV_SEPARATOR};
214
+ color: #ffffff;
215
+ cursor: pointer;
216
+ display: flex;
217
+ align-items: center;
218
+ justify-content: center;
219
+ transition: all 0.2s ease-in-out;
220
+
221
+ &:hover {
222
+ background-color: #5865F2;
223
+ }
224
+
225
+ &:active {
226
+ transform: translate(-50%, -50%) scale(0.95);
227
+ }
228
+
229
+ &:focus {
230
+ outline: none;
231
+ }
232
+
233
+ &:focus-visible {
234
+ outline: 2px solid #5865F2;
235
+ outline-offset: 2px;
236
+ }
237
+ `;
238
+ styled8__default.default.span`
239
+ font-size: 20px;
240
+ line-height: 1;
241
+ font-weight: bold;
242
+ `;
243
+ var Separator = styled8__default.default.div`
244
+ width: 32px;
245
+ height: 2px;
246
+ background-color: ${NAV_SEPARATOR};
247
+ align-self: center;
248
+ margin: 8px auto 12px;
249
+ border-radius: 1px;
250
+ `;
251
+ var FolderGroupsSlot = styled8__default.default.div`
252
+ display: flex;
253
+ flex-direction: column;
254
+ align-items: center;
255
+ gap: 8px;
256
+ padding: 0 12px 12px;
257
+ flex: 1;
258
+
259
+ /* Server/workspace icons styling */
260
+ > * {
261
+ width: 48px;
262
+ height: 48px;
263
+ border-radius: 50%;
264
+ transition: border-radius 0.15s ease-out;
265
+ cursor: pointer;
266
+
267
+ &:hover {
268
+ border-radius: 16px;
269
+ }
270
+ }
271
+
272
+ /* Responsive adjustments */
273
+ @media (max-width: 768px) {
274
+ padding: 0 6px 12px; /* Reduce horizontal padding on mobile */
275
+ }
276
+ `;
277
+ function NavVertical({
278
+ onBackClick,
279
+ onHomeClick,
280
+ folderGroupsSlot,
281
+ className,
282
+ "aria-label": ariaLabel = "Vertical navigation sidebar"
283
+ }) {
284
+ const backButtonRef = react.useRef(null);
285
+ const homeButtonRef = react.useRef(null);
286
+ const { buttonProps: backButtonProps } = button.useButton(
287
+ {
288
+ onPress: onBackClick,
289
+ "aria-label": "Go back"
290
+ },
291
+ backButtonRef
292
+ );
293
+ const { buttonProps: homeButtonProps } = button.useButton(
294
+ {
295
+ onPress: onHomeClick,
296
+ "aria-label": "Home"
297
+ },
298
+ homeButtonRef
299
+ );
300
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container2, { className, role: "navigation", "aria-label": ariaLabel, children: [
301
+ /* @__PURE__ */ jsxRuntime.jsx(TopSection, { children: onBackClick ? /* @__PURE__ */ jsxRuntime.jsx(BackButton, { ...backButtonProps, ref: backButtonRef, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-left-fill", size: 20, color: "white" }) }) : onHomeClick ? /* @__PURE__ */ jsxRuntime.jsx(BackButton, { ...homeButtonProps, ref: homeButtonRef, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "home-fill", size: 24, color: "white" }) }) : null }),
302
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, {}),
303
+ /* @__PURE__ */ jsxRuntime.jsx(FolderGroupsSlot, { children: folderGroupsSlot })
304
+ ] });
305
+ }
306
+ NavVertical.displayName = "NavVertical";
307
+ var Container3 = styled8__default.default.div`
308
+ position: relative;
309
+ width: 100%;
310
+ height: 100vh;
311
+ background-color: #36393f;
312
+ overflow: hidden;
313
+
314
+ /* Dark theme support */
315
+ @media (prefers-color-scheme: dark) {
316
+ background-color: #2f3136;
317
+ }
318
+ `;
319
+ var MainPane = styled8__default.default.main`
320
+ position: absolute;
321
+ top: 0;
322
+ left: 72px; /* Width of vertical nav */
323
+ right: 0;
324
+ bottom: 52px; /* Height of horizontal nav */
325
+ background-color: #36393f;
326
+ overflow: auto;
327
+
328
+ /* Custom scrollbar styling */
329
+ &::-webkit-scrollbar {
330
+ width: 8px;
331
+ height: 8px;
332
+ }
333
+
334
+ &::-webkit-scrollbar-track {
335
+ background: transparent;
336
+ }
337
+
338
+ &::-webkit-scrollbar-thumb {
339
+ background-color: #202225;
340
+ border-radius: 4px;
341
+ }
342
+
343
+ &::-webkit-scrollbar-thumb:hover {
344
+ background-color: #18191c;
345
+ }
346
+
347
+ /* Firefox scrollbar */
348
+ scrollbar-width: thin;
349
+ scrollbar-color: #202225 transparent;
350
+
351
+ /* Dark theme support */
352
+ @media (prefers-color-scheme: dark) {
353
+ background-color: #2f3136;
354
+ }
355
+
356
+ /* Responsive adjustments */
357
+ @media (max-width: 768px) {
358
+ left: 60px; /* Smaller nav on mobile */
359
+ }
360
+ `;
361
+ function Layout({
362
+ mainPaneSlot,
363
+ navVerticalSlot,
364
+ navHorizontalUserSlot,
365
+ navHorizontalActionsSlot,
366
+ onNavBackClick,
367
+ className
368
+ }) {
369
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container3, { className, children: [
370
+ /* @__PURE__ */ jsxRuntime.jsx(NavVertical, { folderGroupsSlot: navVerticalSlot, onBackClick: onNavBackClick }),
371
+ /* @__PURE__ */ jsxRuntime.jsx(MainPane, { children: mainPaneSlot }),
372
+ /* @__PURE__ */ jsxRuntime.jsx(
373
+ NavHorizontal,
374
+ {
375
+ userStatusSlot: navHorizontalUserSlot,
376
+ actionsSlot: navHorizontalActionsSlot
377
+ }
378
+ )
379
+ ] });
380
+ }
381
+ Layout.displayName = "Layout";
382
+ var Container4 = styled8__default.default.div`
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: flex-end;
386
+ gap: 4px;
387
+ `;
388
+ var ActionButton = styled8__default.default.button`
389
+ width: ${({ $size = 32 }) => $size}px;
390
+ height: ${({ $size = 32 }) => $size}px;
391
+ min-width: ${({ $size = 32 }) => $size}px;
392
+ min-height: ${({ $size = 32 }) => $size}px;
393
+ border-radius: ${({ $isPrimary }) => $isPrimary ? "50%" : "4px"};
394
+ border: none;
395
+ background-color: ${({ $isPrimary }) => $isPrimary ? "#5865F2" : "transparent"};
396
+ color: ${({ $isPrimary }) => $isPrimary ? "#FFFFFF" : "#b9bbbe"};
397
+ cursor: pointer;
398
+ display: flex;
399
+ align-items: center;
400
+ justify-content: center;
401
+ transition: all 0.15s ease;
402
+ font-size: 16px;
403
+
404
+ &:hover {
405
+ background-color: ${({ $isPrimary }) => $isPrimary ? "#4752C4" : "rgba(255, 255, 255, 0.1)"};
406
+ color: ${({ $isPrimary }) => $isPrimary ? "#FFFFFF" : "#dcddde"};
407
+ }
408
+
409
+ &:active {
410
+ transform: scale(0.95);
411
+ }
412
+
413
+ ${({ $isActive, $isPrimary }) => $isActive && !$isPrimary && styled8.css`
414
+ background-color: rgba(255, 255, 255, 0.08);
415
+ color: #ffffff;
416
+ `}
417
+
418
+ ${({ $isActive, $isPrimary }) => $isActive && $isPrimary && styled8.css`
419
+ background-color: #4752C4;
420
+ color: #ffffff;
421
+ `}
422
+
423
+ &:focus {
424
+ outline: none;
425
+ }
426
+
427
+ &:focus-visible {
428
+ outline: 2px solid #5865f2;
429
+ outline-offset: 2px;
430
+ }
431
+ `;
432
+ function ActionButtonItem({ icon, label, onClick, isActive, size, isPrimary }) {
433
+ const ref = react.useRef(null);
434
+ const { buttonProps } = button.useButton(
435
+ {
436
+ onPress: onClick,
437
+ "aria-label": label,
438
+ "aria-pressed": isActive
439
+ },
440
+ ref
441
+ );
442
+ return /* @__PURE__ */ jsxRuntime.jsx(
443
+ ActionButton,
444
+ {
445
+ ...buttonProps,
446
+ ref,
447
+ $isActive: isActive,
448
+ $size: size,
449
+ $isPrimary: isPrimary,
450
+ children: icon
451
+ }
452
+ );
453
+ }
454
+ function ActionButtons({
455
+ onCalendarClick,
456
+ onSettingsClick,
457
+ onChatClick: _onChatClick,
458
+ isCalendarActive = false,
459
+ isSettingsActive = false,
460
+ isChatActive: _isChatActive = false,
461
+ className
462
+ }) {
463
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container4, { className, children: [
464
+ /* @__PURE__ */ jsxRuntime.jsx(
465
+ ActionButtonItem,
466
+ {
467
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "calendar-fill", size: 16, color: "#b9bbbe" }),
468
+ label: "Calendar",
469
+ onClick: onCalendarClick,
470
+ isActive: isCalendarActive,
471
+ size: 32
472
+ }
473
+ ),
474
+ /* @__PURE__ */ jsxRuntime.jsx(
475
+ ActionButtonItem,
476
+ {
477
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "settings-3-fill", size: 16, color: "#b9bbbe" }),
478
+ label: "Settings",
479
+ onClick: onSettingsClick,
480
+ isActive: isSettingsActive,
481
+ size: 32
482
+ }
483
+ ),
484
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { width: "36px", height: "36px", visibility: "hidden" }, "aria-hidden": "true" })
485
+ ] });
486
+ }
487
+ ActionButtons.displayName = "ActionButtons";
488
+ var statusColors = {
489
+ online: "#43B581",
490
+ idle: "#FAA61A",
491
+ busy: "#F04747",
492
+ offline: "#747F8D"
493
+ };
494
+ var Container5 = styled8__default.default.button`
495
+ display: flex;
496
+ align-items: center;
497
+ gap: 8px;
498
+ padding: 4px 6px;
499
+ border-radius: 4px;
500
+ border: none;
501
+ background: transparent;
502
+ color: inherit;
503
+ font: inherit;
504
+ transition: background-color 0.2s ease, opacity 0.2s ease;
505
+ cursor: ${(props) => props.$isDisabled ? "not-allowed" : "pointer"};
506
+ opacity: ${(props) => props.$isDisabled ? 0.5 : 1};
507
+ text-align: left;
508
+ width: 100%;
509
+
510
+ &:hover:not(:disabled) {
511
+ background-color: rgba(255, 255, 255, 0.05);
512
+ }
513
+
514
+ &:focus-visible {
515
+ outline: 2px solid #5865F2;
516
+ outline-offset: 2px;
517
+ }
518
+
519
+ &:active:not(:disabled) {
520
+ background-color: rgba(255, 255, 255, 0.08);
521
+ }
522
+ `;
523
+ var IconWrapper2 = styled8__default.default.div`
524
+ position: relative;
525
+ width: 32px;
526
+ height: 32px;
527
+ border-radius: 8px;
528
+ background-color: #36393f;
529
+ display: flex;
530
+ align-items: center;
531
+ justify-content: center;
532
+ flex-shrink: 0;
533
+ overflow: hidden;
534
+ `;
535
+ var WorkflowInfo = styled8__default.default.div`
536
+ display: flex;
537
+ flex-direction: column;
538
+ min-width: 0;
539
+ `;
540
+ var WorkflowName = styled8__default.default.span`
541
+ color: #ffffff;
542
+ font-size: 13px;
543
+ font-weight: 600;
544
+ line-height: 1.2;
545
+ overflow: hidden;
546
+ text-overflow: ellipsis;
547
+ white-space: nowrap;
548
+ `;
549
+ var WorkflowStatus = styled8__default.default.div`
550
+ display: flex;
551
+ align-items: center;
552
+ gap: 4px;
553
+ color: #b9bbbe;
554
+ font-size: 11px;
555
+ line-height: 1.2;
556
+ `;
557
+ var StatusIndicatorOuter = styled8__default.default.span`
558
+ position: absolute;
559
+ bottom: -2px;
560
+ right: -2px;
561
+ width: 10px;
562
+ height: 10px;
563
+ border-radius: 50%;
564
+ background-color: #232428;
565
+ display: flex;
566
+ align-items: center;
567
+ justify-content: center;
568
+ flex-shrink: 0;
569
+ `;
570
+ var StatusIndicatorInner = styled8__default.default.span`
571
+ width: 6px;
572
+ height: 6px;
573
+ border-radius: 50%;
574
+ background-color: ${({ $status }) => statusColors[$status]};
575
+ flex-shrink: 0;
576
+ `;
577
+ function WorkflowStatusCard({
578
+ icon,
579
+ workflowName,
580
+ status = "offline",
581
+ statusText,
582
+ className,
583
+ onClick,
584
+ onPress,
585
+ isDisabled,
586
+ ...ariaProps
587
+ }) {
588
+ const displayStatus = statusText || status;
589
+ const ref = react.useRef(null);
590
+ const handlePress = () => {
591
+ if (onClick) onClick();
592
+ if (onPress) onPress({});
593
+ };
594
+ const { buttonProps } = button.useButton(
595
+ {
596
+ ...ariaProps,
597
+ onPress: handlePress,
598
+ isDisabled,
599
+ "aria-label": ariaProps["aria-label"] || `${workflowName} workflow, status: ${displayStatus}`
600
+ },
601
+ ref
602
+ );
603
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container5, { ...buttonProps, ref, className, $isDisabled: isDisabled, children: [
604
+ /* @__PURE__ */ jsxRuntime.jsxs(IconWrapper2, { children: [
605
+ icon,
606
+ /* @__PURE__ */ jsxRuntime.jsx(StatusIndicatorOuter, { $status: status, children: /* @__PURE__ */ jsxRuntime.jsx(StatusIndicatorInner, { $status: status }) })
607
+ ] }),
608
+ /* @__PURE__ */ jsxRuntime.jsxs(WorkflowInfo, { children: [
609
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowName, { children: workflowName }),
610
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowStatus, { children: displayStatus })
611
+ ] })
612
+ ] });
613
+ }
614
+ WorkflowStatusCard.displayName = "WorkflowStatusCard";
615
+ var BG_TERTIARY = "#36393F";
616
+ var TEXT_PRIMARY = "#FFFFFF";
617
+ var TEXT_SECONDARY = "#B9BBBE";
618
+ var TEXT_MUTED = "#72767D";
619
+ var ACCENT_COLOR = "#5865F2";
620
+ var HOVER_BG = "rgba(255, 255, 255, 0.05)";
621
+ var DarkNotificationCardContainer = styled8__default.default.div`
622
+ display: flex;
623
+ flex-direction: column;
624
+ padding: 6px;
625
+ background: ${BG_TERTIARY};
626
+ border-radius: 8px;
627
+ gap: 4px;
628
+ flex: 1;
629
+ min-width: 0;
630
+ overflow: hidden;
631
+ `;
632
+ var DarkSectionHeader = styled8__default.default.button`
633
+ display: flex;
634
+ align-items: center;
635
+ justify-content: space-between;
636
+ width: 100%;
637
+ padding: 4px 2px;
638
+ border: none;
639
+ background: transparent;
640
+ font-family: ${(props) => props.theme?.fonts?.body || "system-ui, sans-serif"};
641
+ font-size: 11px;
642
+ font-weight: 600;
643
+ color: ${TEXT_SECONDARY};
644
+ text-align: left;
645
+ cursor: pointer;
646
+ transition: all 0.2s ease;
647
+
648
+ &:hover {
649
+ color: ${TEXT_PRIMARY};
650
+ }
651
+
652
+ &:focus-visible {
653
+ outline: 2px solid ${ACCENT_COLOR};
654
+ outline-offset: 2px;
655
+ border-radius: 4px;
656
+ }
657
+ `;
658
+ var DarkChevronIcon = styled8__default.default.span`
659
+ display: inline-flex;
660
+ align-items: center;
661
+ justify-content: center;
662
+ transition: transform 0.2s ease;
663
+ color: ${TEXT_MUTED};
664
+
665
+ ${(props) => props.$isExpanded ? `
666
+ transform: rotate(0deg);
667
+ ` : `
668
+ transform: rotate(-90deg);
669
+ `}
670
+
671
+ svg {
672
+ width: 12px;
673
+ height: 12px;
674
+ }
675
+ `;
676
+ var DarkSectionContent = styled8__default.default.div`
677
+ display: flex;
678
+ flex-direction: column;
679
+ gap: 2px;
680
+ padding-left: 4px;
681
+ margin-top: 2px;
682
+ min-width: 0;
683
+ overflow: hidden;
684
+ `;
685
+ var DarkNotificationItemWrapper = styled8__default.default.button`
686
+ display: flex;
687
+ align-items: center;
688
+ gap: 6px;
689
+ width: 100%;
690
+ padding: 4px 6px;
691
+ border: none;
692
+ cursor: pointer;
693
+ text-align: left;
694
+ transition: all 0.2s ease;
695
+ border-radius: 4px;
696
+ min-width: 0;
697
+ overflow: hidden;
698
+
699
+ /* Default state - transparent background */
700
+ background-color: ${(props) => props.$isSelected ? ACCENT_COLOR : "transparent"};
701
+
702
+ /* Hover state */
703
+ &:hover:not(:disabled) {
704
+ background-color: ${(props) => props.$isSelected ? "#4752C4" : HOVER_BG};
705
+ }
706
+
707
+ /* Active state */
708
+ &:active:not(:disabled) {
709
+ transform: scale(0.99);
710
+ }
711
+
712
+ /* Focus state */
713
+ &:focus-visible {
714
+ outline: 2px solid ${ACCENT_COLOR};
715
+ outline-offset: 2px;
716
+ }
717
+
718
+ /* Disabled state */
719
+ &:disabled {
720
+ cursor: not-allowed;
721
+ opacity: 0.5;
722
+ }
723
+ `;
724
+ var DarkItemIcon = styled8__default.default.span`
725
+ display: inline-flex;
726
+ align-items: center;
727
+ justify-content: center;
728
+ width: 16px;
729
+ height: 16px;
730
+ flex-shrink: 0;
731
+ border-radius: ${(props) => props.$hasCustomIcon ? "4px" : "50%"};
732
+ background-color: ${(props) => props.$iconColor || "transparent"};
733
+ color: ${(props) => props.$hasCustomIcon ? TEXT_PRIMARY : TEXT_MUTED};
734
+ font-size: 12px;
735
+
736
+ /* Default circle icon styling */
737
+ ${(props) => !props.$hasCustomIcon && `
738
+ svg {
739
+ width: 14px;
740
+ height: 14px;
741
+ }
742
+ `}
743
+
744
+ /* Custom icon (emoji or colored icon) styling */
745
+ ${(props) => props.$hasCustomIcon && `
746
+ padding: 2px;
747
+ `}
748
+ `;
749
+ var DarkItemText = styled8__default.default.span`
750
+ flex: 1;
751
+ font-family: ${(props) => props.theme?.fonts?.body || "system-ui, sans-serif"};
752
+ font-size: 11px;
753
+ font-weight: ${(props) => props.$isSelected ? "500" : "400"};
754
+ color: ${(props) => props.$isSelected ? TEXT_PRIMARY : TEXT_SECONDARY};
755
+ line-height: 1.3;
756
+ word-wrap: break-word;
757
+ min-width: 0;
758
+ overflow: hidden;
759
+ text-overflow: ellipsis;
760
+ `;
761
+ var DarkMenuButton = styled8__default.default.button`
762
+ display: inline-flex;
763
+ align-items: center;
764
+ justify-content: center;
765
+ width: 20px;
766
+ height: 20px;
767
+ padding: 0;
768
+ border: none;
769
+ border-radius: 4px;
770
+ background-color: transparent;
771
+ color: ${TEXT_PRIMARY};
772
+ cursor: pointer;
773
+ transition: all 0.2s ease;
774
+ flex-shrink: 0;
775
+
776
+ &:hover:not(:disabled) {
777
+ background-color: rgba(255, 255, 255, 0.1);
778
+ }
779
+
780
+ &:active:not(:disabled) {
781
+ background-color: rgba(255, 255, 255, 0.15);
782
+ transform: scale(0.95);
783
+ }
784
+
785
+ &:focus-visible {
786
+ outline: 2px solid ${ACCENT_COLOR};
787
+ outline-offset: 2px;
788
+ }
789
+
790
+ svg {
791
+ width: 14px;
792
+ height: 14px;
793
+ }
794
+ `;
795
+ var DarkTimestamp = styled8__default.default.span`
796
+ font-size: 10px;
797
+ color: ${TEXT_MUTED};
798
+ white-space: normal;
799
+ word-wrap: break-word;
800
+ text-align: right;
801
+ max-width: 60px;
802
+ `;
803
+ var DarkNotificationCard = ({
804
+ sections,
805
+ onItemClick,
806
+ selectedItemId,
807
+ onMenuClick,
808
+ className,
809
+ "aria-label": ariaLabel = "Action log history"
810
+ }) => {
811
+ const [collapsedSections, setCollapsedSections] = react.useState(() => {
812
+ const initial = {};
813
+ for (const section of sections) {
814
+ initial[section.title] = section.isCollapsed || false;
815
+ }
816
+ return initial;
817
+ });
818
+ const toggleSection = (sectionTitle) => {
819
+ setCollapsedSections((prev) => ({
820
+ ...prev,
821
+ [sectionTitle]: !prev[sectionTitle]
822
+ }));
823
+ };
824
+ return /* @__PURE__ */ jsxRuntime.jsx(DarkNotificationCardContainer, { className, "aria-label": ariaLabel, role: "region", children: sections.map((section) => /* @__PURE__ */ jsxRuntime.jsx(
825
+ DarkSectionComponent,
826
+ {
827
+ section,
828
+ isCollapsed: collapsedSections[section.title] ?? false,
829
+ onToggle: () => toggleSection(section.title),
830
+ onItemClick,
831
+ selectedItemId,
832
+ onMenuClick
833
+ },
834
+ section.title
835
+ )) });
836
+ };
837
+ var DarkSectionComponent = ({
838
+ section,
839
+ isCollapsed,
840
+ onToggle,
841
+ onItemClick,
842
+ selectedItemId,
843
+ onMenuClick
844
+ }) => {
845
+ const headerRef = react.useRef(null);
846
+ const { buttonProps } = button.useButton(
847
+ {
848
+ onPress: onToggle,
849
+ "aria-label": `${section.title} section, ${isCollapsed ? "collapsed" : "expanded"}`,
850
+ "aria-expanded": !isCollapsed
851
+ },
852
+ headerRef
853
+ );
854
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-label": `${section.title} actions`, children: [
855
+ /* @__PURE__ */ jsxRuntime.jsxs(DarkSectionHeader, { ...buttonProps, ref: headerRef, children: [
856
+ section.title,
857
+ /* @__PURE__ */ jsxRuntime.jsx(DarkChevronIcon, { $isExpanded: !isCollapsed, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsxs(
858
+ "svg",
859
+ {
860
+ width: "14",
861
+ height: "14",
862
+ viewBox: "0 0 14 14",
863
+ fill: "none",
864
+ xmlns: "http://www.w3.org/2000/svg",
865
+ role: "img",
866
+ "aria-label": "Expand/collapse icon",
867
+ children: [
868
+ /* @__PURE__ */ jsxRuntime.jsx("title", { children: "Expand/collapse icon" }),
869
+ /* @__PURE__ */ jsxRuntime.jsx(
870
+ "path",
871
+ {
872
+ d: "M4 5L7 8L10 5",
873
+ stroke: "currentColor",
874
+ strokeWidth: "1.5",
875
+ strokeLinecap: "round",
876
+ strokeLinejoin: "round"
877
+ }
878
+ )
879
+ ]
880
+ }
881
+ ) })
882
+ ] }),
883
+ !isCollapsed && /* @__PURE__ */ jsxRuntime.jsx(DarkSectionContent, { role: "list", children: section.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
884
+ DarkNotificationItemComponent,
885
+ {
886
+ item,
887
+ isSelected: item.id === selectedItemId,
888
+ onItemClick,
889
+ onMenuClick
890
+ },
891
+ item.id
892
+ )) })
893
+ ] });
894
+ };
895
+ var DarkNotificationItemComponent = ({
896
+ item,
897
+ isSelected,
898
+ onItemClick,
899
+ onMenuClick
900
+ }) => {
901
+ const itemRef = react.useRef(null);
902
+ const menuRef = react.useRef(null);
903
+ const { buttonProps: itemButtonProps } = button.useButton(
904
+ {
905
+ onPress: () => onItemClick?.(item),
906
+ "aria-label": `Action: ${item.text}`,
907
+ "aria-current": isSelected ? "true" : void 0
908
+ },
909
+ itemRef
910
+ );
911
+ const { buttonProps: menuButtonProps } = button.useButton(
912
+ {
913
+ onPress: () => onMenuClick?.(item),
914
+ "aria-label": `Options for ${item.text}`
915
+ },
916
+ menuRef
917
+ );
918
+ const handleItemKeyDown = (e) => {
919
+ if (isSelected && e.key === "Tab" && !e.shiftKey) {
920
+ return;
921
+ }
922
+ };
923
+ return /* @__PURE__ */ jsxRuntime.jsxs(
924
+ DarkNotificationItemWrapper,
925
+ {
926
+ ...itemButtonProps,
927
+ ref: itemRef,
928
+ $isSelected: isSelected,
929
+ $hasIcon: !!item.icon,
930
+ role: "listitem",
931
+ onKeyDown: handleItemKeyDown,
932
+ children: [
933
+ /* @__PURE__ */ jsxRuntime.jsx(DarkItemIcon, { $iconColor: item.iconColor, $hasCustomIcon: !!item.icon, children: item.icon || /* @__PURE__ */ jsxRuntime.jsx(
934
+ "svg",
935
+ {
936
+ width: "16",
937
+ height: "16",
938
+ viewBox: "0 0 16 16",
939
+ fill: "none",
940
+ xmlns: "http://www.w3.org/2000/svg",
941
+ "aria-hidden": "true",
942
+ children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "6", stroke: "currentColor", strokeWidth: "1.5" })
943
+ }
944
+ ) }),
945
+ /* @__PURE__ */ jsxRuntime.jsx(DarkItemText, { $isSelected: isSelected, children: item.text }),
946
+ item.timestamp && /* @__PURE__ */ jsxRuntime.jsx(DarkTimestamp, { children: item.timestamp }),
947
+ isSelected && onMenuClick && /* @__PURE__ */ jsxRuntime.jsx(
948
+ DarkMenuButton,
949
+ {
950
+ ...menuButtonProps,
951
+ ref: menuRef,
952
+ onClick: (e) => {
953
+ e.stopPropagation();
954
+ menuButtonProps.onClick?.(e);
955
+ },
956
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
957
+ "svg",
958
+ {
959
+ width: "16",
960
+ height: "16",
961
+ viewBox: "0 0 16 16",
962
+ fill: "none",
963
+ xmlns: "http://www.w3.org/2000/svg",
964
+ "aria-hidden": "true",
965
+ children: [
966
+ /* @__PURE__ */ jsxRuntime.jsx("title", { children: "More options" }),
967
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "3", r: "1", fill: "currentColor" }),
968
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "1", fill: "currentColor" }),
969
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "13", r: "1", fill: "currentColor" })
970
+ ]
971
+ }
972
+ )
973
+ }
974
+ )
975
+ ]
976
+ }
977
+ );
978
+ };
979
+ DarkNotificationCard.displayName = "DarkNotificationCard";
980
+ var BG_PRIMARY = "#2F3136";
981
+ var BG_SECONDARY = "#202225";
982
+ var BG_TERTIARY2 = "#36393F";
983
+ var TEXT_PRIMARY2 = "#FFFFFF";
984
+ var TEXT_SECONDARY2 = "#B9BBBE";
985
+ var TEXT_MUTED2 = "#72767D";
986
+ var ACCENT_COLOR2 = "#5865F2";
987
+ var HOVER_BG2 = "rgba(255, 255, 255, 0.05)";
988
+ var Container6 = styled8__default.default.div`
989
+ width: 100%;
990
+ height: 100%;
991
+ background-color: ${BG_PRIMARY};
992
+ color: ${TEXT_PRIMARY2};
993
+ display: flex;
994
+ flex-direction: column;
995
+ font-family: ${(props) => props.theme?.fonts?.body || "system-ui, sans-serif"};
996
+ overflow: hidden; // Prevent content from escaping container bounds
997
+ `;
998
+ var TabListWrapper = styled8__default.default.div`
999
+ display: flex;
1000
+ border-bottom: 2px solid ${BG_TERTIARY2};
1001
+ background-color: ${BG_SECONDARY};
1002
+ padding: 0 16px;
1003
+ gap: 8px;
1004
+ overflow-x: auto;
1005
+ scrollbar-width: none;
1006
+ -ms-overflow-style: none;
1007
+ flex-shrink: 0; // Prevent shrinking when content overflows
1008
+
1009
+ &::-webkit-scrollbar {
1010
+ display: none;
1011
+ }
1012
+
1013
+ @media (max-width: 640px) {
1014
+ padding: 0 8px;
1015
+ gap: 4px;
1016
+ }
1017
+ `;
1018
+ var TabButton = styled8__default.default.button`
1019
+ padding: 12px 20px;
1020
+ background: none;
1021
+ border: none;
1022
+ color: ${(props) => props.$isSelected ? TEXT_PRIMARY2 : TEXT_SECONDARY2};
1023
+ font-size: 14px;
1024
+ font-weight: 600;
1025
+ cursor: pointer;
1026
+ position: relative;
1027
+ transition: color 0.2s ease;
1028
+ white-space: nowrap;
1029
+ flex-shrink: 0;
1030
+
1031
+ @media (max-width: 640px) {
1032
+ padding: 10px 12px;
1033
+ font-size: 12px;
1034
+ }
1035
+
1036
+ &:hover {
1037
+ color: ${TEXT_PRIMARY2};
1038
+ }
1039
+
1040
+ &:focus {
1041
+ outline: none;
1042
+ }
1043
+
1044
+ &:focus-visible {
1045
+ outline: 2px solid ${ACCENT_COLOR2};
1046
+ outline-offset: -2px;
1047
+ border-radius: 4px;
1048
+ }
1049
+
1050
+ ${(props) => props.$isSelected && `
1051
+ &::after {
1052
+ content: '';
1053
+ position: absolute;
1054
+ bottom: -2px;
1055
+ left: 0;
1056
+ right: 0;
1057
+ height: 2px;
1058
+ background-color: ${ACCENT_COLOR2};
1059
+ }
1060
+ `}
1061
+ `;
1062
+ var TabPanelWrapper = styled8__default.default.div`
1063
+ flex: 1;
1064
+ padding: 24px;
1065
+ overflow-y: auto;
1066
+ overflow-x: hidden; // Prevent horizontal overflow
1067
+ background-color: ${BG_PRIMARY};
1068
+ min-height: 0; // Enable proper flex shrinking and scrolling
1069
+
1070
+ @media (max-width: 640px) {
1071
+ padding: 16px;
1072
+ }
1073
+
1074
+ @media (max-width: 480px) {
1075
+ padding: 12px;
1076
+ }
1077
+
1078
+ /* Custom scrollbar */
1079
+ scrollbar-width: thin;
1080
+ scrollbar-color: ${BG_TERTIARY2} ${BG_PRIMARY};
1081
+
1082
+ &::-webkit-scrollbar {
1083
+ width: 8px;
1084
+ }
1085
+
1086
+ &::-webkit-scrollbar-track {
1087
+ background: ${BG_PRIMARY};
1088
+ }
1089
+
1090
+ &::-webkit-scrollbar-thumb {
1091
+ background: ${BG_TERTIARY2};
1092
+ border-radius: 4px;
1093
+ }
1094
+
1095
+ &::-webkit-scrollbar-thumb:hover {
1096
+ background: #4a4d52;
1097
+ }
1098
+ `;
1099
+ var RunsContainer = styled8__default.default.div`
1100
+ display: flex;
1101
+ flex-direction: column;
1102
+ gap: 20px;
1103
+ width: 100%;
1104
+ flex: 1;
1105
+ min-width: 0;
1106
+ overflow: hidden;
1107
+
1108
+ @media (max-width: 640px) {
1109
+ gap: 16px;
1110
+ }
1111
+ `;
1112
+ var BrowseButton = styled8__default.default.button`
1113
+ display: flex;
1114
+ align-items: center;
1115
+ gap: 12px;
1116
+ width: 100%;
1117
+ padding: 12px 16px;
1118
+ background-color: ${BG_SECONDARY};
1119
+ border: 1px solid ${BG_TERTIARY2};
1120
+ border-radius: 8px;
1121
+ color: ${TEXT_SECONDARY2};
1122
+ font-size: 14px;
1123
+ font-weight: 500;
1124
+ cursor: pointer;
1125
+ transition: all 0.2s ease;
1126
+ white-space: nowrap;
1127
+ overflow: hidden;
1128
+
1129
+ @media (max-width: 640px) {
1130
+ padding: 10px 12px;
1131
+ font-size: 13px;
1132
+ gap: 8px;
1133
+ }
1134
+
1135
+ &:hover {
1136
+ background-color: ${HOVER_BG2};
1137
+ color: ${TEXT_PRIMARY2};
1138
+ }
1139
+
1140
+ &:focus {
1141
+ outline: none;
1142
+ }
1143
+
1144
+ &:focus-visible {
1145
+ outline: 2px solid ${ACCENT_COLOR2};
1146
+ outline-offset: 2px;
1147
+ }
1148
+ `;
1149
+ var StyledDisclosureGroup = styled8__default.default(reactAriaComponents.DisclosureGroup)`
1150
+ display: flex;
1151
+ flex-direction: column;
1152
+ gap: 8px;
1153
+ width: 100%;
1154
+ flex: 1;
1155
+ min-width: 0;
1156
+ overflow: hidden;
1157
+ `;
1158
+ var CategoryDisclosure = styled8__default.default(reactAriaComponents.Disclosure)`
1159
+ background-color: transparent;
1160
+ display: flex;
1161
+ flex-direction: column;
1162
+ width: 100%;
1163
+ flex: 1;
1164
+ min-width: 0;
1165
+ overflow: hidden;
1166
+
1167
+ &[data-expanded] {
1168
+ /* Styles when expanded */
1169
+ }
1170
+
1171
+ &[data-disabled] {
1172
+ opacity: 0.5;
1173
+ cursor: not-allowed;
1174
+ }
1175
+ `;
1176
+ var CategoryHeader = styled8__default.default(reactAriaComponents.Button)`
1177
+ width: 100%;
1178
+ padding: 4px 0;
1179
+ background: none;
1180
+ border: none;
1181
+ color: ${TEXT_SECONDARY2};
1182
+ display: flex;
1183
+ justify-content: space-between;
1184
+ align-items: center;
1185
+ cursor: pointer;
1186
+ transition: color 0.2s ease;
1187
+ font-size: 12px;
1188
+ font-weight: 600;
1189
+ text-transform: uppercase;
1190
+ letter-spacing: 0.5px;
1191
+
1192
+ &:hover {
1193
+ color: ${TEXT_PRIMARY2};
1194
+ }
1195
+
1196
+ &:focus {
1197
+ outline: none;
1198
+ }
1199
+
1200
+ &[data-focus-visible] {
1201
+ outline: 2px solid ${ACCENT_COLOR2};
1202
+ outline-offset: 2px;
1203
+ border-radius: 4px;
1204
+ }
1205
+ `;
1206
+ var CategoryTitle = styled8__default.default.div`
1207
+ display: flex;
1208
+ align-items: center;
1209
+ gap: 8px;
1210
+
1211
+ @media (max-width: 640px) {
1212
+ gap: 6px;
1213
+ }
1214
+ `;
1215
+ styled8__default.default.img`
1216
+ width: 16px;
1217
+ height: 16px;
1218
+ opacity: 0.6;
1219
+ flex-shrink: 0;
1220
+
1221
+ @media (max-width: 640px) {
1222
+ width: 14px;
1223
+ height: 14px;
1224
+ }
1225
+ `;
1226
+ var HashtagIcon = styled8__default.default.img`
1227
+ width: 14px;
1228
+ height: 14px;
1229
+ opacity: 0.6;
1230
+ flex-shrink: 0;
1231
+
1232
+ @media (max-width: 640px) {
1233
+ width: 12px;
1234
+ height: 12px;
1235
+ }
1236
+ `;
1237
+ var ChevronIcon = styled8__default.default.div`
1238
+ display: flex;
1239
+ align-items: center;
1240
+ transition: transform 0.2s ease;
1241
+ transform: ${(props) => props.$isExpanded ? "rotate(0deg)" : "rotate(-90deg)"};
1242
+ flex-shrink: 0;
1243
+ margin-left: 4px;
1244
+
1245
+ img {
1246
+ width: 16px;
1247
+ height: 16px;
1248
+ opacity: 0.6;
1249
+ }
1250
+
1251
+ @media (max-width: 640px) {
1252
+ img {
1253
+ width: 14px;
1254
+ height: 14px;
1255
+ }
1256
+ }
1257
+ `;
1258
+ var CategoryDisclosurePanel = styled8__default.default(reactAriaComponents.DisclosurePanel)`
1259
+ display: flex;
1260
+ flex-direction: column;
1261
+ gap: 2px;
1262
+ padding-left: 4px;
1263
+ width: 100%;
1264
+ flex: 1;
1265
+ min-width: 0;
1266
+ overflow: hidden;
1267
+
1268
+ @media (max-width: 640px) {
1269
+ padding-left: 2px;
1270
+ }
1271
+
1272
+ &[data-entering] {
1273
+ animation: slideDown 0.2s ease;
1274
+ }
1275
+
1276
+ @keyframes slideDown {
1277
+ from {
1278
+ opacity: 0;
1279
+ transform: translateY(-8px);
1280
+ }
1281
+ to {
1282
+ opacity: 1;
1283
+ transform: translateY(0);
1284
+ }
1285
+ }
1286
+ `;
1287
+ var ItemContainer = styled8__default.default.div`
1288
+ display: flex;
1289
+ align-items: center;
1290
+ gap: 8px;
1291
+ padding: 4px 8px;
1292
+ border-radius: 4px;
1293
+ cursor: pointer;
1294
+ transition: background-color 0.1s ease;
1295
+ min-width: 0;
1296
+ overflow: hidden;
1297
+
1298
+ @media (max-width: 640px) {
1299
+ gap: 6px;
1300
+ padding: 4px 6px;
1301
+ }
1302
+
1303
+ &:hover {
1304
+ background-color: ${HOVER_BG2};
1305
+ }
1306
+ `;
1307
+ var ItemDisclosure = styled8__default.default(reactAriaComponents.Disclosure)`
1308
+ background-color: transparent;
1309
+ margin-bottom: 4px;
1310
+ display: flex;
1311
+ flex-direction: column;
1312
+ width: 100%;
1313
+ flex: 1;
1314
+ min-width: 0;
1315
+ overflow: hidden;
1316
+
1317
+ &[data-expanded] {
1318
+ background-color: ${BG_SECONDARY};
1319
+ border-radius: 8px;
1320
+ }
1321
+ `;
1322
+ var ItemHeader = styled8__default.default(reactAriaComponents.Button)`
1323
+ width: 100%;
1324
+ padding: 0;
1325
+ background: none;
1326
+ border: none;
1327
+ cursor: pointer;
1328
+ transition: all 0.1s ease;
1329
+
1330
+ &:focus {
1331
+ outline: none;
1332
+ }
1333
+
1334
+ &[data-focus-visible] {
1335
+ outline: 2px solid ${ACCENT_COLOR2};
1336
+ outline-offset: 2px;
1337
+ border-radius: 4px;
1338
+ }
1339
+ `;
1340
+ var ItemDisclosurePanel = styled8__default.default(reactAriaComponents.DisclosurePanel)`
1341
+ padding: 6px;
1342
+ background-color: ${BG_SECONDARY};
1343
+ border-radius: 0 0 8px 8px;
1344
+ margin-top: -4px;
1345
+ display: flex;
1346
+ flex-direction: column;
1347
+ flex: 1;
1348
+ min-width: 0;
1349
+ overflow: hidden;
1350
+
1351
+ @media (max-width: 640px) {
1352
+ padding: 6px;
1353
+ }
1354
+
1355
+ &[data-entering] {
1356
+ animation: slideDown 0.2s ease;
1357
+ }
1358
+
1359
+ @keyframes slideDown {
1360
+ from {
1361
+ opacity: 0;
1362
+ transform: translateY(-8px);
1363
+ }
1364
+ to {
1365
+ opacity: 1;
1366
+ transform: translateY(0);
1367
+ }
1368
+ }
1369
+ `;
1370
+ var ItemIcon = styled8__default.default.img`
1371
+ width: 20px;
1372
+ height: 20px;
1373
+ opacity: 0.6;
1374
+ flex-shrink: 0;
1375
+
1376
+ @media (max-width: 640px) {
1377
+ width: 18px;
1378
+ height: 18px;
1379
+ }
1380
+ `;
1381
+ var ItemName = styled8__default.default.span`
1382
+ flex: 1;
1383
+ font-size: 14px;
1384
+ color: ${(props) => props.$dimmed ? TEXT_MUTED2 : TEXT_SECONDARY2};
1385
+ font-weight: ${(props) => props.$dimmed ? "normal" : "500"};
1386
+ overflow: hidden;
1387
+ text-overflow: ellipsis;
1388
+ white-space: nowrap;
1389
+ min-width: 0;
1390
+
1391
+ @media (max-width: 640px) {
1392
+ font-size: 13px;
1393
+ }
1394
+
1395
+ ${ItemContainer}:hover & {
1396
+ color: ${(props) => props.$dimmed ? TEXT_SECONDARY2 : TEXT_PRIMARY2};
1397
+ }
1398
+ `;
1399
+ var RunStatus = styled8__default.default.span`
1400
+ font-size: 14px;
1401
+ font-weight: 500;
1402
+ flex-shrink: 0;
1403
+ margin-left: auto;
1404
+ color: ${(props) => {
1405
+ switch (props.$status) {
1406
+ case "completed":
1407
+ return "#10b981";
1408
+ // green
1409
+ case "running":
1410
+ return "#f59e0b";
1411
+ // yellow
1412
+ case "failed":
1413
+ return "#ef4444";
1414
+ // red
1415
+ default:
1416
+ return TEXT_SECONDARY2;
1417
+ }
1418
+ }};
1419
+
1420
+ @media (max-width: 640px) {
1421
+ font-size: 12px;
1422
+ }
1423
+ `;
1424
+ styled8__default.default.div`
1425
+ margin-bottom: 12px;
1426
+ border-radius: 12px;
1427
+ background-color: ${BG_SECONDARY};
1428
+ overflow: hidden;
1429
+ `;
1430
+ styled8__default.default.button`
1431
+ width: 100%;
1432
+ padding: 16px;
1433
+ background: ${BG_SECONDARY};
1434
+ border: none;
1435
+ color: ${TEXT_PRIMARY2};
1436
+ display: flex;
1437
+ justify-content: space-between;
1438
+ align-items: center;
1439
+ cursor: pointer;
1440
+ transition: background-color 0.2s ease;
1441
+ text-align: left;
1442
+
1443
+ &:hover {
1444
+ background-color: ${HOVER_BG2};
1445
+ }
1446
+
1447
+ &:focus {
1448
+ outline: none;
1449
+ }
1450
+
1451
+ &:focus-visible {
1452
+ outline: 2px solid ${ACCENT_COLOR2};
1453
+ outline-offset: -2px;
1454
+ }
1455
+
1456
+ > div {
1457
+ flex: 1;
1458
+ }
1459
+
1460
+ strong {
1461
+ display: block;
1462
+ font-size: 14px;
1463
+ margin-bottom: 4px;
1464
+ }
1465
+ `;
1466
+ styled8__default.default.span`
1467
+ font-size: 12px;
1468
+ color: ${TEXT_SECONDARY2};
1469
+ transition: transform 0.2s ease;
1470
+ transform: ${(props) => props.$isExpanded ? "rotate(180deg)" : "rotate(0deg)"};
1471
+ `;
1472
+ styled8__default.default.div`
1473
+ padding: 16px;
1474
+ padding-top: 0;
1475
+ background-color: ${BG_TERTIARY2};
1476
+ color: ${TEXT_SECONDARY2};
1477
+ font-size: 13px;
1478
+ line-height: 1.6;
1479
+ animation: slideDown 0.2s ease;
1480
+
1481
+ @keyframes slideDown {
1482
+ from {
1483
+ opacity: 0;
1484
+ transform: translateY(-8px);
1485
+ }
1486
+ to {
1487
+ opacity: 1;
1488
+ transform: translateY(0);
1489
+ }
1490
+ }
1491
+ `;
1492
+ var MeterContainer = styled8__default.default.div`
1493
+ max-width: 600px;
1494
+ margin: 0 auto;
1495
+ `;
1496
+ var MeterLabel = styled8__default.default.div`
1497
+ font-size: 16px;
1498
+ font-weight: 600;
1499
+ margin-bottom: 16px;
1500
+ color: ${TEXT_PRIMARY2};
1501
+ `;
1502
+ var MeterBar = styled8__default.default.div`
1503
+ width: 100%;
1504
+ height: 24px;
1505
+ background-color: ${BG_SECONDARY};
1506
+ border-radius: 12px;
1507
+ overflow: hidden;
1508
+ position: relative;
1509
+ margin-bottom: 12px;
1510
+ `;
1511
+ var MeterFill = styled8__default.default.div`
1512
+ height: 100%;
1513
+ width: ${(props) => props.$percentage}%;
1514
+ background: linear-gradient(90deg, ${(props) => props.$color}dd, ${(props) => props.$color});
1515
+ border-radius: 12px;
1516
+ transition: width 0.3s ease, background 0.3s ease;
1517
+ position: relative;
1518
+
1519
+ &::after {
1520
+ content: '';
1521
+ position: absolute;
1522
+ top: 0;
1523
+ left: 0;
1524
+ right: 0;
1525
+ bottom: 0;
1526
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
1527
+ animation: shimmer 2s infinite;
1528
+ }
1529
+
1530
+ @keyframes shimmer {
1531
+ 0% {
1532
+ transform: translateX(-100%);
1533
+ }
1534
+ 100% {
1535
+ transform: translateX(100%);
1536
+ }
1537
+ }
1538
+ `;
1539
+ var MeterStats = styled8__default.default.div`
1540
+ font-size: 14px;
1541
+ color: ${TEXT_SECONDARY2};
1542
+ text-align: center;
1543
+
1544
+ small {
1545
+ font-size: 12px;
1546
+ color: ${TEXT_SECONDARY2};
1547
+ opacity: 0.8;
1548
+ }
1549
+ `;
1550
+ var ConnectionsContainer = styled8__default.default.div`
1551
+ max-width: 500px;
1552
+ margin: 0 auto;
1553
+ text-align: center;
1554
+ `;
1555
+ var ConnectionDescription = styled8__default.default.p`
1556
+ font-size: 14px;
1557
+ color: ${TEXT_SECONDARY2};
1558
+ line-height: 1.6;
1559
+ margin-bottom: 24px;
1560
+ `;
1561
+ var GoogleButton = styled8__default.default.button`
1562
+ width: 100%;
1563
+ padding: 16px 24px;
1564
+ font-size: 15px;
1565
+ font-weight: 600;
1566
+ color: ${(props) => props.$isConnected ? TEXT_PRIMARY2 : "#FFFFFF"};
1567
+ background: ${(props) => props.$isConnected ? BG_TERTIARY2 : "linear-gradient(135deg, #4285F4, #34A853)"};
1568
+ border: none;
1569
+ border-radius: 8px;
1570
+ cursor: pointer;
1571
+ transition: all 0.2s ease;
1572
+ display: flex;
1573
+ align-items: center;
1574
+ justify-content: center;
1575
+ gap: 8px;
1576
+
1577
+ &:hover {
1578
+ transform: translateY(-2px);
1579
+ box-shadow: 0 4px 12px rgba(66, 133, 244, 0.3);
1580
+ }
1581
+
1582
+ &:active {
1583
+ transform: translateY(0);
1584
+ }
1585
+
1586
+ &:focus {
1587
+ outline: none;
1588
+ }
1589
+
1590
+ &:focus-visible {
1591
+ outline: 2px solid ${ACCENT_COLOR2};
1592
+ outline-offset: 2px;
1593
+ }
1594
+
1595
+ ${(props) => props.$isConnected && `
1596
+ &:hover {
1597
+ background-color: #ef4444;
1598
+ box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
1599
+ }
1600
+ `}
1601
+ `;
1602
+ var ICONS = {
1603
+ hashtag: "/assets/icon-set/Icon-hashtag.svg",
1604
+ bell: "/assets/icon-set/Icon-bell-fill.svg",
1605
+ file: "/assets/icon-set/Icon-file-3-fill.svg",
1606
+ link: "/assets/icon-set/Icon-external-link-fill.svg",
1607
+ chat: "/assets/icon-set/Icon-chat-1-fill.svg",
1608
+ community: "/assets/icon-set/Icon-community-fill.svg",
1609
+ cpu: "/assets/icon-set/Icon-cpu-fill.svg",
1610
+ chevronDown: "/assets/icon-set/Icon-arrow-down-s-fill.svg",
1611
+ warning: "/assets/icon-set/Icon-error-warning-fill.svg"
1612
+ };
1613
+ function ItemWithLogs({ run }) {
1614
+ const [isExpanded, setIsExpanded] = react.useState(false);
1615
+ const logSections = run.logs ? [
1616
+ {
1617
+ title: "Action History",
1618
+ items: run.logs.map((log) => ({
1619
+ id: log.id,
1620
+ text: log.text,
1621
+ icon: log.icon,
1622
+ iconColor: log.iconColor,
1623
+ timestamp: log.timestamp
1624
+ }))
1625
+ }
1626
+ ] : [];
1627
+ return /* @__PURE__ */ jsxRuntime.jsxs(ItemDisclosure, { id: run.id, children: [
1628
+ /* @__PURE__ */ jsxRuntime.jsx(
1629
+ ItemHeader,
1630
+ {
1631
+ slot: "trigger",
1632
+ onClick: () => setIsExpanded(!isExpanded),
1633
+ $isExpanded: isExpanded,
1634
+ children: /* @__PURE__ */ jsxRuntime.jsxs(ItemContainer, { as: "div", children: [
1635
+ /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { src: ICONS[run.icon || "bell"], alt: "" }),
1636
+ /* @__PURE__ */ jsxRuntime.jsx(ItemName, { children: run.name }),
1637
+ /* @__PURE__ */ jsxRuntime.jsxs(RunStatus, { $status: run.status, children: [
1638
+ run.status === "completed" && "\u2713",
1639
+ run.status === "running" && "\u27F3",
1640
+ run.status === "failed" && "\u2715"
1641
+ ] }),
1642
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronIcon, { $isExpanded: isExpanded, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ICONS.chevronDown, alt: "" }) })
1643
+ ] })
1644
+ }
1645
+ ),
1646
+ isExpanded && /* @__PURE__ */ jsxRuntime.jsx(ItemDisclosurePanel, { children: run.logs && run.logs.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(DarkNotificationCard, { sections: logSections }) : /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: "#72767D", fontSize: "13px", padding: "8px" }, children: "No action logs available" }) })
1647
+ ] });
1648
+ }
1649
+ function RunsTabContent({
1650
+ runs,
1651
+ onBrowseAutomations
1652
+ }) {
1653
+ const [expandedKeys, setExpandedKeys] = react.useState(
1654
+ /* @__PURE__ */ new Set(["scheduled", "completed", "issues"])
1655
+ // All sections open by default
1656
+ );
1657
+ const scheduledRuns = runs.filter((r) => r.category === "scheduled");
1658
+ const completedRuns = runs.filter((r) => r.category === "completed");
1659
+ const issuesRuns = runs.filter((r) => r.category === "issues");
1660
+ const buttonRef = react.useRef(null);
1661
+ const { buttonProps } = button.useButton(
1662
+ {
1663
+ onPress: onBrowseAutomations
1664
+ },
1665
+ buttonRef
1666
+ );
1667
+ return /* @__PURE__ */ jsxRuntime.jsxs(RunsContainer, { children: [
1668
+ /* @__PURE__ */ jsxRuntime.jsxs(BrowseButton, { ...buttonProps, ref: buttonRef, children: [
1669
+ /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { src: ICONS.cpu, alt: "" }),
1670
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Browse Automations" })
1671
+ ] }),
1672
+ /* @__PURE__ */ jsxRuntime.jsxs(
1673
+ StyledDisclosureGroup,
1674
+ {
1675
+ expandedKeys,
1676
+ onExpandedChange: setExpandedKeys,
1677
+ allowsMultipleExpanded: true,
1678
+ "aria-label": "Run sections",
1679
+ children: [
1680
+ /* @__PURE__ */ jsxRuntime.jsxs(CategoryDisclosure, { id: "scheduled", children: [
1681
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Heading, { level: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(CategoryHeader, { slot: "trigger", children: [
1682
+ /* @__PURE__ */ jsxRuntime.jsxs(CategoryTitle, { children: [
1683
+ /* @__PURE__ */ jsxRuntime.jsx(HashtagIcon, { src: ICONS.hashtag, alt: "" }),
1684
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "SCHEDULED" })
1685
+ ] }),
1686
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronIcon, { $isExpanded: expandedKeys.has("scheduled"), children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ICONS.chevronDown, alt: "" }) })
1687
+ ] }) }),
1688
+ /* @__PURE__ */ jsxRuntime.jsx(CategoryDisclosurePanel, { children: scheduledRuns.length > 0 ? scheduledRuns.map((run) => /* @__PURE__ */ jsxRuntime.jsx(ItemWithLogs, { run }, run.id)) : /* @__PURE__ */ jsxRuntime.jsx(ItemContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(ItemName, { $dimmed: true, children: "No scheduled items" }) }) })
1689
+ ] }),
1690
+ /* @__PURE__ */ jsxRuntime.jsxs(CategoryDisclosure, { id: "completed", children: [
1691
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Heading, { level: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(CategoryHeader, { slot: "trigger", children: [
1692
+ /* @__PURE__ */ jsxRuntime.jsxs(CategoryTitle, { children: [
1693
+ /* @__PURE__ */ jsxRuntime.jsx(HashtagIcon, { src: ICONS.hashtag, alt: "" }),
1694
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "COMPLETED" })
1695
+ ] }),
1696
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronIcon, { $isExpanded: expandedKeys.has("completed"), children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ICONS.chevronDown, alt: "" }) })
1697
+ ] }) }),
1698
+ /* @__PURE__ */ jsxRuntime.jsx(CategoryDisclosurePanel, { children: completedRuns.length > 0 ? completedRuns.map((run) => /* @__PURE__ */ jsxRuntime.jsx(ItemWithLogs, { run }, run.id)) : /* @__PURE__ */ jsxRuntime.jsx(ItemContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(ItemName, { $dimmed: true, children: "No completed items" }) }) })
1699
+ ] }),
1700
+ /* @__PURE__ */ jsxRuntime.jsxs(CategoryDisclosure, { id: "issues", children: [
1701
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Heading, { level: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(CategoryHeader, { slot: "trigger", children: [
1702
+ /* @__PURE__ */ jsxRuntime.jsxs(CategoryTitle, { children: [
1703
+ /* @__PURE__ */ jsxRuntime.jsx(HashtagIcon, { src: ICONS.hashtag, alt: "" }),
1704
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "ISSUES" })
1705
+ ] }),
1706
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronIcon, { $isExpanded: expandedKeys.has("issues"), children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: ICONS.chevronDown, alt: "" }) })
1707
+ ] }) }),
1708
+ /* @__PURE__ */ jsxRuntime.jsx(CategoryDisclosurePanel, { children: issuesRuns.length > 0 ? issuesRuns.map((run) => /* @__PURE__ */ jsxRuntime.jsx(ItemWithLogs, { run }, run.id)) : /* @__PURE__ */ jsxRuntime.jsx(ItemContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(ItemName, { $dimmed: true, children: "No issues" }) }) })
1709
+ ] })
1710
+ ]
1711
+ }
1712
+ )
1713
+ ] });
1714
+ }
1715
+ function UsageTabContent({
1716
+ currentUsage = 0,
1717
+ maxUsage = 1e5
1718
+ }) {
1719
+ const ref = react.useRef(null);
1720
+ const { meterProps, labelProps } = meter.useMeter({
1721
+ label: "Token Usage",
1722
+ value: currentUsage,
1723
+ minValue: 0,
1724
+ maxValue: maxUsage
1725
+ });
1726
+ const percentage = Math.round(currentUsage / maxUsage * 100);
1727
+ let color = "#10b981";
1728
+ if (percentage >= 75)
1729
+ color = "#ef4444";
1730
+ else if (percentage >= 50) color = "#f59e0b";
1731
+ return /* @__PURE__ */ jsxRuntime.jsxs(MeterContainer, { children: [
1732
+ /* @__PURE__ */ jsxRuntime.jsx(MeterLabel, { ...labelProps, children: "Token Usage" }),
1733
+ /* @__PURE__ */ jsxRuntime.jsx(MeterBar, { ...meterProps, ref, children: /* @__PURE__ */ jsxRuntime.jsx(MeterFill, { $percentage: percentage, $color: color }) }),
1734
+ /* @__PURE__ */ jsxRuntime.jsxs(MeterStats, { children: [
1735
+ percentage,
1736
+ "% of ",
1737
+ maxUsage.toLocaleString(),
1738
+ " tokens used",
1739
+ /* @__PURE__ */ jsxRuntime.jsx("br", {}),
1740
+ /* @__PURE__ */ jsxRuntime.jsxs("small", { children: [
1741
+ currentUsage.toLocaleString(),
1742
+ " / ",
1743
+ maxUsage.toLocaleString(),
1744
+ " tokens"
1745
+ ] })
1746
+ ] })
1747
+ ] });
1748
+ }
1749
+ function ConnectionsTabContent({
1750
+ isGoogleConnected = false,
1751
+ onGoogleConnect,
1752
+ onGoogleDisconnect
1753
+ }) {
1754
+ const ref = react.useRef(null);
1755
+ const { buttonProps } = button.useButton(
1756
+ {
1757
+ onPress: isGoogleConnected ? onGoogleDisconnect : onGoogleConnect
1758
+ },
1759
+ ref
1760
+ );
1761
+ return /* @__PURE__ */ jsxRuntime.jsxs(ConnectionsContainer, { children: [
1762
+ /* @__PURE__ */ jsxRuntime.jsx(ConnectionDescription, { children: isGoogleConnected ? "Your Google account is connected. You can access Google services and data." : "Connect your Google account to access Google services and integrate with your workflows." }),
1763
+ /* @__PURE__ */ jsxRuntime.jsx(GoogleButton, { ...buttonProps, ref, $isConnected: isGoogleConnected, children: isGoogleConnected ? "\u2713 Disconnect from Google" : "Connect with Google" })
1764
+ ] });
1765
+ }
1766
+ function Tab({ item, state }) {
1767
+ const ref = react.useRef(null);
1768
+ const { tabProps } = tabs$1.useTab({ key: item.key }, state, ref);
1769
+ return /* @__PURE__ */ jsxRuntime.jsx(TabButton, { ...tabProps, ref, $isSelected: state.selectedKey === item.key, children: item.rendered });
1770
+ }
1771
+ function TabList({
1772
+ state,
1773
+ ...props
1774
+ }) {
1775
+ const ref = react.useRef(null);
1776
+ const { tabListProps } = tabs$1.useTabList(props, state, ref);
1777
+ return /* @__PURE__ */ jsxRuntime.jsx(TabListWrapper, { ...tabListProps, ref, children: [...state.collection].map((item) => /* @__PURE__ */ jsxRuntime.jsx(Tab, { item, state }, item.key)) });
1778
+ }
1779
+ function TabPanel({
1780
+ state,
1781
+ ...props
1782
+ }) {
1783
+ const ref = react.useRef(null);
1784
+ const { tabPanelProps } = tabs$1.useTabPanel(props, state, ref);
1785
+ return /* @__PURE__ */ jsxRuntime.jsx(TabPanelWrapper, { ...tabPanelProps, ref, children: state.selectedItem?.props.children });
1786
+ }
1787
+ function PaneMenus({
1788
+ activeTab = "runs",
1789
+ onTabChange,
1790
+ runs = [],
1791
+ currentUsage = 0,
1792
+ maxUsage = 1e5,
1793
+ isGoogleConnected = false,
1794
+ onGoogleConnect,
1795
+ onGoogleDisconnect,
1796
+ onBrowseAutomations
1797
+ }) {
1798
+ const state = tabs.useTabListState({
1799
+ defaultSelectedKey: activeTab,
1800
+ onSelectionChange: (key) => {
1801
+ if (onTabChange) {
1802
+ onTabChange(key);
1803
+ }
1804
+ },
1805
+ children: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1806
+ /* @__PURE__ */ jsxRuntime.jsx(collections.Item, { title: "Runs", children: /* @__PURE__ */ jsxRuntime.jsx(RunsTabContent, { runs, onBrowseAutomations }) }, "runs"),
1807
+ /* @__PURE__ */ jsxRuntime.jsx(collections.Item, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(UsageTabContent, { currentUsage, maxUsage }) }, "usage"),
1808
+ /* @__PURE__ */ jsxRuntime.jsx(collections.Item, { title: "Connections", children: /* @__PURE__ */ jsxRuntime.jsx(
1809
+ ConnectionsTabContent,
1810
+ {
1811
+ isGoogleConnected,
1812
+ onGoogleConnect,
1813
+ onGoogleDisconnect
1814
+ }
1815
+ ) }, "connections")
1816
+ ] })
1817
+ });
1818
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container6, { children: [
1819
+ /* @__PURE__ */ jsxRuntime.jsx(TabList, { state, "aria-label": "Main pane menu" }),
1820
+ /* @__PURE__ */ jsxRuntime.jsx(TabPanel, { state }, state.selectedItem?.key)
1821
+ ] });
1822
+ }
1823
+ var HEADER_BG = "#202225";
1824
+ var HEADER_BG_DARK = "#18191c";
1825
+ var BUTTON_BG = "#36393f";
1826
+ var BUTTON_BG_HOVER = "#40444b";
1827
+ var breakpoints = {
1828
+ xs: "640px",
1829
+ sm: "768px",
1830
+ md: "1024px",
1831
+ lg: "1280px"
1832
+ };
1833
+ var Container7 = styled8__default.default.header`
1834
+ position: relative;
1835
+ width: 100%;
1836
+ height: 56px;
1837
+ background-color: ${HEADER_BG};
1838
+ overflow: hidden;
1839
+ display: flex;
1840
+ align-items: center;
1841
+ justify-content: center;
1842
+
1843
+ /* Background pattern - responsive sizes */
1844
+ &::before {
1845
+ content: '';
1846
+ position: absolute;
1847
+ top: 0;
1848
+ left: 0;
1849
+ right: 0;
1850
+ bottom: 0;
1851
+ background-image: url('/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg');
1852
+ background-size: cover;
1853
+ background-position: center;
1854
+ background-repeat: no-repeat;
1855
+ opacity: 0.6;
1856
+ z-index: 0;
1857
+ }
1858
+
1859
+ /* Small screens */
1860
+ @media (min-width: ${breakpoints.xs}) {
1861
+ &::before {
1862
+ background-image: url('/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg');
1863
+ }
1864
+ }
1865
+
1866
+ /* Medium screens */
1867
+ @media (min-width: ${breakpoints.sm}) {
1868
+ height: 64px;
1869
+
1870
+ &::before {
1871
+ background-image: url('/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg');
1872
+ }
1873
+ }
1874
+
1875
+ /* Large screens */
1876
+ @media (min-width: ${breakpoints.md}) {
1877
+ &::before {
1878
+ background-image: url('/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg');
1879
+ }
1880
+ }
1881
+
1882
+ /* Extra large screens */
1883
+ @media (min-width: ${breakpoints.lg}) {
1884
+ &::before {
1885
+ background-image: url('/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg');
1886
+ }
1887
+ }
1888
+
1889
+ /* Dark theme support */
1890
+ @media (prefers-color-scheme: dark) {
1891
+ background-color: ${HEADER_BG_DARK};
1892
+ }
1893
+ `;
1894
+ var BrandLogo = styled8__default.default.img`
1895
+ position: relative;
1896
+ z-index: 1;
1897
+ max-height: 28px;
1898
+ height: auto;
1899
+ width: auto;
1900
+ object-fit: contain;
1901
+ pointer-events: none;
1902
+ user-select: none;
1903
+
1904
+ /* Slightly larger on desktop */
1905
+ @media (min-width: ${breakpoints.sm}) {
1906
+ max-height: 32px;
1907
+ }
1908
+ `;
1909
+ var SettingsButton = styled8__default.default.button`
1910
+ position: absolute;
1911
+ top: 50%;
1912
+ right: 12px;
1913
+ transform: translateY(-50%);
1914
+ z-index: 2;
1915
+
1916
+ /* Button appearance */
1917
+ width: 40px;
1918
+ height: 40px;
1919
+ border-radius: 50%;
1920
+ border: none;
1921
+ background-color: ${BUTTON_BG};
1922
+ cursor: pointer;
1923
+
1924
+ /* Center the icon */
1925
+ display: flex;
1926
+ align-items: center;
1927
+ justify-content: center;
1928
+
1929
+ /* Smooth transitions */
1930
+ transition: background-color 0.2s ease, transform 0.1s ease;
1931
+
1932
+ /* Hover state */
1933
+ &:hover {
1934
+ background-color: ${BUTTON_BG_HOVER};
1935
+ }
1936
+
1937
+ /* Active state */
1938
+ &:active {
1939
+ transform: translateY(-50%) scale(0.95);
1940
+ }
1941
+
1942
+ /* Focus visible state for accessibility */
1943
+ &:focus-visible {
1944
+ outline: 2px solid #5865f2;
1945
+ outline-offset: 2px;
1946
+ }
1947
+
1948
+ /* Disabled state */
1949
+ &:disabled {
1950
+ opacity: 0.5;
1951
+ cursor: not-allowed;
1952
+ }
1953
+
1954
+ /* Responsive positioning */
1955
+ @media (min-width: ${breakpoints.sm}) {
1956
+ right: 16px;
1957
+ }
1958
+
1959
+ @media (min-width: ${breakpoints.md}) {
1960
+ right: 24px;
1961
+ }
1962
+ `;
1963
+ var BackButton2 = styled8__default.default.button`
1964
+ position: absolute;
1965
+ top: 50%;
1966
+ left: 12px;
1967
+ transform: translateY(-50%);
1968
+ z-index: 2;
1969
+
1970
+ /* Button appearance */
1971
+ width: 40px;
1972
+ height: 40px;
1973
+ border-radius: 50%;
1974
+ border: none;
1975
+ background-color: ${BUTTON_BG};
1976
+ cursor: pointer;
1977
+
1978
+ /* Center the icon */
1979
+ display: flex;
1980
+ align-items: center;
1981
+ justify-content: center;
1982
+
1983
+ /* Smooth transitions */
1984
+ transition: background-color 0.2s ease, transform 0.1s ease;
1985
+
1986
+ /* Hover state */
1987
+ &:hover {
1988
+ background-color: ${BUTTON_BG_HOVER};
1989
+ }
1990
+
1991
+ /* Active state */
1992
+ &:active {
1993
+ transform: translateY(-50%) scale(0.95);
1994
+ }
1995
+
1996
+ /* Focus visible state for accessibility */
1997
+ &:focus-visible {
1998
+ outline: 2px solid #5865f2;
1999
+ outline-offset: 2px;
2000
+ }
2001
+
2002
+ /* Disabled state */
2003
+ &:disabled {
2004
+ opacity: 0.5;
2005
+ cursor: not-allowed;
2006
+ }
2007
+
2008
+ /* Responsive positioning */
2009
+ @media (min-width: ${breakpoints.sm}) {
2010
+ left: 16px;
2011
+ }
2012
+
2013
+ @media (min-width: ${breakpoints.md}) {
2014
+ left: 24px;
2015
+ }
2016
+ `;
2017
+ function PaneSectionHeader({
2018
+ brand = "Google",
2019
+ onBackClick,
2020
+ onSettingsClick,
2021
+ className,
2022
+ "aria-label": ariaLabel = "Pane section header"
2023
+ }) {
2024
+ const [isBackHovered, setIsBackHovered] = react.useState(false);
2025
+ const [isSettingsHovered, setIsSettingsHovered] = react.useState(false);
2026
+ const backButtonRef = react.useRef(null);
2027
+ const settingsButtonRef = react.useRef(null);
2028
+ const { buttonProps: backButtonProps } = button.useButton(
2029
+ {
2030
+ onPress: onBackClick,
2031
+ "aria-label": "Go back"
2032
+ },
2033
+ backButtonRef
2034
+ );
2035
+ const { buttonProps: settingsButtonProps } = button.useButton(
2036
+ {
2037
+ onPress: onSettingsClick,
2038
+ "aria-label": "Settings"
2039
+ },
2040
+ settingsButtonRef
2041
+ );
2042
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container7, { className, role: "banner", "aria-label": ariaLabel, children: [
2043
+ onBackClick && /* @__PURE__ */ jsxRuntime.jsx(
2044
+ BackButton2,
2045
+ {
2046
+ ...backButtonProps,
2047
+ ref: backButtonRef,
2048
+ onMouseEnter: () => setIsBackHovered(true),
2049
+ onMouseLeave: () => setIsBackHovered(false),
2050
+ $isHovered: isBackHovered,
2051
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-left-fill", size: 20, color: "#b9bbbe" })
2052
+ }
2053
+ ),
2054
+ /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { src: `/assets/bg-set/brand-logos/${brand}2.svg`, alt: brand }),
2055
+ /* @__PURE__ */ jsxRuntime.jsx(
2056
+ SettingsButton,
2057
+ {
2058
+ ...settingsButtonProps,
2059
+ ref: settingsButtonRef,
2060
+ onMouseEnter: () => setIsSettingsHovered(true),
2061
+ onMouseLeave: () => setIsSettingsHovered(false),
2062
+ $isHovered: isSettingsHovered,
2063
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2064
+ Icon,
2065
+ {
2066
+ name: isSettingsHovered ? "settings-line" : "settings-fill",
2067
+ size: 20,
2068
+ color: "#b9bbbe"
2069
+ }
2070
+ )
2071
+ }
2072
+ )
2073
+ ] });
2074
+ }
2075
+ PaneSectionHeader.displayName = "PaneSectionHeader";
2076
+ var NAV_BG3 = "#36393F";
2077
+ var NAV_BG_HOVER = "#40444b";
2078
+ var Container8 = styled8__default.default.button`
2079
+ /* Base button styling */
2080
+ width: 48px;
2081
+ height: 48px;
2082
+ border: none;
2083
+ padding: 4px;
2084
+ border-radius: ${({ $active }) => $active ? "16px" : "50%"};
2085
+ background-color: ${NAV_BG3};
2086
+ display: flex;
2087
+ align-items: center;
2088
+ justify-content: center;
2089
+ cursor: pointer;
2090
+ transition: all 0.15s ease-out;
2091
+ position: relative;
2092
+ overflow: hidden;
2093
+
2094
+ /* Hover state */
2095
+ &:hover {
2096
+ border-radius: 16px;
2097
+ background-color: ${NAV_BG_HOVER};
2098
+ }
2099
+
2100
+ /* Focus visible state for accessibility */
2101
+ &:focus-visible {
2102
+ outline: 2px solid #5865f2;
2103
+ outline-offset: 2px;
2104
+ }
2105
+
2106
+ /* Active indicator */
2107
+ ${({ $active }) => $active && `
2108
+ &::before {
2109
+ content: '';
2110
+ position: absolute;
2111
+ left: -16px;
2112
+ top: 50%;
2113
+ transform: translateY(-50%);
2114
+ width: 4px;
2115
+ height: 40px;
2116
+ background-color: #ffffff;
2117
+ border-radius: 0 4px 4px 0;
2118
+ }
2119
+ `}
2120
+
2121
+ /* Disabled state */
2122
+ &:disabled {
2123
+ opacity: 0.5;
2124
+ cursor: not-allowed;
2125
+ }
2126
+ `;
2127
+ var LogoImage = styled8__default.default.img`
2128
+ width: 100%;
2129
+ height: 100%;
2130
+ object-fit: contain;
2131
+ pointer-events: none;
2132
+ user-select: none;
2133
+ `;
2134
+ function ServiceIcon({ brand, active = false, className, ...ariaProps }) {
2135
+ const ref = react.useRef(null);
2136
+ const { buttonProps } = button.useButton(
2137
+ {
2138
+ ...ariaProps,
2139
+ "aria-pressed": active
2140
+ },
2141
+ ref
2142
+ );
2143
+ return /* @__PURE__ */ jsxRuntime.jsx(Container8, { ...buttonProps, ref, $active: active, className, children: /* @__PURE__ */ jsxRuntime.jsx(LogoImage, { src: `/assets/icons/Brand/${brand}.svg`, alt: brand }) });
2144
+ }
2145
+ ServiceIcon.displayName = "ServiceIcon";
2146
+
2147
+ exports.ActionButtons = ActionButtons;
2148
+ exports.Icon = Icon;
2149
+ exports.IconNames = IconNames;
2150
+ exports.Layout = Layout;
2151
+ exports.NavHorizontal = NavHorizontal;
2152
+ exports.NavVertical = NavVertical;
2153
+ exports.PaneMenus = PaneMenus;
2154
+ exports.PaneSectionHeader = PaneSectionHeader;
2155
+ exports.ServiceIcon = ServiceIcon;
2156
+ exports.WorkflowStatusCard = WorkflowStatusCard;
2157
+ //# sourceMappingURL=chunk-KNSPBTTJ.cjs.map
2158
+ //# sourceMappingURL=chunk-KNSPBTTJ.cjs.map