@qodalis/vue-cli 2.0.0-beta.12 → 2.0.0-beta.13

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.js CHANGED
@@ -393,7 +393,7 @@ var CliPanel = (0, import_vue3.defineComponent)({
393
393
  const statusServerState = (0, import_vue3.ref)("none");
394
394
  const statusServerDetails = (0, import_vue3.ref)([]);
395
395
  const statusUptime = (0, import_vue3.ref)(0);
396
- const statusText = (0, import_vue3.ref)(null);
396
+ const notification = (0, import_vue3.ref)(null);
397
397
  const servicesDropdownOpen = (0, import_vue3.ref)(false);
398
398
  const serversDropdownOpen = (0, import_vue3.ref)(false);
399
399
  const servicesDropdownTriggerRect = (0, import_vue3.ref)(null);
@@ -419,8 +419,8 @@ var CliPanel = (0, import_vue3.defineComponent)({
419
419
  statusExecutionState.value = running ? "running" : "idle";
420
420
  const result = context.lastCommandResult;
421
421
  statusLastCommand.value = result ? { name: result.command, success: result.success } : null;
422
- const text = context.getStatusText?.();
423
- statusText.value = text || null;
422
+ const notif = context.notifier?.current;
423
+ notification.value = notif || null;
424
424
  }, 300);
425
425
  globalPollTimer = setInterval(() => {
426
426
  const tab = tabs.value.find((t) => t.id === resolvedActiveTabId.value);
@@ -916,11 +916,62 @@ var CliPanel = (0, import_vue3.defineComponent)({
916
916
  (0, import_vue3.h)("span", { class: "cli-panel-status-icon", innerHTML: "↑" }),
917
917
  (0, import_vue3.h)("span", { class: "cli-panel-status-label" }, formattedUptime.value)
918
918
  ]) : null,
919
- // Custom status text
920
- statusText.value ? (0, import_vue3.h)("span", { class: "cli-panel-status-item status-text" }, [
921
- (0, import_vue3.h)("span", { class: "cli-panel-status-label" }, statusText.value)
919
+ // Custom notification
920
+ notification.value ? (0, import_vue3.h)("span", { class: `cli-panel-status-item status-text level-${notification.value.level}` }, [
921
+ (0, import_vue3.h)("span", { class: "cli-panel-status-label" }, notification.value.message)
922
922
  ]) : null
923
923
  ].filter(Boolean)) : null,
924
+ // Compact status indicators (left/right positions — CSS controls visibility)
925
+ (0, import_vue3.h)("div", { class: "cli-panel-status-indicators-compact" }, [
926
+ // Execution state
927
+ (0, import_vue3.h)("span", { class: "cli-panel-status-compact-item", title: statusExecutionState.value }, [
928
+ (0, import_vue3.h)("span", { class: ["cli-panel-status-dot", statusExecutionState.value === "running" ? "dot-running" : "dot-idle"].join(" ") })
929
+ ]),
930
+ // Background services
931
+ statusServiceCount.value.total > 0 ? (0, import_vue3.h)("span", {
932
+ class: "cli-panel-status-compact-item status-clickable",
933
+ title: `${statusServiceCount.value.running}/${statusServiceCount.value.total} services`,
934
+ onClick: (e) => {
935
+ e.stopPropagation();
936
+ servicesDropdownTriggerRect.value = e.currentTarget.getBoundingClientRect();
937
+ servicesDropdownOpen.value = !servicesDropdownOpen.value;
938
+ serversDropdownOpen.value = false;
939
+ }
940
+ }, [
941
+ (0, import_vue3.h)("span", { class: "cli-panel-status-icon", innerHTML: "⚙" })
942
+ ]) : null,
943
+ // Last command
944
+ statusLastCommand.value ? (0, import_vue3.h)("span", {
945
+ class: "cli-panel-status-compact-item",
946
+ title: `${statusLastCommand.value.success ? "\u2713" : "\u2717"} ${statusLastCommand.value.name}`
947
+ }, [
948
+ (0, import_vue3.h)("span", {
949
+ class: ["cli-panel-status-icon", statusLastCommand.value.success ? "status-success" : "status-error"].join(" "),
950
+ innerHTML: statusLastCommand.value.success ? "✓" : "✕"
951
+ })
952
+ ]) : null,
953
+ // Server connection
954
+ statusServerState.value !== "none" ? (0, import_vue3.h)("span", {
955
+ class: "cli-panel-status-compact-item status-clickable",
956
+ title: `${statusServerDetails.value.filter((s) => s.connected).length}/${statusServerDetails.value.length} servers`,
957
+ onClick: (e) => {
958
+ e.stopPropagation();
959
+ serversDropdownTriggerRect.value = e.currentTarget.getBoundingClientRect();
960
+ serversDropdownOpen.value = !serversDropdownOpen.value;
961
+ servicesDropdownOpen.value = false;
962
+ }
963
+ }, [
964
+ (0, import_vue3.h)("span", { class: ["cli-panel-status-dot", statusServerState.value === "connected" ? "dot-idle" : "dot-error"].join(" ") })
965
+ ]) : null,
966
+ // Uptime
967
+ statusUptime.value > 0 ? (0, import_vue3.h)("span", { class: "cli-panel-status-compact-item status-muted", title: formattedUptime.value }, [
968
+ (0, import_vue3.h)("span", { class: "cli-panel-status-icon", innerHTML: "↑" })
969
+ ]) : null,
970
+ // Notification
971
+ notification.value ? (0, import_vue3.h)("span", { class: "cli-panel-status-compact-item", title: notification.value.message }, [
972
+ (0, import_vue3.h)("span", { class: `cli-panel-status-compact-dot level-${notification.value.level}` })
973
+ ]) : null
974
+ ].filter(Boolean)),
924
975
  (0, import_vue3.h)("div", { class: "cli-panel-action-buttons" }, [
925
976
  (0, import_vue3.h)("div", {
926
977
  class: "cli-panel-btn-position-wrapper",
@@ -1325,7 +1376,17 @@ var CliPanel = (0, import_vue3.defineComponent)({
1325
1376
  style: (() => {
1326
1377
  const rect = servicesDropdownTriggerRect.value;
1327
1378
  if (!rect) return {};
1328
- return resolvedPosition.value === "top" ? { position: "fixed", top: `${rect.bottom + 4}px`, left: `${rect.left}px`, zIndex: 1100 } : { position: "fixed", bottom: `${window.innerHeight - rect.top + 4}px`, left: `${rect.left}px`, zIndex: 1100 };
1379
+ const base = { position: "fixed", zIndex: 1100 };
1380
+ switch (resolvedPosition.value) {
1381
+ case "top":
1382
+ return { ...base, top: `${rect.bottom + 4}px`, left: `${rect.left}px` };
1383
+ case "left":
1384
+ return { ...base, top: `${rect.top}px`, left: `${rect.right + 4}px` };
1385
+ case "right":
1386
+ return { ...base, top: `${rect.top}px`, right: `${window.innerWidth - rect.left + 4}px` };
1387
+ default:
1388
+ return { ...base, bottom: `${window.innerHeight - rect.top + 4}px`, left: `${rect.left}px` };
1389
+ }
1329
1390
  })(),
1330
1391
  onClick: (e) => e.stopPropagation()
1331
1392
  }, [
@@ -1351,7 +1412,17 @@ var CliPanel = (0, import_vue3.defineComponent)({
1351
1412
  style: (() => {
1352
1413
  const rect = serversDropdownTriggerRect.value;
1353
1414
  if (!rect) return {};
1354
- return resolvedPosition.value === "top" ? { position: "fixed", top: `${rect.bottom + 4}px`, left: `${rect.left}px`, zIndex: 1100 } : { position: "fixed", bottom: `${window.innerHeight - rect.top + 4}px`, left: `${rect.left}px`, zIndex: 1100 };
1415
+ const base = { position: "fixed", zIndex: 1100 };
1416
+ switch (resolvedPosition.value) {
1417
+ case "top":
1418
+ return { ...base, top: `${rect.bottom + 4}px`, left: `${rect.left}px` };
1419
+ case "left":
1420
+ return { ...base, top: `${rect.top}px`, left: `${rect.right + 4}px` };
1421
+ case "right":
1422
+ return { ...base, top: `${rect.top}px`, right: `${window.innerWidth - rect.left + 4}px` };
1423
+ default:
1424
+ return { ...base, bottom: `${window.innerHeight - rect.top + 4}px`, left: `${rect.left}px` };
1425
+ }
1355
1426
  })(),
1356
1427
  onClick: (e) => e.stopPropagation()
1357
1428
  }, [