@burdenoff/microfe-vibecontrols 2026.519.5 → 2026.520.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"DocsEditPanel.js","names":[],"sources":["../../../src/components/docs/DocsEditPanel.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ArrowLeft, Settings, RefreshCw } from 'lucide-react';\nimport { DocsPageTree } from './DocsPageTree';\nimport { DocsPageEditor } from './DocsPageEditor';\nimport { DocsSettingsPanel } from './DocsSettingsPanel';\nimport { DocsCompileStatus } from './DocsCompileStatus';\nimport type { DocsSite, DocsPage, DocsRevision } from './types';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface DocsEditPanelProps {\n site: DocsSite;\n pages: DocsPage[];\n onBack: () => void;\n onSavePage: (\n id: string,\n data: { title?: string; content?: string; slug?: string }\n ) => Promise<void>;\n onAddPage: (parentId?: string, category?: string) => void;\n onDeletePage: (pageId: string) => void;\n onCompile: () => void;\n onSaveSettings: (data: {\n name?: string;\n visibility?: 'PRIVATE' | 'PUBLIC';\n docusaurusConfig?: Record<string, unknown>;\n }) => Promise<void>;\n compileRevision: DocsRevision | null;\n onPollRevision?: (id: string) => Promise<DocsRevision | null>;\n compiling: boolean;\n}\n\nexport function DocsEditPanel({\n site,\n pages,\n onBack,\n onSavePage,\n onAddPage,\n onDeletePage,\n onCompile,\n onSaveSettings,\n compileRevision,\n onPollRevision,\n compiling,\n}: DocsEditPanelProps) {\n const tr = useTr();\n const [selectedPageId, setSelectedPageId] = useState<string | null>(pages[0]?.id || null);\n const [showSettings, setShowSettings] = useState(false);\n\n const selectedPage = pages.find((p) => p.id === selectedPageId) || null;\n\n useEffect(() => {\n if (pages.length === 0) {\n if (selectedPageId) setSelectedPageId(null);\n return;\n }\n\n if (!selectedPageId || !pages.some((page) => page.id === selectedPageId)) {\n setSelectedPageId(pages[0].id);\n }\n }, [pages, selectedPageId]);\n\n return (\n <div className=\"flex flex-col h-full\" style={{ minHeight: 'calc(100vh - 380px)' }}>\n {/* Top bar */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-border-default bg-bg-surface\">\n <div className=\"flex items-center gap-3\">\n <button\n onClick={onBack}\n className=\"flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibecontrols.docs.edit.preview', 'Preview')}\n </button>\n <span className=\"text-text-muted\">|</span>\n <span className=\"text-sm font-medium text-text-primary\">{site.name}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\">\n <DocsCompileStatus revision={compileRevision} onPoll={onPollRevision} />\n </div>\n <button\n onClick={onCompile}\n disabled={compiling}\n className=\"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n <RefreshCw className={`w-3.5 h-3.5 ${compiling ? 'animate-spin' : ''}`} />\n {tr('vibecontrols.docs.edit.compile', 'Compile')}\n </button>\n <button\n onClick={() => setShowSettings(true)}\n className=\"p-1.5 text-text-secondary hover:text-text-primary transition-colors\"\n title=\"Settings\"\n >\n <Settings className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Main content: sidebar + editor */}\n <div className=\"flex-1 grid grid-cols-[260px_1fr] min-h-0\">\n {/* Page tree sidebar */}\n <div className=\"border-r border-border-default overflow-hidden\">\n <DocsPageTree\n pages={pages}\n selectedPageId={selectedPageId}\n onSelectPage={setSelectedPageId}\n onAddPage={onAddPage}\n onDeletePage={onDeletePage}\n />\n </div>\n\n {/* Editor */}\n <div className=\"overflow-hidden\">\n <DocsPageEditor page={selectedPage} onSave={onSavePage} />\n </div>\n </div>\n\n {/* Settings panel */}\n <DocsSettingsPanel\n site={site}\n open={showSettings}\n onClose={() => setShowSettings(false)}\n onSave={onSaveSettings}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AA8BA,SAAgB,EAAc,EAC5B,SACA,UACA,WACA,eACA,cACA,iBACA,cACA,mBACA,oBACA,mBACA,gBACqB;CACrB,IAAM,IAAK,GAAO,EACZ,CAAC,GAAgB,KAAqB,EAAwB,EAAM,IAAI,MAAM,KAAK,EACnF,CAAC,GAAc,KAAmB,EAAS,GAAM,EAEjD,IAAe,EAAM,MAAM,MAAM,EAAE,OAAO,EAAe,IAAI;AAanE,QAXA,QAAgB;AACd,MAAI,EAAM,WAAW,GAAG;AACtB,GAAI,KAAgB,EAAkB,KAAK;AAC3C;;AAGF,GAAI,CAAC,KAAkB,CAAC,EAAM,MAAM,MAAS,EAAK,OAAO,EAAe,KACtE,EAAkB,EAAM,GAAG,GAAG;IAE/B,CAAC,GAAO,EAAe,CAAC,EAGzB,kBAAC,OAAD;EAAK,WAAU;EAAuB,OAAO,EAAE,WAAW,uBAAuB;YAAjF;GAEE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,UAAD;OACE,SAAS;OACT,WAAU;iBAFZ,CAIE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAChC,EAAG,kCAAkC,UAAU,CACzC;;MACT,kBAAC,QAAD;OAAM,WAAU;iBAAkB;OAAQ,CAAA;MAC1C,kBAAC,QAAD;OAAM,WAAU;iBAAyC,EAAK;OAAY,CAAA;MACtE;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD;QAAmB,UAAU;QAAiB,QAAQ;QAAkB,CAAA;OACpE,CAAA;MACN,kBAAC,UAAD;OACE,SAAS;OACT,UAAU;OACV,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAW,WAAW,eAAe,IAAY,iBAAiB,MAAQ,CAAA,EACzE,EAAG,kCAAkC,UAAU,CACzC;;MACT,kBAAC,UAAD;OACE,eAAe,EAAgB,GAAK;OACpC,WAAU;OACV,OAAM;iBAEN,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;OACzB,CAAA;MACL;OACF;;GAGN,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MACS;MACS;MAChB,cAAc;MACH;MACG;MACd,CAAA;KACE,CAAA,EAGN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MAAgB,MAAM;MAAc,QAAQ;MAAc,CAAA;KACtD,CAAA,CACF;;GAGN,kBAAC,GAAD;IACQ;IACN,MAAM;IACN,eAAe,EAAgB,GAAM;IACrC,QAAQ;IACR,CAAA;GACE"}
1
+ {"version":3,"file":"DocsEditPanel.js","names":[],"sources":["../../../src/components/docs/DocsEditPanel.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { ArrowLeft, Settings, RefreshCw } from 'lucide-react';\nimport { DocsPageTree } from './DocsPageTree';\nimport { DocsPageEditor } from './DocsPageEditor';\nimport { DocsSettingsPanel } from './DocsSettingsPanel';\nimport { DocsCompileStatus } from './DocsCompileStatus';\nimport type { DocsSite, DocsPage, DocsRevision } from './types';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface DocsEditPanelProps {\n site: DocsSite;\n pages: DocsPage[];\n onBack: () => void;\n onSavePage: (\n id: string,\n data: { title?: string; content?: string; slug?: string }\n ) => Promise<void>;\n onAddPage: (parentId?: string, category?: string) => void;\n onDeletePage: (pageId: string) => void;\n onCompile: () => void;\n onSaveSettings: (data: {\n name?: string;\n visibility?: 'PRIVATE' | 'PUBLIC';\n provider?: 'DOCUSAURUS' | 'MKDOCS' | 'VITEPRESS';\n providerConfig?: Record<string, unknown>;\n }) => Promise<void>;\n compileRevision: DocsRevision | null;\n onPollRevision?: (id: string) => Promise<DocsRevision | null>;\n compiling: boolean;\n}\n\nexport function DocsEditPanel({\n site,\n pages,\n onBack,\n onSavePage,\n onAddPage,\n onDeletePage,\n onCompile,\n onSaveSettings,\n compileRevision,\n onPollRevision,\n compiling,\n}: DocsEditPanelProps) {\n const tr = useTr();\n const [selectedPageId, setSelectedPageId] = useState<string | null>(pages[0]?.id || null);\n const [showSettings, setShowSettings] = useState(false);\n\n const selectedPage = pages.find((p) => p.id === selectedPageId) || null;\n\n useEffect(() => {\n if (pages.length === 0) {\n if (selectedPageId) setSelectedPageId(null);\n return;\n }\n\n if (!selectedPageId || !pages.some((page) => page.id === selectedPageId)) {\n setSelectedPageId(pages[0].id);\n }\n }, [pages, selectedPageId]);\n\n return (\n <div className=\"flex flex-col h-full\" style={{ minHeight: 'calc(100vh - 380px)' }}>\n {/* Top bar */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-border-default bg-bg-surface\">\n <div className=\"flex items-center gap-3\">\n <button\n onClick={onBack}\n className=\"flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibecontrols.docs.edit.preview', 'Preview')}\n </button>\n <span className=\"text-text-muted\">|</span>\n <span className=\"text-sm font-medium text-text-primary\">{site.name}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\">\n <DocsCompileStatus revision={compileRevision} onPoll={onPollRevision} />\n </div>\n <button\n onClick={onCompile}\n disabled={compiling}\n className=\"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n <RefreshCw className={`w-3.5 h-3.5 ${compiling ? 'animate-spin' : ''}`} />\n {tr('vibecontrols.docs.edit.compile', 'Compile')}\n </button>\n <button\n onClick={() => setShowSettings(true)}\n className=\"p-1.5 text-text-secondary hover:text-text-primary transition-colors\"\n title=\"Settings\"\n >\n <Settings className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Main content: sidebar + editor */}\n <div className=\"flex-1 grid grid-cols-[260px_1fr] min-h-0\">\n {/* Page tree sidebar */}\n <div className=\"border-r border-border-default overflow-hidden\">\n <DocsPageTree\n pages={pages}\n selectedPageId={selectedPageId}\n onSelectPage={setSelectedPageId}\n onAddPage={onAddPage}\n onDeletePage={onDeletePage}\n />\n </div>\n\n {/* Editor */}\n <div className=\"overflow-hidden\">\n <DocsPageEditor page={selectedPage} onSave={onSavePage} />\n </div>\n </div>\n\n {/* Settings panel */}\n <DocsSettingsPanel\n site={site}\n open={showSettings}\n onClose={() => setShowSettings(false)}\n onSave={onSaveSettings}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AA+BA,SAAgB,EAAc,EAC5B,SACA,UACA,WACA,eACA,cACA,iBACA,cACA,mBACA,oBACA,mBACA,gBACqB;CACrB,IAAM,IAAK,GAAO,EACZ,CAAC,GAAgB,KAAqB,EAAwB,EAAM,IAAI,MAAM,KAAK,EACnF,CAAC,GAAc,KAAmB,EAAS,GAAM,EAEjD,IAAe,EAAM,MAAM,MAAM,EAAE,OAAO,EAAe,IAAI;AAanE,QAXA,QAAgB;AACd,MAAI,EAAM,WAAW,GAAG;AACtB,GAAI,KAAgB,EAAkB,KAAK;AAC3C;;AAGF,GAAI,CAAC,KAAkB,CAAC,EAAM,MAAM,MAAS,EAAK,OAAO,EAAe,KACtE,EAAkB,EAAM,GAAG,GAAG;IAE/B,CAAC,GAAO,EAAe,CAAC,EAGzB,kBAAC,OAAD;EAAK,WAAU;EAAuB,OAAO,EAAE,WAAW,uBAAuB;YAAjF;GAEE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,UAAD;OACE,SAAS;OACT,WAAU;iBAFZ,CAIE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAChC,EAAG,kCAAkC,UAAU,CACzC;;MACT,kBAAC,QAAD;OAAM,WAAU;iBAAkB;OAAQ,CAAA;MAC1C,kBAAC,QAAD;OAAM,WAAU;iBAAyC,EAAK;OAAY,CAAA;MACtE;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD;QAAmB,UAAU;QAAiB,QAAQ;QAAkB,CAAA;OACpE,CAAA;MACN,kBAAC,UAAD;OACE,SAAS;OACT,UAAU;OACV,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAW,WAAW,eAAe,IAAY,iBAAiB,MAAQ,CAAA,EACzE,EAAG,kCAAkC,UAAU,CACzC;;MACT,kBAAC,UAAD;OACE,eAAe,EAAgB,GAAK;OACpC,WAAU;OACV,OAAM;iBAEN,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;OACzB,CAAA;MACL;OACF;;GAGN,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MACS;MACS;MAChB,cAAc;MACH;MACG;MACd,CAAA;KACE,CAAA,EAGN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MAAgB,MAAM;MAAc,QAAQ;MAAc,CAAA;KACtD,CAAA,CACF;;GAGN,kBAAC,GAAD;IACQ;IACN,MAAM;IACN,eAAe,EAAgB,GAAM;IACrC,QAAQ;IACR,CAAA;GACE"}
@@ -1,24 +1,52 @@
1
1
  import { useTr as e } from "../../shared/hooks/useTr.js";
2
2
  import { EmptyState as t } from "../shared/EmptyState.js";
3
3
  import "../shared/index.js";
4
- import { BookOpen as n, Plus as r } from "lucide-react";
5
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ import { DOCS_PROVIDERS as n } from "./types.js";
5
+ import { useState as r } from "react";
6
+ import { BookOpen as i, Plus as a } from "lucide-react";
7
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
8
  //#region src/components/docs/DocsEmptyState.tsx
7
- function o({ onCreate: o, loading: s }) {
8
- let c = e();
9
- return /* @__PURE__ */ i(t, {
10
- icon: /* @__PURE__ */ i(n, { className: "w-8 h-8 text-text-secondary" }),
11
- title: c("vibecontrols.docs.empty.title", "No documentation yet"),
12
- description: c("vibecontrols.docs.empty.description", "Create a documentation site for this vibe to start writing docs with Docusaurus"),
13
- action: /* @__PURE__ */ a("button", {
14
- onClick: o,
15
- disabled: s,
16
- className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
17
- children: [/* @__PURE__ */ i(r, { className: "w-4 h-4" }), c("vibecontrols.docs.empty.createDocs", "Create Documentation")]
9
+ function c({ onCreate: c, loading: l }) {
10
+ let u = e(), [d, f] = r("DOCUSAURUS");
11
+ return /* @__PURE__ */ o(t, {
12
+ icon: /* @__PURE__ */ o(i, { className: "w-8 h-8 text-text-secondary" }),
13
+ title: u("vibecontrols.docs.empty.title", "No documentation yet"),
14
+ description: u("vibecontrols.docs.empty.description", "Pick a static-site generator to back this documentation site. You can switch later."),
15
+ action: /* @__PURE__ */ s("div", {
16
+ className: "flex flex-col items-center gap-3",
17
+ children: [/* @__PURE__ */ o("div", {
18
+ role: "radiogroup",
19
+ "aria-label": "Choose docs provider",
20
+ className: "flex flex-col gap-2 w-full max-w-md",
21
+ children: n.map((e) => /* @__PURE__ */ s("label", {
22
+ "data-testid": `docs-empty-provider-${e.value.toLowerCase()}`,
23
+ className: "flex items-start gap-3 p-3 bg-bg-sunken rounded-md cursor-pointer border border-border-default hover:border-action-primary-bg transition-colors text-left",
24
+ children: [/* @__PURE__ */ o("input", {
25
+ type: "radio",
26
+ name: "docs-empty-provider",
27
+ value: e.value,
28
+ checked: d === e.value,
29
+ onChange: () => f(e.value),
30
+ className: "mt-1 accent-action-primary-bg"
31
+ }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
32
+ className: "text-sm font-medium text-text-primary",
33
+ children: e.label
34
+ }), /* @__PURE__ */ o("p", {
35
+ className: "text-xs text-text-muted",
36
+ children: e.description
37
+ })] })]
38
+ }, e.value))
39
+ }), /* @__PURE__ */ s("button", {
40
+ onClick: () => c(d),
41
+ disabled: l,
42
+ "data-testid": "docs-empty-create-button",
43
+ className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
44
+ children: [/* @__PURE__ */ o(a, { className: "w-4 h-4" }), u("vibecontrols.docs.empty.createDocs", "Create Documentation")]
45
+ })]
18
46
  })
19
47
  });
20
48
  }
21
49
  //#endregion
22
- export { o as DocsEmptyState };
50
+ export { c as DocsEmptyState };
23
51
 
24
52
  //# sourceMappingURL=DocsEmptyState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocsEmptyState.js","names":[],"sources":["../../../src/components/docs/DocsEmptyState.tsx"],"sourcesContent":["import { BookOpen, Plus } from 'lucide-react';\nimport { EmptyState } from '@/components/shared';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface DocsEmptyStateProps {\n onCreate: () => void;\n loading?: boolean;\n}\n\nexport function DocsEmptyState({ onCreate, loading }: DocsEmptyStateProps) {\n const tr = useTr();\n return (\n <EmptyState\n icon={<BookOpen className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibecontrols.docs.empty.title', 'No documentation yet')}\n description={tr(\n 'vibecontrols.docs.empty.description',\n 'Create a documentation site for this vibe to start writing docs with Docusaurus'\n )}\n action={\n <button\n onClick={onCreate}\n disabled={loading}\n className=\"flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibecontrols.docs.empty.createDocs', 'Create Documentation')}\n </button>\n }\n />\n );\n}\n"],"mappings":";;;;;;AASA,SAAgB,EAAe,EAAE,aAAU,cAAgC;CACzE,IAAM,IAAK,GAAO;AAClB,QACE,kBAAC,GAAD;EACE,MAAM,kBAAC,GAAD,EAAU,WAAU,+BAAgC,CAAA;EAC1D,OAAO,EAAG,iCAAiC,uBAAuB;EAClE,aAAa,EACX,uCACA,kFACD;EACD,QACE,kBAAC,UAAD;GACE,SAAS;GACT,UAAU;GACV,WAAU;aAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAG,sCAAsC,uBAAuB,CAC1D;;EAEX,CAAA"}
1
+ {"version":3,"file":"DocsEmptyState.js","names":[],"sources":["../../../src/components/docs/DocsEmptyState.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { BookOpen, Plus } from 'lucide-react';\nimport { EmptyState } from '@/components/shared';\nimport { useTr } from '../../shared/hooks/useTr';\nimport type { DocsProvider } from './types';\nimport { DOCS_PROVIDERS } from './types';\n\ninterface DocsEmptyStateProps {\n onCreate: (provider: DocsProvider) => void;\n loading?: boolean;\n}\n\nexport function DocsEmptyState({ onCreate, loading }: DocsEmptyStateProps) {\n const tr = useTr();\n const [provider, setProvider] = useState<DocsProvider>('DOCUSAURUS');\n return (\n <EmptyState\n icon={<BookOpen className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibecontrols.docs.empty.title', 'No documentation yet')}\n description={tr(\n 'vibecontrols.docs.empty.description',\n 'Pick a static-site generator to back this documentation site. You can switch later.'\n )}\n action={\n <div className=\"flex flex-col items-center gap-3\">\n <div\n role=\"radiogroup\"\n aria-label=\"Choose docs provider\"\n className=\"flex flex-col gap-2 w-full max-w-md\"\n >\n {DOCS_PROVIDERS.map((p) => (\n <label\n key={p.value}\n data-testid={`docs-empty-provider-${p.value.toLowerCase()}`}\n className=\"flex items-start gap-3 p-3 bg-bg-sunken rounded-md cursor-pointer border border-border-default hover:border-action-primary-bg transition-colors text-left\"\n >\n <input\n type=\"radio\"\n name=\"docs-empty-provider\"\n value={p.value}\n checked={provider === p.value}\n onChange={() => setProvider(p.value)}\n className=\"mt-1 accent-action-primary-bg\"\n />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{p.label}</p>\n <p className=\"text-xs text-text-muted\">{p.description}</p>\n </div>\n </label>\n ))}\n </div>\n <button\n onClick={() => onCreate(provider)}\n disabled={loading}\n data-testid=\"docs-empty-create-button\"\n className=\"flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibecontrols.docs.empty.createDocs', 'Create Documentation')}\n </button>\n </div>\n }\n />\n );\n}\n"],"mappings":";;;;;;;;AAYA,SAAgB,EAAe,EAAE,aAAU,cAAgC;CACzE,IAAM,IAAK,GAAO,EACZ,CAAC,GAAU,KAAe,EAAuB,aAAa;AACpE,QACE,kBAAC,GAAD;EACE,MAAM,kBAAC,GAAD,EAAU,WAAU,+BAAgC,CAAA;EAC1D,OAAO,EAAG,iCAAiC,uBAAuB;EAClE,aAAa,EACX,uCACA,sFACD;EACD,QACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IACE,MAAK;IACL,cAAW;IACX,WAAU;cAET,EAAe,KAAK,MACnB,kBAAC,SAAD;KAEE,eAAa,uBAAuB,EAAE,MAAM,aAAa;KACzD,WAAU;eAHZ,CAKE,kBAAC,SAAD;MACE,MAAK;MACL,MAAK;MACL,OAAO,EAAE;MACT,SAAS,MAAa,EAAE;MACxB,gBAAgB,EAAY,EAAE,MAAM;MACpC,WAAU;MACV,CAAA,EACF,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAyC,EAAE;MAAU,CAAA,EAClE,kBAAC,KAAD;MAAG,WAAU;gBAA2B,EAAE;MAAgB,CAAA,CACtD,EAAA,CAAA,CACA;OAhBD,EAAE,MAgBD,CACR;IACE,CAAA,EACN,kBAAC,UAAD;IACE,eAAe,EAAS,EAAS;IACjC,UAAU;IACV,eAAY;IACZ,WAAU;cAJZ,CAME,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAG,sCAAsC,uBAAuB,CAC1D;MACL;;EAER,CAAA"}