@burdenoff/microfe-vibecontrols 2026.601.23 → 2026.602.2
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.
- package/dist/components/tunnels/TunnelCreateWizard.js +1 -1
- package/dist/components/tunnels/TunnelCreateWizard.js.map +1 -1
- package/dist/components/vibes/DeleteVibeDialog.js +130 -0
- package/dist/components/vibes/DeleteVibeDialog.js.map +1 -0
- package/dist/components/vibes/VibeCard.js +64 -56
- package/dist/components/vibes/VibeCard.js.map +1 -1
- package/dist/components/vibes/VibeList.js +132 -113
- package/dist/components/vibes/VibeList.js.map +1 -1
- package/dist/components/vibes/index.js +1 -0
- package/dist/generated/wspace-operations.js +2 -2
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +560 -523
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/VibesPage.js +311 -280
- package/dist/pages/VibesPage.js.map +1 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js +192 -80
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VibeCard.js","names":[],"sources":["../../../src/components/vibes/VibeCard.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { FC } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n FolderOpen,\n GitBranch,\n MoreVertical,\n Play,\n Archive,\n Settings,\n Tag,\n ExternalLink,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport type { Vibe } from './types';\nimport { vibeTypeIcons } from './icons';\nimport { StatusBadge } from '../shared/StatusBadge';\nimport { SelectionCheckbox } from '../shared/SelectionCheckbox';\nimport { cardHoverVariants } from '../shared/cardMotion';\n\nexport interface VibeCardProps {\n vibe: Vibe;\n onOpen?: (vibe: Vibe) => void;\n onEdit?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n className?: string;\n selected?: boolean;\n onToggleSelect?: (checked: boolean) => void;\n}\n\n/**\n * VibeCard - Display project/vibe information\n */\nexport const VibeCard: FC<VibeCardProps> = ({\n vibe,\n onOpen,\n onEdit,\n onArchive,\n onActivate,\n onOpenInEditor,\n className = '',\n selected = false,\n onToggleSelect,\n}) => {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n const [showMenu, setShowMenu] = useState(false);\n const Icon = vibeTypeIcons[vibe.type] || FolderOpen;\n\n return (\n <motion.div\n initial=\"rest\"\n animate=\"rest\"\n whileHover=\"hover\"\n whileTap=\"tap\"\n variants={cardHoverVariants}\n className={`bg-bg-surface border rounded-lg p-4 hover:border-border-strong transition-colors cursor-pointer ${\n selected\n ? 'border-action-primary-bg ring-1 ring-action-primary-bg/25'\n : 'border-border-default'\n } ${className}`}\n onClick={() => onOpen?.(vibe)}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex items-start gap-2 sm:gap-3 min-w-0 flex-1\">\n {onToggleSelect && (\n <div onClick={(event) => event.stopPropagation()}>\n <SelectionCheckbox\n checked={selected}\n onChange={onToggleSelect}\n ariaLabel={`Select vibe ${vibe.name}`}\n className=\"mt-2\"\n />\n </div>\n )}\n <div className=\"flex-shrink-0 size-8 sm:w-10 sm:h-10 rounded-lg bg-action-primary-bg/10 flex items-center justify-center\">\n <Icon className=\"size-4 sm:w-5 sm:h-5 text-action-primary-bg\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"font-semibold text-text-primary truncate text-sm sm:text-base\">\n {vibe.name}\n </h3>\n {vibe.description && (\n <p className=\"text-xs sm:text-sm text-text-secondary truncate\">{vibe.description}</p>\n )}\n </div>\n </div>\n {/* Status and Actions - always visible */}\n <div className=\"flex items-center gap-1 sm:gap-2 flex-shrink-0\">\n <StatusBadge status={vibe.status} />\n {(onEdit || onArchive || onActivate || onOpenInEditor) && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n className=\"p-1 sm:p-1.5 rounded hover:bg-bg-sunken transition-colors\"\n >\n <MoreVertical className=\"size-4 text-text-secondary\" />\n </button>\n <AnimatePresence>\n {showMenu && (\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: -4 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -4 }}\n transition={{ duration: 0.15 }}\n className=\"absolute right-0 mt-1 w-40 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10\"\n >\n {onActivate && vibe.status !== 'ACTIVE' && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onActivate(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg\"\n >\n <Play className=\"size-4\" />\n Activate\n </motion.button>\n )}\n {onEdit && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Settings className=\"size-4\" />\n Edit\n </motion.button>\n )}\n {onOpenInEditor && vibe.path && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onOpenInEditor(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <ExternalLink className=\"size-4\" />\n Open in VS Code\n </motion.button>\n )}\n {onArchive && vibe.status !== 'ARCHIVED' && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onArchive(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-b-lg\"\n >\n <Archive className=\"size-4\" />\n Archive\n </motion.button>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )}\n </div>\n </div>\n\n {vibe.description && (\n <p className=\"mt-2 text-sm text-text-secondary line-clamp-2\">{vibe.description}</p>\n )}\n\n {vibe.path && (\n <div className=\"mt-3 text-xs text-text-secondary font-mono bg-bg-sunken p-2 rounded truncate\">\n {vibe.path}\n </div>\n )}\n\n {vibe.gitBranch && (\n <div className=\"mt-2 flex items-center gap-2 text-sm text-text-secondary\">\n <GitBranch className=\"size-4\" />\n <span className=\"truncate\">{vibe.gitBranch}</span>\n {vibe.gitStatus && vibe.gitStatus !== 'clean' && (\n <span className=\"px-1.5 py-0.5 text-xs bg-status-warning-bg text-status-warning-text rounded\">\n {vibe.gitStatus}\n </span>\n )}\n </div>\n )}\n\n {vibe.tags && vibe.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1\">\n {vibe.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\"\n >\n <Tag className=\"size-3\" />\n {tag}\n </span>\n ))}\n {vibe.tags.length > 3 && (\n <span className=\"px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{vibe.tags.length - 3}\n </span>\n )}\n </div>\n )}\n </motion.div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VibeCard.js","names":[],"sources":["../../../src/components/vibes/VibeCard.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { FC } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n FolderOpen,\n GitBranch,\n MoreVertical,\n Play,\n Archive,\n Settings,\n Tag,\n ExternalLink,\n Trash2,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport type { Vibe } from './types';\nimport { vibeTypeIcons } from './icons';\nimport { StatusBadge } from '../shared/StatusBadge';\nimport { SelectionCheckbox } from '../shared/SelectionCheckbox';\nimport { cardHoverVariants } from '../shared/cardMotion';\n\nexport interface VibeCardProps {\n vibe: Vibe;\n onOpen?: (vibe: Vibe) => void;\n onEdit?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onDelete?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n className?: string;\n selected?: boolean;\n onToggleSelect?: (checked: boolean) => void;\n}\n\n/**\n * VibeCard - Display project/vibe information\n */\nexport const VibeCard: FC<VibeCardProps> = ({\n vibe,\n onOpen,\n onEdit,\n onArchive,\n onDelete,\n onActivate,\n onOpenInEditor,\n className = '',\n selected = false,\n onToggleSelect,\n}) => {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n const [showMenu, setShowMenu] = useState(false);\n const Icon = vibeTypeIcons[vibe.type] || FolderOpen;\n\n return (\n <motion.div\n initial=\"rest\"\n animate=\"rest\"\n whileHover=\"hover\"\n whileTap=\"tap\"\n variants={cardHoverVariants}\n className={`bg-bg-surface border rounded-lg p-4 hover:border-border-strong transition-colors cursor-pointer ${\n selected\n ? 'border-action-primary-bg ring-1 ring-action-primary-bg/25'\n : 'border-border-default'\n } ${className}`}\n onClick={() => onOpen?.(vibe)}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex items-start gap-2 sm:gap-3 min-w-0 flex-1\">\n {onToggleSelect && (\n <div onClick={(event) => event.stopPropagation()}>\n <SelectionCheckbox\n checked={selected}\n onChange={onToggleSelect}\n ariaLabel={`Select vibe ${vibe.name}`}\n className=\"mt-2\"\n />\n </div>\n )}\n <div className=\"flex-shrink-0 size-8 sm:w-10 sm:h-10 rounded-lg bg-action-primary-bg/10 flex items-center justify-center\">\n <Icon className=\"size-4 sm:w-5 sm:h-5 text-action-primary-bg\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"font-semibold text-text-primary truncate text-sm sm:text-base\">\n {vibe.name}\n </h3>\n {vibe.description && (\n <p className=\"text-xs sm:text-sm text-text-secondary truncate\">{vibe.description}</p>\n )}\n </div>\n </div>\n {/* Status and Actions - always visible */}\n <div className=\"flex items-center gap-1 sm:gap-2 flex-shrink-0\">\n <StatusBadge status={vibe.status} />\n {(onEdit || onArchive || onDelete || onActivate || onOpenInEditor) && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n className=\"p-1 sm:p-1.5 rounded hover:bg-bg-sunken transition-colors\"\n >\n <MoreVertical className=\"size-4 text-text-secondary\" />\n </button>\n <AnimatePresence>\n {showMenu && (\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: -4 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -4 }}\n transition={{ duration: 0.15 }}\n className=\"absolute right-0 mt-1 w-40 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10\"\n >\n {onActivate && vibe.status !== 'ACTIVE' && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onActivate(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg\"\n >\n <Play className=\"size-4\" />\n Activate\n </motion.button>\n )}\n {onEdit && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Settings className=\"size-4\" />\n Edit\n </motion.button>\n )}\n {onOpenInEditor && vibe.path && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onOpenInEditor(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <ExternalLink className=\"size-4\" />\n Open in VS Code\n </motion.button>\n )}\n {onArchive && vibe.status !== 'ARCHIVED' && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onArchive(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-b-lg\"\n >\n <Archive className=\"size-4\" />\n Archive\n </motion.button>\n )}\n {onDelete && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onDelete(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-status-error-text hover:bg-bg-sunken rounded-b-lg\"\n >\n <Trash2 className=\"size-4\" />\n Delete\n </motion.button>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )}\n </div>\n </div>\n\n {vibe.description && (\n <p className=\"mt-2 text-sm text-text-secondary line-clamp-2\">{vibe.description}</p>\n )}\n\n {vibe.path && (\n <div className=\"mt-3 text-xs text-text-secondary font-mono bg-bg-sunken p-2 rounded truncate\">\n {vibe.path}\n </div>\n )}\n\n {vibe.gitBranch && (\n <div className=\"mt-2 flex items-center gap-2 text-sm text-text-secondary\">\n <GitBranch className=\"size-4\" />\n <span className=\"truncate\">{vibe.gitBranch}</span>\n {vibe.gitStatus && vibe.gitStatus !== 'clean' && (\n <span className=\"px-1.5 py-0.5 text-xs bg-status-warning-bg text-status-warning-text rounded\">\n {vibe.gitStatus}\n </span>\n )}\n </div>\n )}\n\n {vibe.tags && vibe.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1\">\n {vibe.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\"\n >\n <Tag className=\"size-3\" />\n {tag}\n </span>\n ))}\n {vibe.tags.length > 3 && (\n <span className=\"px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{vibe.tags.length - 3}\n </span>\n )}\n </div>\n )}\n </motion.div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@ import { StatusBadge as n } from "../shared/StatusBadge.js";
|
|
|
4
4
|
import { SelectionCheckbox as r } from "../shared/SelectionCheckbox.js";
|
|
5
5
|
import { vibeTypeIcons as i } from "./icons.js";
|
|
6
6
|
import { useState as a } from "react";
|
|
7
|
-
import { Archive as o, ExternalLink as s, FolderOpen as c, GitBranch as l, MoreVertical as u, Play as d, Plus as f, Settings as p, Tag as m } from "lucide-react";
|
|
8
|
-
import { Fragment as
|
|
7
|
+
import { Archive as o, ExternalLink as s, FolderOpen as c, GitBranch as l, MoreVertical as u, Play as d, Plus as f, Settings as p, Tag as m, Trash2 as h } from "lucide-react";
|
|
8
|
+
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
9
9
|
//#region src/components/vibes/VibeList.tsx
|
|
10
|
-
function
|
|
11
|
-
let
|
|
12
|
-
return /* @__PURE__ */
|
|
10
|
+
function y({ vibe: e, onOpen: t, onActivate: a, onOpenInEditor: u, onArchive: f, onDelete: p, selected: g, onToggleSelect: y }) {
|
|
11
|
+
let b = i[e.type] || c;
|
|
12
|
+
return /* @__PURE__ */ v("div", {
|
|
13
13
|
role: "button",
|
|
14
14
|
tabIndex: 0,
|
|
15
15
|
onKeyDown: (n) => {
|
|
@@ -18,210 +18,227 @@ function v({ vibe: e, onOpen: t, onActivate: a, onOpenInEditor: u, onArchive: f,
|
|
|
18
18
|
className: "p-4 border border-border-default rounded-lg bg-bg-surface hover:bg-bg-sunken/50 cursor-pointer transition-colors",
|
|
19
19
|
onClick: () => t?.(e),
|
|
20
20
|
children: [
|
|
21
|
-
/* @__PURE__ */
|
|
21
|
+
/* @__PURE__ */ v("div", {
|
|
22
22
|
className: "flex items-start justify-between gap-3",
|
|
23
|
-
children: [/* @__PURE__ */
|
|
23
|
+
children: [/* @__PURE__ */ v("div", {
|
|
24
24
|
className: "flex items-start gap-3 min-w-0 flex-1",
|
|
25
25
|
children: [
|
|
26
|
-
|
|
26
|
+
y && /* @__PURE__ */ _("div", {
|
|
27
27
|
onClick: (e) => e.stopPropagation(),
|
|
28
|
-
children: /* @__PURE__ */
|
|
29
|
-
checked: !!
|
|
30
|
-
onChange:
|
|
28
|
+
children: /* @__PURE__ */ _(r, {
|
|
29
|
+
checked: !!g,
|
|
30
|
+
onChange: y,
|
|
31
31
|
ariaLabel: `Select vibe ${e.name}`
|
|
32
32
|
})
|
|
33
33
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ _(b, { className: "size-5 text-action-primary-bg flex-shrink-0 mt-0.5" }),
|
|
35
|
+
/* @__PURE__ */ v("div", {
|
|
36
36
|
className: "min-w-0 flex-1",
|
|
37
|
-
children: [/* @__PURE__ */
|
|
37
|
+
children: [/* @__PURE__ */ _("p", {
|
|
38
38
|
className: "text-sm font-medium text-text-primary truncate",
|
|
39
39
|
children: e.name
|
|
40
|
-
}), e.description && /* @__PURE__ */
|
|
40
|
+
}), e.description && /* @__PURE__ */ _("p", {
|
|
41
41
|
className: "text-xs text-text-muted truncate mt-0.5",
|
|
42
42
|
children: e.description
|
|
43
43
|
})]
|
|
44
44
|
})
|
|
45
45
|
]
|
|
46
|
-
}), /* @__PURE__ */
|
|
46
|
+
}), /* @__PURE__ */ _(n, { status: e.status })]
|
|
47
47
|
}),
|
|
48
|
-
/* @__PURE__ */
|
|
48
|
+
/* @__PURE__ */ v("div", {
|
|
49
49
|
className: "mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-text-secondary",
|
|
50
|
-
children: [e.gitBranch && /* @__PURE__ */
|
|
50
|
+
children: [e.gitBranch && /* @__PURE__ */ v("span", {
|
|
51
51
|
className: "flex items-center gap-1",
|
|
52
|
-
children: [/* @__PURE__ */
|
|
53
|
-
}), e.tags && e.tags.length > 0 && /* @__PURE__ */
|
|
52
|
+
children: [/* @__PURE__ */ _(l, { className: "size-3" }), e.gitBranch]
|
|
53
|
+
}), e.tags && e.tags.length > 0 && /* @__PURE__ */ v("span", {
|
|
54
54
|
className: "flex items-center gap-1",
|
|
55
55
|
children: [
|
|
56
|
-
/* @__PURE__ */
|
|
56
|
+
/* @__PURE__ */ _(m, { className: "size-3" }),
|
|
57
57
|
e.tags.length,
|
|
58
58
|
" tag",
|
|
59
59
|
e.tags.length === 1 ? "" : "s"
|
|
60
60
|
]
|
|
61
61
|
})]
|
|
62
62
|
}),
|
|
63
|
-
e.path && /* @__PURE__ */
|
|
63
|
+
e.path && /* @__PURE__ */ _("div", {
|
|
64
64
|
className: "mt-2 text-xs font-mono text-text-muted truncate",
|
|
65
65
|
children: e.path
|
|
66
66
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ v("div", {
|
|
68
68
|
className: "mt-3 flex items-center gap-2 justify-end border-t border-border-default pt-3",
|
|
69
69
|
children: [
|
|
70
|
-
a && e.status !== "ACTIVE" && /* @__PURE__ */
|
|
70
|
+
a && e.status !== "ACTIVE" && /* @__PURE__ */ _("button", {
|
|
71
71
|
type: "button",
|
|
72
72
|
onClick: (t) => {
|
|
73
73
|
t.stopPropagation(), a(e);
|
|
74
74
|
},
|
|
75
75
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors",
|
|
76
76
|
title: "Activate",
|
|
77
|
-
children: /* @__PURE__ */
|
|
77
|
+
children: /* @__PURE__ */ _(d, { className: "size-4 text-text-secondary" })
|
|
78
78
|
}),
|
|
79
|
-
u && e.path && /* @__PURE__ */
|
|
79
|
+
u && e.path && /* @__PURE__ */ _("button", {
|
|
80
80
|
type: "button",
|
|
81
81
|
onClick: (t) => {
|
|
82
82
|
t.stopPropagation(), u(e);
|
|
83
83
|
},
|
|
84
84
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors",
|
|
85
85
|
title: "Open in VS Code",
|
|
86
|
-
children: /* @__PURE__ */
|
|
86
|
+
children: /* @__PURE__ */ _(s, { className: "size-4 text-text-secondary" })
|
|
87
87
|
}),
|
|
88
|
-
f && e.status !== "ARCHIVED" && /* @__PURE__ */
|
|
88
|
+
f && e.status !== "ARCHIVED" && /* @__PURE__ */ _("button", {
|
|
89
89
|
type: "button",
|
|
90
90
|
onClick: (t) => {
|
|
91
91
|
t.stopPropagation(), f(e);
|
|
92
92
|
},
|
|
93
93
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors",
|
|
94
94
|
title: "Archive",
|
|
95
|
-
children: /* @__PURE__ */
|
|
95
|
+
children: /* @__PURE__ */ _(o, { className: "size-4 text-text-secondary" })
|
|
96
|
+
}),
|
|
97
|
+
p && /* @__PURE__ */ _("button", {
|
|
98
|
+
type: "button",
|
|
99
|
+
onClick: (t) => {
|
|
100
|
+
t.stopPropagation(), p(e);
|
|
101
|
+
},
|
|
102
|
+
className: "p-2 rounded hover:bg-bg-sunken transition-colors",
|
|
103
|
+
title: "Delete",
|
|
104
|
+
children: /* @__PURE__ */ _(h, { className: "size-4 text-status-error-text" })
|
|
96
105
|
})
|
|
97
106
|
]
|
|
98
107
|
})
|
|
99
108
|
]
|
|
100
109
|
});
|
|
101
110
|
}
|
|
102
|
-
function
|
|
103
|
-
let [
|
|
104
|
-
return /* @__PURE__ */
|
|
105
|
-
className: `border-b border-border-default hover:bg-bg-sunken/50 cursor-pointer transition-colors ${
|
|
111
|
+
function b({ vibe: e, onOpen: t, onEdit: f, onArchive: g, onDelete: y, onActivate: b, onOpenInEditor: x, selected: S, onToggleSelect: C }) {
|
|
112
|
+
let [w, T] = a(!1), E = i[e.type] || c;
|
|
113
|
+
return /* @__PURE__ */ v("tr", {
|
|
114
|
+
className: `border-b border-border-default hover:bg-bg-sunken/50 cursor-pointer transition-colors ${S ? "bg-bg-sunken/40" : ""}`,
|
|
106
115
|
onClick: () => t?.(e),
|
|
107
116
|
children: [
|
|
108
|
-
/* @__PURE__ */
|
|
117
|
+
/* @__PURE__ */ _("td", {
|
|
109
118
|
className: "px-4 py-3",
|
|
110
|
-
children:
|
|
119
|
+
children: C && /* @__PURE__ */ _("div", {
|
|
111
120
|
onClick: (e) => e.stopPropagation(),
|
|
112
|
-
children: /* @__PURE__ */
|
|
113
|
-
checked: !!
|
|
114
|
-
onChange:
|
|
121
|
+
children: /* @__PURE__ */ _(r, {
|
|
122
|
+
checked: !!S,
|
|
123
|
+
onChange: C,
|
|
115
124
|
ariaLabel: `Select vibe ${e.name}`
|
|
116
125
|
})
|
|
117
126
|
})
|
|
118
127
|
}),
|
|
119
|
-
/* @__PURE__ */
|
|
128
|
+
/* @__PURE__ */ _("td", {
|
|
120
129
|
className: "px-4 py-3",
|
|
121
|
-
children: /* @__PURE__ */
|
|
130
|
+
children: /* @__PURE__ */ v("div", {
|
|
122
131
|
className: "flex items-center gap-3 min-w-0",
|
|
123
|
-
children: [/* @__PURE__ */
|
|
132
|
+
children: [/* @__PURE__ */ _(E, { className: "size-4 text-action-primary-bg shrink-0" }), /* @__PURE__ */ v("div", {
|
|
124
133
|
className: "min-w-0",
|
|
125
|
-
children: [/* @__PURE__ */
|
|
134
|
+
children: [/* @__PURE__ */ _("p", {
|
|
126
135
|
className: "text-sm font-medium text-text-primary truncate",
|
|
127
136
|
children: e.name
|
|
128
|
-
}), e.description && /* @__PURE__ */
|
|
137
|
+
}), e.description && /* @__PURE__ */ _("p", {
|
|
129
138
|
className: "text-xs text-text-muted truncate max-w-[250px]",
|
|
130
139
|
children: e.description
|
|
131
140
|
})]
|
|
132
141
|
})]
|
|
133
142
|
})
|
|
134
143
|
}),
|
|
135
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ _("td", {
|
|
136
145
|
className: "px-4 py-3",
|
|
137
|
-
children: /* @__PURE__ */
|
|
146
|
+
children: /* @__PURE__ */ _(n, { status: e.status })
|
|
138
147
|
}),
|
|
139
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ _("td", {
|
|
140
149
|
className: "px-4 py-3",
|
|
141
|
-
children: e.path ? /* @__PURE__ */
|
|
150
|
+
children: e.path ? /* @__PURE__ */ _("span", {
|
|
142
151
|
className: "text-xs font-mono text-text-muted truncate block max-w-[180px]",
|
|
143
152
|
children: e.path
|
|
144
|
-
}) : /* @__PURE__ */
|
|
153
|
+
}) : /* @__PURE__ */ _("span", {
|
|
145
154
|
className: "text-xs text-text-muted",
|
|
146
155
|
children: "-"
|
|
147
156
|
})
|
|
148
157
|
}),
|
|
149
|
-
/* @__PURE__ */
|
|
158
|
+
/* @__PURE__ */ _("td", {
|
|
150
159
|
className: "px-4 py-3",
|
|
151
|
-
children: e.gitBranch ? /* @__PURE__ */
|
|
160
|
+
children: e.gitBranch ? /* @__PURE__ */ v("div", {
|
|
152
161
|
className: "flex items-center gap-1.5 text-xs text-text-secondary",
|
|
153
|
-
children: [/* @__PURE__ */
|
|
162
|
+
children: [/* @__PURE__ */ _(l, { className: "size-3" }), /* @__PURE__ */ _("span", {
|
|
154
163
|
className: "truncate max-w-[100px]",
|
|
155
164
|
children: e.gitBranch
|
|
156
165
|
})]
|
|
157
|
-
}) : /* @__PURE__ */
|
|
166
|
+
}) : /* @__PURE__ */ _("span", {
|
|
158
167
|
className: "text-xs text-text-muted",
|
|
159
168
|
children: "-"
|
|
160
169
|
})
|
|
161
170
|
}),
|
|
162
|
-
/* @__PURE__ */
|
|
171
|
+
/* @__PURE__ */ _("td", {
|
|
163
172
|
className: "px-4 py-3",
|
|
164
|
-
children: e.tags && e.tags.length > 0 ? /* @__PURE__ */
|
|
173
|
+
children: e.tags && e.tags.length > 0 ? /* @__PURE__ */ v("div", {
|
|
165
174
|
className: "flex flex-wrap gap-1",
|
|
166
|
-
children: [e.tags.slice(0, 2).map((e) => /* @__PURE__ */
|
|
175
|
+
children: [e.tags.slice(0, 2).map((e) => /* @__PURE__ */ v("span", {
|
|
167
176
|
className: "inline-flex items-center gap-0.5 px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
|
|
168
|
-
children: [/* @__PURE__ */
|
|
169
|
-
}, e)), e.tags.length > 2 && /* @__PURE__ */
|
|
177
|
+
children: [/* @__PURE__ */ _(m, { className: "size-2.5" }), e]
|
|
178
|
+
}, e)), e.tags.length > 2 && /* @__PURE__ */ v("span", {
|
|
170
179
|
className: "px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
|
|
171
180
|
children: ["+", e.tags.length - 2]
|
|
172
181
|
})]
|
|
173
|
-
}) : /* @__PURE__ */
|
|
182
|
+
}) : /* @__PURE__ */ _("span", {
|
|
174
183
|
className: "text-xs text-text-muted",
|
|
175
184
|
children: "-"
|
|
176
185
|
})
|
|
177
186
|
}),
|
|
178
|
-
/* @__PURE__ */
|
|
187
|
+
/* @__PURE__ */ _("td", {
|
|
179
188
|
className: "px-4 py-3",
|
|
180
|
-
children: /* @__PURE__ */
|
|
189
|
+
children: /* @__PURE__ */ _("div", {
|
|
181
190
|
className: "flex items-center gap-1 justify-end",
|
|
182
|
-
children: (f ||
|
|
191
|
+
children: (f || g || y || b || x) && /* @__PURE__ */ v("div", {
|
|
183
192
|
className: "relative",
|
|
184
|
-
children: [/* @__PURE__ */
|
|
193
|
+
children: [/* @__PURE__ */ _("button", {
|
|
185
194
|
type: "button",
|
|
186
195
|
onClick: (e) => {
|
|
187
|
-
e.stopPropagation(),
|
|
196
|
+
e.stopPropagation(), T(!w);
|
|
188
197
|
},
|
|
189
198
|
className: "p-1.5 rounded hover:bg-bg-sunken transition-colors",
|
|
190
|
-
children: /* @__PURE__ */
|
|
191
|
-
}),
|
|
199
|
+
children: /* @__PURE__ */ _(u, { className: "size-3.5 text-text-secondary" })
|
|
200
|
+
}), w && /* @__PURE__ */ v("div", {
|
|
192
201
|
className: "absolute right-0 mt-1 w-36 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10",
|
|
193
202
|
children: [
|
|
194
|
-
|
|
203
|
+
b && e.status !== "ACTIVE" && /* @__PURE__ */ v("button", {
|
|
195
204
|
type: "button",
|
|
196
205
|
onClick: (t) => {
|
|
197
|
-
t.stopPropagation(),
|
|
206
|
+
t.stopPropagation(), b(e), T(!1);
|
|
198
207
|
},
|
|
199
208
|
className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg",
|
|
200
|
-
children: [/* @__PURE__ */
|
|
209
|
+
children: [/* @__PURE__ */ _(d, { className: "size-4" }), "Activate"]
|
|
201
210
|
}),
|
|
202
|
-
f && /* @__PURE__ */
|
|
211
|
+
f && /* @__PURE__ */ v("button", {
|
|
203
212
|
type: "button",
|
|
204
213
|
onClick: (t) => {
|
|
205
|
-
t.stopPropagation(), f(e),
|
|
214
|
+
t.stopPropagation(), f(e), T(!1);
|
|
206
215
|
},
|
|
207
216
|
className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken",
|
|
208
|
-
children: [/* @__PURE__ */
|
|
217
|
+
children: [/* @__PURE__ */ _(p, { className: "size-4" }), "Edit"]
|
|
209
218
|
}),
|
|
210
|
-
|
|
219
|
+
x && e.path && /* @__PURE__ */ v("button", {
|
|
211
220
|
type: "button",
|
|
212
221
|
onClick: (t) => {
|
|
213
|
-
t.stopPropagation(),
|
|
222
|
+
t.stopPropagation(), x(e), T(!1);
|
|
214
223
|
},
|
|
215
224
|
className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken",
|
|
216
|
-
children: [/* @__PURE__ */
|
|
225
|
+
children: [/* @__PURE__ */ _(s, { className: "size-4" }), "Open in VS Code"]
|
|
217
226
|
}),
|
|
218
|
-
|
|
227
|
+
g && e.status !== "ARCHIVED" && /* @__PURE__ */ v("button", {
|
|
219
228
|
type: "button",
|
|
220
229
|
onClick: (t) => {
|
|
221
|
-
t.stopPropagation(),
|
|
230
|
+
t.stopPropagation(), g(e), T(!1);
|
|
222
231
|
},
|
|
223
232
|
className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-b-lg",
|
|
224
|
-
children: [/* @__PURE__ */
|
|
233
|
+
children: [/* @__PURE__ */ _(o, { className: "size-4" }), "Archive"]
|
|
234
|
+
}),
|
|
235
|
+
y && /* @__PURE__ */ v("button", {
|
|
236
|
+
type: "button",
|
|
237
|
+
onClick: (t) => {
|
|
238
|
+
t.stopPropagation(), y(e), T(!1);
|
|
239
|
+
},
|
|
240
|
+
className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-status-error-text hover:bg-bg-sunken rounded-b-lg",
|
|
241
|
+
children: [/* @__PURE__ */ _(h, { className: "size-4" }), "Delete"]
|
|
225
242
|
})
|
|
226
243
|
]
|
|
227
244
|
})]
|
|
@@ -231,87 +248,89 @@ function y({ vibe: e, onOpen: t, onEdit: f, onArchive: h, onActivate: v, onOpenI
|
|
|
231
248
|
]
|
|
232
249
|
});
|
|
233
250
|
}
|
|
234
|
-
function
|
|
235
|
-
let
|
|
236
|
-
return !
|
|
237
|
-
icon: /* @__PURE__ */
|
|
238
|
-
title:
|
|
239
|
-
description:
|
|
240
|
-
action:
|
|
251
|
+
function x({ vibes: n, onOpen: i, onEdit: a, onArchive: o, onDelete: s, onActivate: l, onOpenInEditor: u, onCreateNew: d, isLoading: p, selectedVibeIds: m = /* @__PURE__ */ new Set(), onToggleSelect: h, onToggleAllVisible: x, allVisibleSelected: S = !1, partiallySelected: C = !1 }) {
|
|
252
|
+
let w = e();
|
|
253
|
+
return !p && n.length === 0 ? /* @__PURE__ */ _(t, {
|
|
254
|
+
icon: /* @__PURE__ */ _(c, { className: "size-8 text-text-secondary" }),
|
|
255
|
+
title: w("vibecontrols.vibes.list.emptyTitle", "No vibes yet"),
|
|
256
|
+
description: w("vibecontrols.vibes.list.emptyDescription", "Vibes are your development projects and environments. Create your first vibe to organize your work."),
|
|
257
|
+
action: d && /* @__PURE__ */ v("button", {
|
|
241
258
|
type: "button",
|
|
242
|
-
onClick:
|
|
259
|
+
onClick: d,
|
|
243
260
|
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors",
|
|
244
|
-
children: [/* @__PURE__ */
|
|
261
|
+
children: [/* @__PURE__ */ _(f, { className: "size-4" }), w("vibecontrols.vibes.list.createVibe", "Create Vibe")]
|
|
245
262
|
})
|
|
246
|
-
}) : /* @__PURE__ */
|
|
263
|
+
}) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _("div", {
|
|
247
264
|
className: "sm:hidden space-y-3",
|
|
248
|
-
children: n.map((e) => /* @__PURE__ */
|
|
265
|
+
children: n.map((e) => /* @__PURE__ */ _(y, {
|
|
249
266
|
vibe: e,
|
|
250
267
|
onOpen: i,
|
|
251
|
-
onActivate:
|
|
252
|
-
onOpenInEditor:
|
|
268
|
+
onActivate: l,
|
|
269
|
+
onOpenInEditor: u,
|
|
253
270
|
onArchive: o,
|
|
254
|
-
|
|
255
|
-
|
|
271
|
+
onDelete: s,
|
|
272
|
+
selected: m.has(e.id),
|
|
273
|
+
onToggleSelect: h ? (t) => h(e, t) : void 0
|
|
256
274
|
}, e.id))
|
|
257
|
-
}), /* @__PURE__ */
|
|
275
|
+
}), /* @__PURE__ */ _("div", {
|
|
258
276
|
className: "hidden sm:block border border-border-default rounded-lg overflow-visible",
|
|
259
|
-
children: /* @__PURE__ */
|
|
277
|
+
children: /* @__PURE__ */ _("div", {
|
|
260
278
|
className: "overflow-x-auto",
|
|
261
|
-
children: /* @__PURE__ */
|
|
279
|
+
children: /* @__PURE__ */ v("table", {
|
|
262
280
|
className: "w-full",
|
|
263
|
-
children: [/* @__PURE__ */
|
|
281
|
+
children: [/* @__PURE__ */ _("thead", { children: /* @__PURE__ */ v("tr", {
|
|
264
282
|
className: "bg-bg-sunken border-b border-border-default",
|
|
265
283
|
children: [
|
|
266
|
-
/* @__PURE__ */
|
|
284
|
+
/* @__PURE__ */ _("th", {
|
|
267
285
|
className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider w-12",
|
|
268
|
-
children:
|
|
269
|
-
checked:
|
|
270
|
-
indeterminate:
|
|
271
|
-
onChange:
|
|
286
|
+
children: x ? /* @__PURE__ */ _(r, {
|
|
287
|
+
checked: S,
|
|
288
|
+
indeterminate: C,
|
|
289
|
+
onChange: x,
|
|
272
290
|
ariaLabel: "Select all visible vibes"
|
|
273
291
|
}) : null
|
|
274
292
|
}),
|
|
275
|
-
/* @__PURE__ */
|
|
293
|
+
/* @__PURE__ */ _("th", {
|
|
276
294
|
className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
277
295
|
children: "Name"
|
|
278
296
|
}),
|
|
279
|
-
/* @__PURE__ */
|
|
297
|
+
/* @__PURE__ */ _("th", {
|
|
280
298
|
className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
281
299
|
children: "Status"
|
|
282
300
|
}),
|
|
283
|
-
/* @__PURE__ */
|
|
301
|
+
/* @__PURE__ */ _("th", {
|
|
284
302
|
className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
285
303
|
children: "Path"
|
|
286
304
|
}),
|
|
287
|
-
/* @__PURE__ */
|
|
305
|
+
/* @__PURE__ */ _("th", {
|
|
288
306
|
className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
289
307
|
children: "Branch"
|
|
290
308
|
}),
|
|
291
|
-
/* @__PURE__ */
|
|
309
|
+
/* @__PURE__ */ _("th", {
|
|
292
310
|
className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
293
311
|
children: "Tags"
|
|
294
312
|
}),
|
|
295
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ _("th", {
|
|
296
314
|
className: "px-4 py-2.5 text-right text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
297
315
|
children: "Actions"
|
|
298
316
|
})
|
|
299
317
|
]
|
|
300
|
-
}) }), /* @__PURE__ */
|
|
318
|
+
}) }), /* @__PURE__ */ _("tbody", { children: n.map((e) => /* @__PURE__ */ _(b, {
|
|
301
319
|
vibe: e,
|
|
302
320
|
onOpen: i,
|
|
303
321
|
onEdit: a,
|
|
304
322
|
onArchive: o,
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
323
|
+
onDelete: s,
|
|
324
|
+
onActivate: l,
|
|
325
|
+
onOpenInEditor: u,
|
|
326
|
+
selected: m.has(e.id),
|
|
327
|
+
onToggleSelect: h ? (t) => h(e, t) : void 0
|
|
309
328
|
}, e.id)) })]
|
|
310
329
|
})
|
|
311
330
|
})
|
|
312
331
|
})] });
|
|
313
332
|
}
|
|
314
333
|
//#endregion
|
|
315
|
-
export {
|
|
334
|
+
export { x as VibeList };
|
|
316
335
|
|
|
317
336
|
//# sourceMappingURL=VibeList.js.map
|