@auraone/aura-ide-kit 0.2.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,955 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ AURA_IDE_COMPONENT_POSTURE: () => AURA_IDE_COMPONENT_POSTURE,
34
+ AURA_INTAKE_PRIVACY_COPY: () => AURA_INTAKE_PRIVACY_COPY,
35
+ AURA_INTAKE_PRIVACY_URL: () => AURA_INTAKE_PRIVACY_URL,
36
+ AuraCommandPalette: () => AuraCommandPalette,
37
+ AuraEmptyState: () => AuraEmptyState,
38
+ AuraErrorState: () => AuraErrorState,
39
+ AuraFileWatcherStatus: () => AuraFileWatcherStatus,
40
+ AuraIdeAppFrame: () => AuraIdeAppFrame,
41
+ AuraInspector: () => AuraInspector,
42
+ AuraIntakeIdentityFields: () => AuraIntakeIdentityFields,
43
+ AuraIntakePacketPreview: () => AuraIntakePacketPreview,
44
+ AuraKeychainFallbackWarning: () => AuraKeychainFallbackWarning,
45
+ AuraLoadingState: () => AuraLoadingState,
46
+ AuraModal: () => AuraModal,
47
+ AuraMonaco: () => AuraMonaco,
48
+ AuraOneMark: () => import_proofline_oss.AuraOneMark,
49
+ AuraPanel: () => AuraPanel,
50
+ AuraProblemsPanel: () => AuraProblemsPanel,
51
+ AuraProjectTree: () => AuraProjectTree,
52
+ AuraSettingsPanel: () => AuraSettingsPanel,
53
+ AuraSplitPane: () => AuraSplitPane,
54
+ AuraStatusBar: () => AuraStatusBar,
55
+ AuraTabbedShell: () => AuraTabbedShell,
56
+ AuraTelemetryEventLog: () => AuraTelemetryEventLog,
57
+ AuraThemeContext: () => AuraThemeContext,
58
+ AuraTimeline: () => AuraTimeline,
59
+ AuraToastProvider: () => AuraToastProvider,
60
+ AuraUpdatePrompt: () => AuraUpdatePrompt,
61
+ AuraWelcomePrivacyWizard: () => AuraWelcomePrivacyWizard,
62
+ AuraWelcomeWindow: () => AuraWelcomeWindow,
63
+ ProoflineButton: () => import_proofline_oss.ProoflineButton,
64
+ ProoflinePanel: () => import_proofline_oss.ProoflinePanel,
65
+ ProoflineProductGlyph: () => import_proofline_oss.ProoflineProductGlyph,
66
+ ProoflineState: () => import_proofline_oss.ProoflineState,
67
+ ProoflineStatus: () => import_proofline_oss.ProoflineStatus,
68
+ createCommandRegistry: () => createCommandRegistry,
69
+ createDefaultIdeCommands: () => createDefaultIdeCommands,
70
+ installOfficialStyleSheet: () => import_proofline_oss.installOfficialStyleSheet,
71
+ isCommandPaletteKey: () => isCommandPaletteKey,
72
+ postureFor: () => postureFor,
73
+ prooflineProductIcons: () => import_proofline_oss.prooflineProductIcons,
74
+ prooflineStatusLabels: () => import_proofline_oss.prooflineStatusLabels,
75
+ prooflineStatusTones: () => import_proofline_oss.prooflineStatusTones,
76
+ useAuraTheme: () => useAuraTheme,
77
+ useAuraToast: () => useAuraToast
78
+ });
79
+ module.exports = __toCommonJS(index_exports);
80
+
81
+ // src/command-registry.ts
82
+ function createCommandRegistry(initialCommands = []) {
83
+ const commands = /* @__PURE__ */ new Map();
84
+ for (const command of initialCommands) {
85
+ commands.set(command.id, command);
86
+ }
87
+ const list = () => Array.from(commands.values()).sort((a, b) => a.title.localeCompare(b.title));
88
+ return {
89
+ register(command) {
90
+ if (commands.has(command.id)) {
91
+ throw new Error(`Command already registered: ${command.id}`);
92
+ }
93
+ commands.set(command.id, command);
94
+ return () => {
95
+ commands.delete(command.id);
96
+ };
97
+ },
98
+ list,
99
+ find(query) {
100
+ const available = list();
101
+ const normalizedQuery = normalize(query);
102
+ if (!normalizedQuery) {
103
+ return available;
104
+ }
105
+ return available.filter((command) => {
106
+ const haystack = normalize([command.title, command.group, command.id, ...command.keywords ?? []].join(" "));
107
+ return haystack.includes(normalizedQuery) || isSubsequence(normalizedQuery, haystack);
108
+ });
109
+ },
110
+ async run(id) {
111
+ const command = commands.get(id);
112
+ if (!command) {
113
+ throw new Error(`Unknown command: ${id}`);
114
+ }
115
+ if (command.disabled) {
116
+ return;
117
+ }
118
+ await command.handler();
119
+ }
120
+ };
121
+ }
122
+ function normalize(value) {
123
+ return value.trim().toLowerCase().replace(/\s+/g, " ");
124
+ }
125
+ function isSubsequence(needle, haystack) {
126
+ let index = 0;
127
+ for (const character of haystack) {
128
+ if (character === needle[index]) {
129
+ index += 1;
130
+ }
131
+ if (index === needle.length) {
132
+ return true;
133
+ }
134
+ }
135
+ return false;
136
+ }
137
+
138
+ // src/components.tsx
139
+ var import_react2 = __toESM(require("@monaco-editor/react"), 1);
140
+ var import_lucide_react = require("lucide-react");
141
+ var import_react3 = require("react");
142
+
143
+ // src/theme.ts
144
+ var import_react = require("react");
145
+ var AuraThemeContext = (0, import_react.createContext)({
146
+ mode: "system",
147
+ setMode: () => void 0
148
+ });
149
+ function useAuraTheme() {
150
+ return (0, import_react.useContext)(AuraThemeContext);
151
+ }
152
+
153
+ // src/components.tsx
154
+ var import_jsx_runtime = require("react/jsx-runtime");
155
+ function cx(...classes) {
156
+ return classes.filter(Boolean).join(" ");
157
+ }
158
+ function AuraIdeAppFrame({
159
+ productName,
160
+ projectName = "No project open",
161
+ commands,
162
+ sidebar,
163
+ main,
164
+ inspector,
165
+ bottomPanel,
166
+ statusBar,
167
+ themeMode = "system",
168
+ onThemeModeChange
169
+ }) {
170
+ const [paletteOpen, setPaletteOpen] = (0, import_react3.useState)(false);
171
+ const [mode, setMode] = (0, import_react3.useState)(themeMode);
172
+ (0, import_react3.useEffect)(() => {
173
+ setMode(themeMode);
174
+ }, [themeMode]);
175
+ (0, import_react3.useEffect)(() => {
176
+ const listener = (event) => {
177
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") {
178
+ event.preventDefault();
179
+ setPaletteOpen(true);
180
+ }
181
+ };
182
+ window.addEventListener("keydown", listener);
183
+ return () => window.removeEventListener("keydown", listener);
184
+ }, []);
185
+ const themeValue = (0, import_react3.useMemo)(
186
+ () => ({
187
+ mode,
188
+ setMode: (nextMode) => {
189
+ setMode(nextMode);
190
+ onThemeModeChange?.(nextMode);
191
+ }
192
+ }),
193
+ [mode, onThemeModeChange]
194
+ );
195
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuraThemeContext.Provider, { value: themeValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-ide-root", "data-theme": mode, children: [
196
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-ide-titlebar", children: [
197
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
198
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-ide-titlebar__product", children: productName }),
199
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-ide-titlebar__project", children: projectName })
200
+ ] }),
201
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { className: "aura-ide-icon-button", type: "button", "aria-label": "Open command palette", onClick: () => setPaletteOpen(true), children: [
202
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Command, { size: 16 }),
203
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Cmd/Ctrl K" })
204
+ ] })
205
+ ] }),
206
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
207
+ AuraSplitPane,
208
+ {
209
+ start: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("aside", { className: "aura-ide-sidebar", children: sidebar }),
210
+ end: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-ide-workbench", children: [
211
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-ide-main-row", children: [
212
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", { className: "aura-ide-main", children: main }),
213
+ inspector ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("aside", { className: "aura-ide-inspector", children: inspector }) : null
214
+ ] }),
215
+ bottomPanel ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", { className: "aura-ide-bottom-panel", children: bottomPanel }) : null
216
+ ] }),
217
+ defaultStartSize: 280,
218
+ minStartSize: 220,
219
+ maxStartSize: 420
220
+ }
221
+ ),
222
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("footer", { className: "aura-ide-statusbar", children: statusBar }),
223
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuraCommandPalette, { registry: commands, open: paletteOpen, onOpenChange: setPaletteOpen })
224
+ ] }) });
225
+ }
226
+ function AuraSplitPane({
227
+ start,
228
+ end,
229
+ defaultStartSize = 320,
230
+ minStartSize = 180,
231
+ maxStartSize = 600
232
+ }) {
233
+ const [startSize, setStartSize] = (0, import_react3.useState)(defaultStartSize);
234
+ const dragging = (0, import_react3.useRef)(false);
235
+ (0, import_react3.useEffect)(() => {
236
+ const move = (event) => {
237
+ if (!dragging.current) {
238
+ return;
239
+ }
240
+ const next = Math.min(maxStartSize, Math.max(minStartSize, event.clientX));
241
+ setStartSize(next);
242
+ };
243
+ const up = () => {
244
+ dragging.current = false;
245
+ };
246
+ window.addEventListener("mousemove", move);
247
+ window.addEventListener("mouseup", up);
248
+ return () => {
249
+ window.removeEventListener("mousemove", move);
250
+ window.removeEventListener("mouseup", up);
251
+ };
252
+ }, [maxStartSize, minStartSize]);
253
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-split-pane", style: { "--aura-pane-start": `${startSize}px` }, children: [
254
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-split-pane__start", children: start }),
255
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
256
+ "div",
257
+ {
258
+ className: "aura-split-pane__handle",
259
+ role: "separator",
260
+ "aria-orientation": "vertical",
261
+ "aria-valuemin": minStartSize,
262
+ "aria-valuemax": maxStartSize,
263
+ "aria-valuenow": startSize,
264
+ tabIndex: 0,
265
+ onMouseDown: () => {
266
+ dragging.current = true;
267
+ },
268
+ onKeyDown: (event) => {
269
+ if (event.key === "ArrowLeft") {
270
+ setStartSize((value) => Math.max(minStartSize, value - 16));
271
+ }
272
+ if (event.key === "ArrowRight") {
273
+ setStartSize((value) => Math.min(maxStartSize, value + 16));
274
+ }
275
+ }
276
+ }
277
+ ),
278
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-split-pane__end", children: end })
279
+ ] });
280
+ }
281
+ function AuraProjectTree({ nodes, selectedId, onSelect }) {
282
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-tree", role: "tree", "aria-label": "Project files", children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TreeNode, { node, selectedId, depth: 0, onSelect }, node.id)) });
283
+ }
284
+ function TreeNode({
285
+ node,
286
+ selectedId,
287
+ depth,
288
+ onSelect
289
+ }) {
290
+ const [expanded, setExpanded] = (0, import_react3.useState)(node.expanded ?? true);
291
+ const hasChildren = Boolean(node.children?.length);
292
+ const Icon = node.kind === "folder" ? expanded ? import_lucide_react.FolderOpen : import_lucide_react.Folder : import_lucide_react.File;
293
+ const activate = () => {
294
+ if (node.kind === "folder" && hasChildren) {
295
+ setExpanded((value) => !value);
296
+ }
297
+ onSelect?.(node);
298
+ };
299
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react3.Fragment, { children: [
300
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
301
+ "button",
302
+ {
303
+ type: "button",
304
+ role: "treeitem",
305
+ "aria-expanded": node.kind === "folder" ? expanded : void 0,
306
+ "aria-selected": selectedId === node.id,
307
+ className: "aura-tree-row",
308
+ style: { "--aura-tree-depth": depth },
309
+ onClick: activate,
310
+ children: [
311
+ hasChildren ? expanded ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDown, { size: 14 }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronRight, { size: 14 }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-tree-row__spacer" }),
312
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { size: 15 }),
313
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-tree-row__name", children: node.name }),
314
+ node.dirty ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CircleDot, { className: "aura-tree-row__dirty", size: 10, "aria-label": "Dirty" }) : null,
315
+ node.conflict ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ShieldAlert, { className: "aura-tree-row__conflict", size: 13, "aria-label": "Conflict" }) : null,
316
+ node.badge ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-tree-row__badge", children: node.badge }) : null
317
+ ]
318
+ }
319
+ ),
320
+ expanded && node.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TreeNode, { node: child, selectedId, depth: depth + 1, onSelect }, child.id))
321
+ ] });
322
+ }
323
+ function AuraTabbedShell({ tabs, activeTabId, onActiveTabChange, onCloseTab }) {
324
+ const activeTab = tabs.find((tab) => tab.id === activeTabId) ?? tabs[0];
325
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-tabs", children: [
326
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-tabs__bar", role: "tablist", "aria-label": "Open editors", children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
327
+ "button",
328
+ {
329
+ type: "button",
330
+ role: "tab",
331
+ "aria-selected": tab.id === activeTab?.id,
332
+ className: "aura-tabs__tab",
333
+ onClick: () => onActiveTabChange(tab.id),
334
+ onMouseDown: (event) => {
335
+ if (event.button === 1) {
336
+ onCloseTab?.(tab.id);
337
+ }
338
+ },
339
+ children: [
340
+ tab.icon,
341
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: tab.title }),
342
+ tab.dirty ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Circle, { size: 8, fill: "currentColor", "aria-label": "Unsaved changes" }) : null,
343
+ onCloseTab ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
344
+ "span",
345
+ {
346
+ role: "button",
347
+ tabIndex: 0,
348
+ className: "aura-tabs__close",
349
+ "aria-label": `Close ${tab.title}`,
350
+ onClick: (event) => {
351
+ event.stopPropagation();
352
+ onCloseTab(tab.id);
353
+ },
354
+ onKeyDown: (event) => {
355
+ if (event.key === "Enter" || event.key === " ") {
356
+ event.preventDefault();
357
+ onCloseTab(tab.id);
358
+ }
359
+ },
360
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { size: 13 })
361
+ }
362
+ ) : null
363
+ ]
364
+ },
365
+ tab.id
366
+ )) }),
367
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-tabs__panel", role: "tabpanel", children: activeTab?.content })
368
+ ] });
369
+ }
370
+ function AuraMonaco({ value, language = "typescript", path, readOnly = false, theme = "dark", onChange }) {
371
+ const editorProps = path ? { path } : {};
372
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-monaco", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
373
+ import_react2.default,
374
+ {
375
+ value,
376
+ language,
377
+ ...editorProps,
378
+ theme: theme === "light" ? "vs" : theme === "high-contrast" ? "hc-black" : "vs-dark",
379
+ options: {
380
+ readOnly,
381
+ automaticLayout: true,
382
+ minimap: { enabled: false },
383
+ fontFamily: "var(--ag-font-mono)",
384
+ fontSize: 13,
385
+ renderLineHighlight: "line",
386
+ scrollBeyondLastLine: false,
387
+ tabSize: 2
388
+ },
389
+ onChange: (nextValue) => onChange?.(nextValue ?? "")
390
+ }
391
+ ) });
392
+ }
393
+ function AuraTimeline({ items }) {
394
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ol", { className: "aura-timeline", "aria-label": "Timeline", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", { className: cx("aura-timeline__item", `aura-timeline__item--${item.severity ?? "neutral"}`), children: [
395
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-timeline__dot" }),
396
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
397
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-timeline__title", children: item.title }),
398
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("time", { className: "aura-timeline__time", dateTime: item.timestamp, children: item.timestamp }),
399
+ item.description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: item.description }) : null
400
+ ] })
401
+ ] }, item.id)) });
402
+ }
403
+ function AuraInspector({ title, children }) {
404
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-panel", "aria-label": title, children: [
405
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "aura-panel__header", children: [
406
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Info, { size: 15 }),
407
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: title })
408
+ ] }),
409
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-panel__body", children })
410
+ ] });
411
+ }
412
+ function AuraCommandPalette({ registry, open, onOpenChange }) {
413
+ const [query, setQuery] = (0, import_react3.useState)("");
414
+ const commands = registry.find(query);
415
+ if (!open) {
416
+ return null;
417
+ }
418
+ const grouped = commands.reduce((groups, command) => {
419
+ const groupCommands = groups.get(command.group) ?? [];
420
+ groupCommands.push(command);
421
+ groups.set(command.group, groupCommands);
422
+ return groups;
423
+ }, /* @__PURE__ */ new Map());
424
+ const runCommand = async (command) => {
425
+ await registry.run(command.id);
426
+ onOpenChange(false);
427
+ setQuery("");
428
+ };
429
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-modal-backdrop", role: "presentation", onMouseDown: () => onOpenChange(false), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-command-palette", role: "dialog", "aria-modal": "true", "aria-label": "Command palette", onMouseDown: (event) => event.stopPropagation(), children: [
430
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "aura-command-palette__search", children: [
431
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Search, { size: 16 }),
432
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { autoFocus: true, value: query, placeholder: "Search commands", onChange: (event) => setQuery(event.currentTarget.value) })
433
+ ] }),
434
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-command-palette__results", children: [
435
+ Array.from(grouped.entries()).map(([group, groupCommands]) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-command-palette__group", children: [
436
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-command-palette__group-title", children: group }),
437
+ groupCommands.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", disabled: command.disabled, className: "aura-command-palette__item", onClick: () => void runCommand(command), children: [
438
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: command.title }),
439
+ command.keybinding ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("kbd", { children: command.keybinding }) : null
440
+ ] }, command.id))
441
+ ] }, group)),
442
+ !commands.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuraEmptyState, { title: "No commands", description: "Refine the query or register commands through the platform registry." }) : null
443
+ ] })
444
+ ] }) });
445
+ }
446
+ function AuraStatusBar({ items }) {
447
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-status-items", role: "status", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: cx("aura-status-item", `aura-status-item--${item.tone ?? "neutral"}`), children: [
448
+ item.label,
449
+ item.value ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: item.value }) : null
450
+ ] }, item.id)) });
451
+ }
452
+ function AuraProblemsPanel({ problems }) {
453
+ const icon = {
454
+ info: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Info, { size: 14 }),
455
+ warning: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.AlertTriangle, { size: 14 }),
456
+ error: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ShieldAlert, { size: 14 })
457
+ };
458
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-panel", "aria-label": "Problems", children: [
459
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "aura-panel__header", children: [
460
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.AlertTriangle, { size: 15 }),
461
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Problems" }),
462
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "aura-panel__count", children: problems.length })
463
+ ] }),
464
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-problems", children: [
465
+ problems.map((problem) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: cx("aura-problem", `aura-problem--${problem.severity}`), children: [
466
+ icon[problem.severity],
467
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: problem.message }),
468
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: [problem.path, problem.line, problem.column].filter(Boolean).join(":") })
469
+ ] }, problem.id)),
470
+ !problems.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuraEmptyState, { title: "No problems", description: "Project checks are clean.", compact: true }) : null
471
+ ] })
472
+ ] });
473
+ }
474
+ function AuraSettingsPanel({
475
+ productName,
476
+ telemetryEnabled,
477
+ crashReportsEnabled,
478
+ onTelemetryChange,
479
+ onCrashReportsChange
480
+ }) {
481
+ const { mode, setMode } = (0, import_react3.useContext)(AuraThemeContext);
482
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-panel", "aria-label": `${productName} settings`, children: [
483
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "aura-panel__header", children: [
484
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 15 }),
485
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Settings" })
486
+ ] }),
487
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-settings", children: [
488
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
489
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Theme" }),
490
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("select", { value: mode, onChange: (event) => setMode(event.currentTarget.value), children: [
491
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "system", children: "Follow OS" }),
492
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "dark", children: "Dark" }),
493
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "light", children: "Light" }),
494
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "high-contrast", children: "High contrast" })
495
+ ] })
496
+ ] }),
497
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
498
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Telemetry" }),
499
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: telemetryEnabled, onChange: (event) => onTelemetryChange(event.currentTarget.checked) })
500
+ ] }),
501
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
502
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Crash reports" }),
503
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: crashReportsEnabled, onChange: (event) => onCrashReportsChange(event.currentTarget.checked) })
504
+ ] })
505
+ ] })
506
+ ] });
507
+ }
508
+ function AuraWelcomePrivacyWizard({
509
+ productWorkNoun = "rubrics, datasets, or agent traces",
510
+ telemetryEnabled,
511
+ crashReportsEnabled,
512
+ onTelemetryChange,
513
+ onCrashReportsChange,
514
+ onComplete
515
+ }) {
516
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-privacy-wizard", "aria-label": "Welcome privacy choices", children: [
517
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("article", { children: [
518
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Help improve AuraOne Open Studio" }),
519
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "If you opt in, the app will send us anonymous usage signals so we can prioritize what to build next. We will never send the contents of your work." }),
520
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "What we send" }),
521
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", { children: [
522
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "Anonymous install ID" }),
523
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "App version and OS" }),
524
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "High-level feature usage" }),
525
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "Error counts" }),
526
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "Session length" })
527
+ ] }),
528
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "What we never send" }),
529
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", { children: [
530
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", { children: [
531
+ "Your ",
532
+ productWorkNoun
533
+ ] }),
534
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "API keys" }),
535
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "File paths or hostnames" }),
536
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "Anything you typed into the editor" })
537
+ ] }),
538
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
539
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: telemetryEnabled, onChange: (event) => onTelemetryChange(event.currentTarget.checked) }),
540
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Help improve AuraOne Open Studio (opt in)" })
541
+ ] }),
542
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Don't send anything (default)" })
543
+ ] }),
544
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("article", { children: [
545
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Help us fix what breaks" }),
546
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "If something crashes, we'd love to know so we can fix it. We can send an anonymous crash report to AuraOne if you opt in." }),
547
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "What we send" }),
548
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", { children: [
549
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "The stack trace and minidump from the crash" }),
550
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "Your OS and app version" }),
551
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "An install-scoped random ID" })
552
+ ] }),
553
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "What we never send" }),
554
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", { children: [
555
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", { children: [
556
+ "The contents of your ",
557
+ productWorkNoun
558
+ ] }),
559
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "API keys" }),
560
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: "File paths or hostnames" })
561
+ ] }),
562
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
563
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", checked: crashReportsEnabled, onChange: (event) => onCrashReportsChange(event.currentTarget.checked) }),
564
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Send crash reports" })
565
+ ] }),
566
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Don't send anything" })
567
+ ] }),
568
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: onComplete, children: "Continue" })
569
+ ] });
570
+ }
571
+ function AuraUpdatePrompt({
572
+ version,
573
+ releaseNotes,
574
+ signedBy,
575
+ mandatory = false,
576
+ onInstallNow,
577
+ onInstallOnRestart,
578
+ onRemindLater
579
+ }) {
580
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-update-prompt", "aria-label": "Software update", children: [
581
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { children: [
582
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCircle2, { size: 18 }),
583
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
584
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Update available" }),
585
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { children: [
586
+ "Version ",
587
+ version
588
+ ] })
589
+ ] })
590
+ ] }),
591
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", { children: releaseNotes }),
592
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { title: `Signed by ${signedBy}`, children: [
593
+ "Signed by ",
594
+ signedBy
595
+ ] }),
596
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
597
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: onInstallOnRestart, children: "Install next launch" }),
598
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: onInstallNow, children: "Install now" }),
599
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: onRemindLater, disabled: mandatory, children: "Remind later" })
600
+ ] })
601
+ ] });
602
+ }
603
+ function AuraIntakeIdentityFields({
604
+ displayName,
605
+ email = "",
606
+ intent,
607
+ onDisplayNameChange,
608
+ onEmailChange,
609
+ onIntentChange
610
+ }) {
611
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-intake-identity", "aria-label": "Intake identity", children: [
612
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
613
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Display name" }),
614
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "text", value: displayName, required: true, autoComplete: "name", onChange: (event) => onDisplayNameChange(event.currentTarget.value) })
615
+ ] }),
616
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
617
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Email (optional)" }),
618
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "email", value: email, autoComplete: "email", onChange: (event) => onEmailChange(event.currentTarget.value) })
619
+ ] }),
620
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
621
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Intent note" }),
622
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("textarea", { value: intent, required: true, rows: 4, onChange: (event) => onIntentChange(event.currentTarget.value) })
623
+ ] })
624
+ ] });
625
+ }
626
+ function AuraKeychainFallbackWarning({
627
+ backendKind,
628
+ firstSecretSet = false,
629
+ onDismiss
630
+ }) {
631
+ if (backendKind !== "linux-encrypted-file-fallback" || !firstSecretSet) {
632
+ return null;
633
+ }
634
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-keychain-warning", role: "status", "aria-label": "Linux keychain fallback warning", children: [
635
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ShieldAlert, { size: 18 }),
636
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
637
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "Linux Secret Service is unavailable" }),
638
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "AuraOne stored this secret in the encrypted local fallback store. Install or unlock a Secret Service provider to use the native Linux keychain." })
639
+ ] }),
640
+ onDismiss ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: onDismiss, children: "Dismiss" }) : null
641
+ ] });
642
+ }
643
+ var ToastContext = (0, import_react3.createContext)({ push: () => void 0, dismiss: () => void 0 });
644
+ function AuraToastProvider({ children }) {
645
+ const [toasts, setToasts] = (0, import_react3.useState)([]);
646
+ const value = (0, import_react3.useMemo)(
647
+ () => ({
648
+ push(toast) {
649
+ setToasts((current) => [...current, { ...toast, id: crypto.randomUUID() }]);
650
+ },
651
+ dismiss(id) {
652
+ setToasts((current) => current.filter((toast) => toast.id !== id));
653
+ }
654
+ }),
655
+ []
656
+ );
657
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ToastContext.Provider, { value, children: [
658
+ children,
659
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-toast-region", "aria-live": "polite", "aria-label": "Notifications", children: toasts.map((toast) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: cx("aura-toast", `aura-toast--${toast.tone ?? "info"}`), children: [
660
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Bell, { size: 15 }),
661
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
662
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: toast.title }),
663
+ toast.description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: toast.description }) : null
664
+ ] }),
665
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", "aria-label": "Dismiss notification", onClick: () => value.dismiss(toast.id), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { size: 14 }) })
666
+ ] }, toast.id)) })
667
+ ] });
668
+ }
669
+ function useAuraToast() {
670
+ return (0, import_react3.useContext)(ToastContext);
671
+ }
672
+ function AuraModal({ open, title, children, onClose }) {
673
+ if (!open) {
674
+ return null;
675
+ }
676
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-modal-backdrop", role: "presentation", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-modal", role: "dialog", "aria-modal": "true", "aria-label": title, onMouseDown: (event) => event.stopPropagation(), children: [
677
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "aura-modal__header", children: [
678
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: title }),
679
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", "aria-label": "Close modal", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { size: 16 }) })
680
+ ] }),
681
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-modal__body", children })
682
+ ] }) });
683
+ }
684
+ function AuraEmptyState({ title, description, compact = false }) {
685
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: cx("aura-state", compact && "aura-state--compact"), children: [
686
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Code2, { size: compact ? 18 : 28 }),
687
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: title }),
688
+ description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: description }) : null
689
+ ] });
690
+ }
691
+ function AuraLoadingState({ label = "Loading" }) {
692
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-state", role: "status", children: [
693
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { className: "aura-spin", size: 28 }),
694
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: label })
695
+ ] });
696
+ }
697
+ function AuraErrorState({ title, description, onRetry }) {
698
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-state aura-state--error", role: "alert", children: [
699
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ShieldAlert, { size: 28 }),
700
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: title }),
701
+ description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: description }) : null,
702
+ onRetry ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: onRetry, children: "Retry" }) : null
703
+ ] });
704
+ }
705
+ function AuraTelemetryEventLog({ events }) {
706
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-panel", "aria-label": "Telemetry event log", children: [
707
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "aura-panel__header", children: [
708
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCircle2, { size: 15 }),
709
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Telemetry Event Log" })
710
+ ] }),
711
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-event-log", children: events.length ? events.map((event) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("article", { className: "aura-event-log__row", children: [
712
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
713
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: event.name }),
714
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("time", { dateTime: event.timestamp, children: event.timestamp })
715
+ ] }),
716
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: event.deliveryStatus === "local_preview" ? "local preview" : event.deliveryStatus === "would_send" ? "not sent" : event.destination === "local" ? "local only" : "delivery unverified" }),
717
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
718
+ "pre",
719
+ {
720
+ tabIndex: 0,
721
+ role: "region",
722
+ "aria-label": `${event.name} payload preview`,
723
+ children: JSON.stringify(event.payloadPreview, null, 2)
724
+ }
725
+ )
726
+ ] }, event.id)) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
727
+ AuraEmptyState,
728
+ {
729
+ compact: true,
730
+ title: "No local events",
731
+ description: "Eligible diagnostics appear here after they are recorded. This log does not confirm network delivery."
732
+ }
733
+ ) })
734
+ ] });
735
+ }
736
+ var AURA_INTAKE_PRIVACY_URL = "https://auraone.ai/open/privacy/intake";
737
+ var AURA_INTAKE_PRIVACY_COPY = {
738
+ sent: [
739
+ "A manifest describing the project metadata you entered.",
740
+ "The payload files you reviewed in the preview screen above.",
741
+ "A signature from your local install (used only for deduplication)."
742
+ ],
743
+ neverSent: [
744
+ "Your API keys.",
745
+ "File paths from your machine (replaced with <PROJECT>/... references).",
746
+ "Hostnames or environment variables.",
747
+ "Anything you did not see in the preview screen above."
748
+ ],
749
+ consent: "If you cancel before clicking Send, nothing leaves your machine. If you click Send, the only thing that leaves your machine is the contents of the packet you just reviewed."
750
+ };
751
+ function AuraIntakePacketPreview({
752
+ packet,
753
+ manifestTree,
754
+ consentChecked = false,
755
+ onConsentChange,
756
+ privacyUrl = AURA_INTAKE_PRIVACY_URL
757
+ }) {
758
+ const totalBytes = packet.includedFiles.reduce((sum, file) => sum + file.bytes, 0);
759
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-panel", "aria-label": "Intake packet preview", children: [
760
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "aura-panel__header", children: [
761
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.FolderOpen, { size: 15 }),
762
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Intake Packet" })
763
+ ] }),
764
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", { className: "aura-packet-summary", children: [
765
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
766
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Packet" }),
767
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { children: packet.packetId })
768
+ ] }),
769
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
770
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Flagship" }),
771
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { children: packet.flagship })
772
+ ] }),
773
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
774
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Schema" }),
775
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { children: packet.schemaVersion })
776
+ ] }),
777
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
778
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Files" }),
779
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dd", { children: [
780
+ packet.includedFiles.length,
781
+ " / ",
782
+ new Intl.NumberFormat("en", { notation: "compact" }).format(totalBytes),
783
+ "B"
784
+ ] })
785
+ ] })
786
+ ] }),
787
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-packet-files", children: packet.includedFiles.map((file) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
788
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: file.path }),
789
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: file.role })
790
+ ] }, file.path)) }),
791
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "aura-packet-exclusions", children: [
792
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "Excluded" }),
793
+ packet.excludedPatterns.map((pattern) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: pattern }, pattern))
794
+ ] }),
795
+ packet.warnings.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aura-packet-warnings", children: packet.warnings.map((warning) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: warning }, warning)) }) : null,
796
+ manifestTree ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-packet-manifest", "aria-label": "Manifest tree", children: [
797
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { children: "Manifest Tree" }),
798
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", { children: JSON.stringify(manifestTree, null, 2) })
799
+ ] }) : null,
800
+ onConsentChange ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-packet-privacy", "aria-label": "Intake privacy review", children: [
801
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { children: "What is sent in an intake packet?" }),
802
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "A single zip file containing:" }),
803
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { children: AURA_INTAKE_PRIVACY_COPY.sent.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: item }, item)) }),
804
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { children: "What is never sent in an intake packet?" }),
805
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { children: AURA_INTAKE_PRIVACY_COPY.neverSent.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: item }, item)) }),
806
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: AURA_INTAKE_PRIVACY_COPY.consent }),
807
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: privacyUrl, children: "Read the intake privacy policy" }),
808
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: "aura-packet-consent", children: [
809
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "checkbox", required: true, checked: consentChecked, onChange: (event) => onConsentChange(event.currentTarget.checked) }),
810
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "I reviewed this packet and consent to send only the contents shown above." })
811
+ ] })
812
+ ] }) : null
813
+ ] });
814
+ }
815
+ function AuraFileWatcherStatus({ state, watchedPath, eventsQueued = 0 }) {
816
+ const tone = state === "connected" ? "success" : state === "polling" ? "warning" : "neutral";
817
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: cx("aura-file-watcher", `aura-file-watcher--${tone}`), "aria-live": "polite", "aria-label": "File watcher status", children: [
818
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
819
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Bell, { size: 15 }),
820
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: state === "connected" ? "Watching" : state === "polling" ? "Polling" : "Watcher disabled" })
821
+ ] }),
822
+ watchedPath ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: watchedPath }) : null,
823
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
824
+ eventsQueued,
825
+ " queued"
826
+ ] })
827
+ ] });
828
+ }
829
+ function AuraWelcomeWindow({ productName, recentProjects, onOpenFolder, onOpenRecent }) {
830
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "aura-welcome", "aria-label": `${productName} welcome`, children: [
831
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { children: [
832
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Code2, { size: 22 }),
833
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
834
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { children: productName }),
835
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Local-first project workspace" })
836
+ ] })
837
+ ] }),
838
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", className: "aura-welcome__primary", onClick: onOpenFolder, children: [
839
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.FolderOpen, { size: 16 }),
840
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Open Folder" })
841
+ ] }),
842
+ recentProjects.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { "aria-label": "Recent projects", children: recentProjects.map((project) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", onClick: () => onOpenRecent(project.path), children: [
843
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Folder, { size: 15 }),
844
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: project.name }),
845
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: project.path })
846
+ ] }, project.path)) }) : null
847
+ ] });
848
+ }
849
+ function AuraPanel({ className, children, ...props }) {
850
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", { className: cx("aura-panel", className), ...props, children });
851
+ }
852
+ function createDefaultIdeCommands(openFolder, openSettings) {
853
+ return createCommandRegistry([
854
+ {
855
+ id: "project.open-folder",
856
+ title: "Open Folder",
857
+ group: "Project",
858
+ keybinding: "Mod+O",
859
+ handler: openFolder
860
+ },
861
+ {
862
+ id: "app.settings",
863
+ title: "Open Settings",
864
+ group: "Application",
865
+ keybinding: "Mod+,",
866
+ handler: openSettings
867
+ }
868
+ ]);
869
+ }
870
+ function isCommandPaletteKey(event) {
871
+ return (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k";
872
+ }
873
+
874
+ // src/ssr-posture.ts
875
+ var AURA_IDE_COMPONENT_POSTURE = [
876
+ { component: "AuraIdeAppFrame", posture: "client-only", rationale: "Registers keyboard listeners for the command palette." },
877
+ { component: "AuraSplitPane", posture: "client-only", rationale: "Uses pointer and keyboard resizing state." },
878
+ { component: "AuraProjectTree", posture: "client-only", rationale: "Owns expandable tree state." },
879
+ { component: "AuraMonaco", posture: "client-only-with-suspense", rationale: "Wraps Monaco editor, which is browser-only." },
880
+ { component: "AuraTimeline", posture: "ssr-safe", rationale: "Static list rendering when handlers are not attached." },
881
+ { component: "AuraInspector", posture: "ssr-safe", rationale: "Static panel rendering." },
882
+ { component: "AuraCommandPalette", posture: "client-only", rationale: "Interactive modal search and command execution." },
883
+ { component: "AuraStatusBar", posture: "ssr-safe", rationale: "Static status item rendering." },
884
+ { component: "AuraProblemsPanel", posture: "ssr-safe", rationale: "Static diagnostic list rendering." },
885
+ { component: "AuraSettingsPanel", posture: "client-only", rationale: "Interactive privacy toggles." },
886
+ { component: "AuraWelcomePrivacyWizard", posture: "client-only", rationale: "Interactive telemetry and crash opt-in choices." },
887
+ { component: "AuraUpdatePrompt", posture: "client-only", rationale: "Interactive install/remind update actions." },
888
+ { component: "AuraIntakeIdentityFields", posture: "client-only", rationale: "Controlled intake contact and intent form inputs." },
889
+ { component: "AuraKeychainFallbackWarning", posture: "client-only", rationale: "Dismissible first-use Linux keychain fallback warning." },
890
+ { component: "AuraToastProvider", posture: "client-only", rationale: "Owns transient notification state." },
891
+ { component: "AuraModal", posture: "client-only", rationale: "Interactive dialog state and dismissal." },
892
+ { component: "AuraEmptyState", posture: "ssr-safe", rationale: "Static empty-state rendering." },
893
+ { component: "AuraLoadingState", posture: "ssr-safe", rationale: "Static loading-state rendering." },
894
+ { component: "AuraErrorState", posture: "ssr-safe", rationale: "Static error-state rendering." },
895
+ { component: "AuraTelemetryEventLog", posture: "ssr-safe", rationale: "Static event-list rendering when data is supplied." },
896
+ { component: "AuraIntakePacketPreview", posture: "ssr-safe", rationale: "Static packet preview rendering." },
897
+ { component: "AuraFileWatcherStatus", posture: "ssr-safe", rationale: "Static watcher status rendering when data is supplied." },
898
+ { component: "AuraWelcomeWindow", posture: "client-only", rationale: "Interactive open-folder and recent-project actions." },
899
+ { component: "AuraTabbedShell", posture: "client-only", rationale: "Interactive tab selection." }
900
+ ];
901
+ function postureFor(component) {
902
+ return AURA_IDE_COMPONENT_POSTURE.find((entry) => entry.component === component);
903
+ }
904
+
905
+ // src/index.ts
906
+ var import_proofline_oss = require("@auraone/proofline-oss");
907
+ // Annotate the CommonJS export names for ESM import in node:
908
+ 0 && (module.exports = {
909
+ AURA_IDE_COMPONENT_POSTURE,
910
+ AURA_INTAKE_PRIVACY_COPY,
911
+ AURA_INTAKE_PRIVACY_URL,
912
+ AuraCommandPalette,
913
+ AuraEmptyState,
914
+ AuraErrorState,
915
+ AuraFileWatcherStatus,
916
+ AuraIdeAppFrame,
917
+ AuraInspector,
918
+ AuraIntakeIdentityFields,
919
+ AuraIntakePacketPreview,
920
+ AuraKeychainFallbackWarning,
921
+ AuraLoadingState,
922
+ AuraModal,
923
+ AuraMonaco,
924
+ AuraOneMark,
925
+ AuraPanel,
926
+ AuraProblemsPanel,
927
+ AuraProjectTree,
928
+ AuraSettingsPanel,
929
+ AuraSplitPane,
930
+ AuraStatusBar,
931
+ AuraTabbedShell,
932
+ AuraTelemetryEventLog,
933
+ AuraThemeContext,
934
+ AuraTimeline,
935
+ AuraToastProvider,
936
+ AuraUpdatePrompt,
937
+ AuraWelcomePrivacyWizard,
938
+ AuraWelcomeWindow,
939
+ ProoflineButton,
940
+ ProoflinePanel,
941
+ ProoflineProductGlyph,
942
+ ProoflineState,
943
+ ProoflineStatus,
944
+ createCommandRegistry,
945
+ createDefaultIdeCommands,
946
+ installOfficialStyleSheet,
947
+ isCommandPaletteKey,
948
+ postureFor,
949
+ prooflineProductIcons,
950
+ prooflineStatusLabels,
951
+ prooflineStatusTones,
952
+ useAuraTheme,
953
+ useAuraToast
954
+ });
955
+ //# sourceMappingURL=index.cjs.map