@xpufx/paseo-top 0.4.4 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/OVERVIEW.md +18 -0
  2. package/client/host-ui.tsx +184 -0
  3. package/client/multi-host-view.tsx +57 -43
  4. package/client/multi-host.ts +36 -13
  5. package/client/pill-labels.ts +94 -1
  6. package/client/pill.tsx +692 -616
  7. package/client/resources-query.ts +1 -1
  8. package/client/settings-events.ts +1 -1
  9. package/client/settings-ui.tsx +86 -9
  10. package/client/surface.tsx +308 -276
  11. package/client/telemetry-copy.ts +8 -2
  12. package/client/telemetry.tsx +372 -321
  13. package/client/turn-panel.tsx +126 -104
  14. package/client/vendor/paseo-plugin-helper/{host.ts → core/host.ts} +9 -3
  15. package/client/vendor/paseo-plugin-helper/core/index.ts +76 -0
  16. package/client/vendor/paseo-plugin-helper/core/plugin-load-count.ts +89 -0
  17. package/client/vendor/paseo-plugin-helper/{query-refresh.ts → core/query-refresh.ts} +2 -2
  18. package/client/vendor/paseo-plugin-helper/{query.ts → core/query.ts} +2 -2
  19. package/client/vendor/paseo-plugin-helper/{settings.ts → core/settings.ts} +1 -1
  20. package/client/vendor/paseo-plugin-helper/{shared-settings.ts → core/shared-settings.ts} +2 -2
  21. package/client/vendor/paseo-plugin-helper/{utils → lifecycle}/clipboard.ts +2 -2
  22. package/client/vendor/paseo-plugin-helper/lifecycle/flair.ts +26 -0
  23. package/client/vendor/paseo-plugin-helper/{theme/color-utils.ts → lifecycle/host-color.ts} +95 -38
  24. package/client/vendor/paseo-plugin-helper/lifecycle/host-theme.tsx +109 -0
  25. package/client/vendor/paseo-plugin-helper/lifecycle/index.ts +23 -0
  26. package/client/vendor/paseo-plugin-helper/lifecycle/multi-host.ts +66 -0
  27. package/client/vendor/paseo-plugin-helper/{panel.tsx → lifecycle/panel.tsx} +7 -7
  28. package/client/vendor/paseo-plugin-helper/{pill.tsx → lifecycle/pill.tsx} +51 -18
  29. package/client/vendor/paseo-plugin-helper/lifecycle/providers.tsx +46 -0
  30. package/client/vendor/paseo-plugin-helper/lifecycle/scroll-owner.ts +26 -0
  31. package/client/vendor/paseo-plugin-helper/{surface.tsx → lifecycle/surface.tsx} +6 -6
  32. package/client/vendor/paseo-plugin-helper/ui/color.ts +1 -0
  33. package/client/vendor/paseo-plugin-helper/ui/content.tsx +1326 -0
  34. package/client/vendor/paseo-plugin-helper/ui/controls.tsx +1018 -0
  35. package/client/vendor/paseo-plugin-helper/{components/DataTable.tsx → ui/data.tsx} +50 -58
  36. package/client/vendor/paseo-plugin-helper/ui/index.ts +44 -0
  37. package/client/vendor/paseo-plugin-helper/ui/layout.tsx +263 -0
  38. package/client/vendor/paseo-plugin-helper/ui/modal.tsx +111 -0
  39. package/client/vendor/paseo-plugin-helper/ui/plugin-reload-banner.tsx +119 -0
  40. package/client/vendor/paseo-plugin-helper/{settings-screen.tsx → ui/settings-screen.tsx} +3 -3
  41. package/client/vendor/paseo-plugin-helper/ui/settings.ts +36 -0
  42. package/client/vendor/paseo-plugin-helper/ui/text.tsx +821 -0
  43. package/client/vendor/paseo-plugin-helper/ui/theme.tsx +1 -0
  44. package/client/vendor/permission-audit/client.tsx +706 -0
  45. package/client/vendor/permission-audit/index.tsx +1 -0
  46. package/index.client.tsx +58 -37
  47. package/index.server.ts +256 -234
  48. package/npm-shrinkwrap.json +44 -0
  49. package/package.json +8 -4
  50. package/paseo-plugin.json +2 -0
  51. package/screenshots/1-paseo-top-modal-system.jpg +0 -0
  52. package/screenshots/2-paseo-top-modal-workspace.jpg +0 -0
  53. package/screenshots/3-paseo-top-modal-settings.jpg +0 -0
  54. package/screenshots/4-paseo-top-modal-about.jpg +0 -0
  55. package/screenshots/paseo-top-dashboard.jpg +0 -0
  56. package/screenshots/paseo-top-general-view.jpg +0 -0
  57. package/server/resources.ts +98 -0
  58. package/server/vendor/paseo-plugin-helper/custom-pills.ts +70 -0
  59. package/server/vendor/paseo-plugin-helper/index.ts +2 -0
  60. package/server/vendor/paseo-plugin-helper/logger.ts +5 -16
  61. package/server/vendor/paseo-plugin-helper/rpc-guard.ts +2 -2
  62. package/server/vendor/paseo-plugin-helper/storage-guard.ts +294 -0
  63. package/server/vendor/paseo-plugin-helper/storage.ts +36 -2
  64. package/server/vendor/paseo-plugin-helper/telemetry.ts +486 -0
  65. package/server/vendor/paseo-plugin-helper/tickets.ts +18 -67
  66. package/server/vendor/permission-audit/index.ts +1 -0
  67. package/server/vendor/permission-audit/server.ts +839 -0
  68. package/shared/helper-version.ts +1 -1
  69. package/shared/multi-host.ts +153 -159
  70. package/shared/resources.ts +145 -0
  71. package/shared/vendor/paseo-plugin-helper/async.ts +14 -7
  72. package/shared/vendor/paseo-plugin-helper/features.ts +244 -0
  73. package/shared/vendor/paseo-plugin-helper/forge.ts +27 -0
  74. package/shared/vendor/paseo-plugin-helper/index.ts +1 -0
  75. package/shared/vendor/paseo-plugin-helper/tickets.ts +122 -28
  76. package/shared/vendor/permission-audit/filter.ts +61 -0
  77. package/shared/vendor/permission-audit/index.ts +2 -0
  78. package/shared/vendor/permission-audit/shared.ts +119 -0
  79. package/shared/version.ts +1 -1
  80. package/client/vendor/paseo-plugin-helper/components/AboutSection.tsx +0 -493
  81. package/client/vendor/paseo-plugin-helper/components/AttentionBeacon.tsx +0 -250
  82. package/client/vendor/paseo-plugin-helper/components/Badge.tsx +0 -168
  83. package/client/vendor/paseo-plugin-helper/components/Button.tsx +0 -204
  84. package/client/vendor/paseo-plugin-helper/components/Card.tsx +0 -257
  85. package/client/vendor/paseo-plugin-helper/components/CodeBlock.tsx +0 -196
  86. package/client/vendor/paseo-plugin-helper/components/Collapsible.tsx +0 -277
  87. package/client/vendor/paseo-plugin-helper/components/CommandBox.tsx +0 -172
  88. package/client/vendor/paseo-plugin-helper/components/CopyButton.tsx +0 -180
  89. package/client/vendor/paseo-plugin-helper/components/EmptyState.tsx +0 -97
  90. package/client/vendor/paseo-plugin-helper/components/HighlightedText.tsx +0 -70
  91. package/client/vendor/paseo-plugin-helper/components/InlineButton.tsx +0 -88
  92. package/client/vendor/paseo-plugin-helper/components/InteractiveRow.tsx +0 -142
  93. package/client/vendor/paseo-plugin-helper/components/KeyValue.tsx +0 -446
  94. package/client/vendor/paseo-plugin-helper/components/MetricGauge.tsx +0 -247
  95. package/client/vendor/paseo-plugin-helper/components/ProgressBar.tsx +0 -117
  96. package/client/vendor/paseo-plugin-helper/components/Responsive.tsx +0 -53
  97. package/client/vendor/paseo-plugin-helper/components/SearchInput.tsx +0 -132
  98. package/client/vendor/paseo-plugin-helper/components/SectionHeader.tsx +0 -87
  99. package/client/vendor/paseo-plugin-helper/components/Select.tsx +0 -283
  100. package/client/vendor/paseo-plugin-helper/components/StatusDot.tsx +0 -80
  101. package/client/vendor/paseo-plugin-helper/components/Tabs.tsx +0 -319
  102. package/client/vendor/paseo-plugin-helper/components/TextInput.tsx +0 -150
  103. package/client/vendor/paseo-plugin-helper/components/Toggle.tsx +0 -163
  104. package/client/vendor/paseo-plugin-helper/components/TruncatedText.tsx +0 -157
  105. package/client/vendor/paseo-plugin-helper/components/index.ts +0 -26
  106. package/client/vendor/paseo-plugin-helper/custom-pills.tsx +0 -225
  107. package/client/vendor/paseo-plugin-helper/forge-icon.tsx +0 -79
  108. package/client/vendor/paseo-plugin-helper/icon.tsx +0 -39
  109. package/client/vendor/paseo-plugin-helper/index.ts +0 -30
  110. package/client/vendor/paseo-plugin-helper/layout/ActionBar.tsx +0 -49
  111. package/client/vendor/paseo-plugin-helper/layout/FormRow.tsx +0 -103
  112. package/client/vendor/paseo-plugin-helper/layout/Grid.tsx +0 -65
  113. package/client/vendor/paseo-plugin-helper/layout/ModalBody.tsx +0 -368
  114. package/client/vendor/paseo-plugin-helper/layout/ModalContent.tsx +0 -51
  115. package/client/vendor/paseo-plugin-helper/layout/Row.tsx +0 -39
  116. package/client/vendor/paseo-plugin-helper/layout/Stack.tsx +0 -39
  117. package/client/vendor/paseo-plugin-helper/layout/index.ts +0 -7
  118. package/client/vendor/paseo-plugin-helper/styles/index.ts +0 -1
  119. package/client/vendor/paseo-plugin-helper/styles/recipes.ts +0 -550
  120. package/client/vendor/paseo-plugin-helper/theme/flair.ts +0 -76
  121. package/client/vendor/paseo-plugin-helper/theme/host-variables.ts +0 -121
  122. package/client/vendor/paseo-plugin-helper/theme/index.ts +0 -7
  123. package/client/vendor/paseo-plugin-helper/theme/provider.tsx +0 -178
  124. package/client/vendor/paseo-plugin-helper/theme/responsive.ts +0 -213
  125. package/client/vendor/paseo-plugin-helper/theme/tokens.ts +0 -200
  126. package/client/vendor/paseo-plugin-helper/theme/useResponsive.ts +0 -57
  127. package/client/vendor/paseo-plugin-helper/tickets.tsx +0 -766
  128. /package/client/vendor/paseo-plugin-helper/{command-center.ts → core/command-center.ts} +0 -0
  129. /package/client/vendor/paseo-plugin-helper/{snapshot.ts → core/snapshot.ts} +0 -0
  130. /package/client/vendor/paseo-plugin-helper/{utils → lifecycle}/haptics.ts +0 -0
@@ -1,200 +0,0 @@
1
- import type { PlatformType, PluginTheme } from "../../../../shared/vendor/paseo-plugin-helper/types";
2
- import type { DensityStyle } from "./flair";
3
- import type { ResponsiveLayout } from "../../../../shared/vendor/paseo-plugin-helper/types";
4
- import { resolveEffectiveCompact } from "./responsive";
5
-
6
- /**
7
- * Standard spacing scale (pt/px) shared by every helper surface.
8
- * Density rule: compact viewports step exactly one rung down the scale.
9
- */
10
- export const spacing = {
11
- xxs: 2,
12
- xs: 4,
13
- sm: 8,
14
- md: 12,
15
- lg: 16,
16
- xl: 24,
17
- } as const;
18
-
19
- export type SpacingKey = keyof typeof spacing;
20
-
21
- /**
22
- * A gap/size value: either a named spacing token or a raw px number. Layout
23
- * primitives accept this so callers never have to invent their own scale.
24
- */
25
- export type SpacingValue = SpacingKey | number;
26
-
27
- /**
28
- * Resolves a {@link SpacingValue} to px, falling back to the theme-derived
29
- * value when the caller did not specify one.
30
- */
31
- export function resolveSpacing(value: SpacingValue | undefined, fallback: number): number {
32
- if (value === undefined) return fallback;
33
- return typeof value === "number" ? value : spacing[value];
34
- }
35
-
36
- export interface TypographyToken {
37
- fontSize: number;
38
- lineHeight: number;
39
- fontWeight: "400" | "500" | "600" | "700";
40
- }
41
-
42
- export interface TypographyScale {
43
- title: TypographyToken;
44
- heading: TypographyToken;
45
- body: TypographyToken;
46
- bodyStrong: TypographyToken;
47
- /**
48
- * Value text that pairs with a {@link TypographyScale.label}: same size as
49
- * the label, normal weight, so a value never outranks its own label.
50
- */
51
- bodySmall: TypographyToken;
52
- caption: TypographyToken;
53
- label: TypographyToken;
54
- }
55
-
56
- /**
57
- * Semantic text sizes keep helper components visually coherent while still
58
- * allowing compact panes and plugin density preferences to breathe.
59
- */
60
- export function resolveTypography(
61
- layout: ResponsiveLayout,
62
- density: DensityStyle,
63
- ): TypographyScale {
64
- const compact = resolveEffectiveCompact(layout);
65
- const densityStep = density === "compact" ? -1 : density === "spacious" ? 1 : 0;
66
- const size = (regular: number, minimum = 10) =>
67
- Math.max(minimum, regular + (compact ? -1 : 0) + densityStep);
68
-
69
- const label: TypographyToken = {
70
- fontSize: size(12, 11),
71
- lineHeight: size(16, 14),
72
- fontWeight: "600",
73
- };
74
- // Derived, not a fresh literal: a paired value shares the label's metrics
75
- // and drops to normal weight, so it can never render larger than its label.
76
- const bodySmall: TypographyToken = {
77
- fontSize: label.fontSize,
78
- lineHeight: label.lineHeight,
79
- fontWeight: "400",
80
- };
81
-
82
- return {
83
- title: { fontSize: size(16, 14), lineHeight: size(22, 18), fontWeight: "600" },
84
- heading: { fontSize: size(14, 12), lineHeight: size(20, 16), fontWeight: "600" },
85
- body: { fontSize: size(13, 12), lineHeight: size(19, 16), fontWeight: "400" },
86
- bodyStrong: { fontSize: size(13, 12), lineHeight: size(19, 16), fontWeight: "600" },
87
- bodySmall,
88
- caption: { fontSize: size(11, 10), lineHeight: size(15, 14), fontWeight: "400" },
89
- label,
90
- };
91
- }
92
-
93
- /** Fallback text color on accent fills when the host omits accentForeground. */
94
- export const FALLBACK_ACCENT_FOREGROUND = "#ffffff";
95
-
96
- export type ElevationLevel = "none" | "sm" | "md" | "lg";
97
-
98
- export interface ElevationStyle {
99
- shadowColor: string;
100
- shadowOpacity: number;
101
- shadowRadius: number;
102
- shadowOffset: { width: number; height: number };
103
- elevation: number;
104
- }
105
-
106
- /**
107
- * Standard shadow/elevation presets. shadowColor lives here once so client
108
- * components never hardcode their own.
109
- */
110
- export function resolveElevation(level: ElevationLevel): ElevationStyle {
111
- switch (level) {
112
- case "none":
113
- return {
114
- shadowColor: "#000",
115
- shadowOpacity: 0,
116
- shadowRadius: 0,
117
- shadowOffset: { width: 0, height: 0 },
118
- elevation: 0,
119
- };
120
- case "sm":
121
- return {
122
- shadowColor: "#000",
123
- shadowOpacity: 0.12,
124
- shadowRadius: 3,
125
- shadowOffset: { width: 0, height: 1 },
126
- elevation: 1,
127
- };
128
- case "lg":
129
- return {
130
- shadowColor: "#000",
131
- shadowOpacity: 0.24,
132
- shadowRadius: 12,
133
- shadowOffset: { width: 0, height: 4 },
134
- elevation: 4,
135
- };
136
- case "md":
137
- default:
138
- return {
139
- shadowColor: "#000",
140
- shadowOpacity: 0.18,
141
- shadowRadius: 6,
142
- shadowOffset: { width: 0, height: 2 },
143
- elevation: 2,
144
- };
145
- }
146
- }
147
-
148
- /**
149
- * Native `elevation` is Android-only; iOS renders the shadow props.
150
- * Kept as a helper so call sites read consistently.
151
- */
152
- export function elevationForPlatform(
153
- level: ElevationLevel,
154
- platform: PlatformType,
155
- ): ElevationStyle {
156
- const style = resolveElevation(level);
157
- if (platform !== "android") {
158
- return { ...style, elevation: 0 };
159
- }
160
- return style;
161
- }
162
-
163
- export const defaultDarkTheme: PluginTheme = {
164
- colors: {
165
- surface0: "#18181b",
166
- surface1: "#27272a",
167
- surface2: "#3f3f46",
168
- border: "#3f3f46",
169
- foreground: "#fafafa",
170
- foregroundMuted: "#a1a1aa",
171
- accent: "#3b82f6",
172
- accentForeground: "#ffffff",
173
- statusSuccess: "#22c55e",
174
- statusWarning: "#eab308",
175
- statusDanger: "#ef4444",
176
- },
177
- };
178
-
179
- export const defaultLightTheme: PluginTheme = {
180
- colors: {
181
- surface0: "#ffffff",
182
- surface1: "#f4f4f5",
183
- surface2: "#e4e4e7",
184
- border: "#e4e4e7",
185
- foreground: "#09090b",
186
- foregroundMuted: "#71717a",
187
- accent: "#2563eb",
188
- accentForeground: "#ffffff",
189
- statusSuccess: "#16a34a",
190
- statusWarning: "#ca8a04",
191
- statusDanger: "#dc2626",
192
- },
193
- };
194
-
195
- export function getDefaultTheme(scheme?: string): PluginTheme {
196
- if (scheme === "light") {
197
- return defaultLightTheme;
198
- }
199
- return defaultDarkTheme;
200
- }
@@ -1,57 +0,0 @@
1
- import { usePluginTheme } from "./provider";
2
- import {
3
- responsiveSelect,
4
- type ResponsiveSelectOptions,
5
- } from "./responsive";
6
- import type { PlatformType } from "../../../../shared/vendor/paseo-plugin-helper/types";
7
-
8
- export interface UseResponsiveResult {
9
- /**
10
- * Whether the container or viewport is in compact mode (narrow trackbar, mobile screen, or split-pane).
11
- */
12
- isCompact: boolean;
13
- /**
14
- * Whether the current OS platform is mobile ('ios' | 'android').
15
- */
16
- isMobile: boolean;
17
- /**
18
- * The platform identifier ('web' | 'desktop' | 'ios' | 'android' | 'macos' | 'windows' | 'linux').
19
- */
20
- platform: PlatformType;
21
- /**
22
- * Container width if reported by Paseo's layout.
23
- */
24
- width?: number;
25
- /**
26
- * Container height if reported by Paseo's layout.
27
- */
28
- height?: number;
29
- /**
30
- * Recommended minimum interactive touch target (44pt on mobile/compact, 28pt on desktop).
31
- */
32
- touchTargetMin: number;
33
- /**
34
- * Helper function to select a value based on the current responsive environment.
35
- */
36
- select: <T>(options: ResponsiveSelectOptions<T>) => T | undefined;
37
- }
38
-
39
- /**
40
- * Universal hook for responsive plugin UI across composer pills, modals, panels, and surfaces.
41
- * Automatically adapts based on Paseo's layout context (compact mode, mobile OS, touch targets).
42
- */
43
- export function useResponsive(): UseResponsiveResult {
44
- const { layout, isCompact, isMobile, touchTargetMin } = usePluginTheme();
45
-
46
- return {
47
- isCompact,
48
- isMobile,
49
- platform: layout.platform,
50
- width: layout.width,
51
- height: layout.height,
52
- touchTargetMin,
53
- select: <T>(options: ResponsiveSelectOptions<T>): T | undefined => {
54
- return responsiveSelect(layout, options);
55
- },
56
- };
57
- }