@cellarnode/ui 0.194.0 → 0.195.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.
Files changed (77) hide show
  1. package/dist/components/certification-upload-card.d.ts.map +1 -1
  2. package/dist/components/certification-upload-card.js +5 -2
  3. package/dist/components/certification-upload-card.js.map +1 -1
  4. package/dist/components/confirmation-dialog.d.ts +3 -1
  5. package/dist/components/confirmation-dialog.d.ts.map +1 -1
  6. package/dist/components/confirmation-dialog.js +20 -2
  7. package/dist/components/confirmation-dialog.js.map +1 -1
  8. package/dist/components/copy-button.d.ts +23 -0
  9. package/dist/components/copy-button.d.ts.map +1 -0
  10. package/dist/components/copy-button.js +53 -0
  11. package/dist/components/copy-button.js.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/profile/api-keys/_story-fixtures.d.ts +3 -0
  17. package/dist/profile/api-keys/_story-fixtures.d.ts.map +1 -0
  18. package/dist/profile/api-keys/_story-fixtures.js +3 -0
  19. package/dist/profile/api-keys/_story-fixtures.js.map +1 -0
  20. package/dist/profile/api-keys/api-key-secret-reveal.d.ts +52 -0
  21. package/dist/profile/api-keys/api-key-secret-reveal.d.ts.map +1 -0
  22. package/dist/profile/api-keys/api-key-secret-reveal.js +56 -0
  23. package/dist/profile/api-keys/api-key-secret-reveal.js.map +1 -0
  24. package/dist/profile/api-keys/api-keys-card.d.ts +56 -0
  25. package/dist/profile/api-keys/api-keys-card.d.ts.map +1 -0
  26. package/dist/profile/api-keys/api-keys-card.js +77 -0
  27. package/dist/profile/api-keys/api-keys-card.js.map +1 -0
  28. package/dist/profile/api-keys/client-snippets.d.ts +20 -0
  29. package/dist/profile/api-keys/client-snippets.d.ts.map +1 -0
  30. package/dist/profile/api-keys/client-snippets.js +79 -0
  31. package/dist/profile/api-keys/client-snippets.js.map +1 -0
  32. package/dist/profile/api-keys/connected-apps-card.d.ts +39 -0
  33. package/dist/profile/api-keys/connected-apps-card.d.ts.map +1 -0
  34. package/dist/profile/api-keys/connected-apps-card.js +54 -0
  35. package/dist/profile/api-keys/connected-apps-card.js.map +1 -0
  36. package/dist/profile/api-keys/create-api-key-dialog.d.ts +53 -0
  37. package/dist/profile/api-keys/create-api-key-dialog.d.ts.map +1 -0
  38. package/dist/profile/api-keys/create-api-key-dialog.js +114 -0
  39. package/dist/profile/api-keys/create-api-key-dialog.js.map +1 -0
  40. package/dist/profile/api-keys/format.d.ts +20 -0
  41. package/dist/profile/api-keys/format.d.ts.map +1 -0
  42. package/dist/profile/api-keys/format.js +58 -0
  43. package/dist/profile/api-keys/format.js.map +1 -0
  44. package/dist/profile/api-keys/index.d.ts +19 -0
  45. package/dist/profile/api-keys/index.d.ts.map +1 -0
  46. package/dist/profile/api-keys/index.js +10 -0
  47. package/dist/profile/api-keys/index.js.map +1 -0
  48. package/dist/profile/api-keys/mock-client.d.ts +23 -0
  49. package/dist/profile/api-keys/mock-client.d.ts.map +1 -0
  50. package/dist/profile/api-keys/mock-client.js +167 -0
  51. package/dist/profile/api-keys/mock-client.js.map +1 -0
  52. package/dist/profile/api-keys/profile-keys-section.d.ts +36 -0
  53. package/dist/profile/api-keys/profile-keys-section.d.ts.map +1 -0
  54. package/dist/profile/api-keys/profile-keys-section.js +97 -0
  55. package/dist/profile/api-keys/profile-keys-section.js.map +1 -0
  56. package/dist/profile/api-keys/revoke-confirm.d.ts +26 -0
  57. package/dist/profile/api-keys/revoke-confirm.d.ts.map +1 -0
  58. package/dist/profile/api-keys/revoke-confirm.js +26 -0
  59. package/dist/profile/api-keys/revoke-confirm.js.map +1 -0
  60. package/dist/profile/api-keys/scope-list.d.ts +38 -0
  61. package/dist/profile/api-keys/scope-list.d.ts.map +1 -0
  62. package/dist/profile/api-keys/scope-list.js +29 -0
  63. package/dist/profile/api-keys/scope-list.js.map +1 -0
  64. package/dist/profile/api-keys/types.d.ts +113 -0
  65. package/dist/profile/api-keys/types.d.ts.map +1 -0
  66. package/dist/profile/api-keys/types.js +151 -0
  67. package/dist/profile/api-keys/types.js.map +1 -0
  68. package/dist/profile/index.d.ts +1 -0
  69. package/dist/profile/index.d.ts.map +1 -1
  70. package/dist/profile/index.js +2 -0
  71. package/dist/profile/index.js.map +1 -1
  72. package/dist/profile/profile.d.ts +3 -1
  73. package/dist/profile/profile.d.ts.map +1 -1
  74. package/dist/profile/profile.js +2 -2
  75. package/dist/profile/profile.js.map +1 -1
  76. package/package.json +1 -1
  77. package/src/theme/tokens.css +5 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Personal API keys + connected apps (CEL-2308, spec 2026-10-05-mcp-remote-oauth-pats-health.md (e)/(f)).
3
+ *
4
+ * The components here are data-agnostic. A dashboard supplies a {@link ProfileKeysClient}
5
+ * (its own fetch layer over `/me/api-keys` and `/me/oauth-grants`); nothing in this package
6
+ * talks to the network. Raw keys exist ONLY in the create response: list rows carry the
7
+ * prefix and the last four characters, never the secret.
8
+ */
9
+ /** The remote MCP surfaces a personal key can target. `admin` is deliberately absent: admin has no remote key. */
10
+ export type ApiKeySurface = "producer" | "importer" | "elabel" | "readonly";
11
+ export declare const API_KEY_SURFACES: readonly ["producer", "importer", "elabel", "readonly"];
12
+ export type ApiKeyStatus = "active" | "expired" | "revoked";
13
+ /** Product limits from the spec's decisions. */
14
+ export declare const API_KEY_LIMITS: {
15
+ /** Active personal keys per user per org. */
16
+ readonly maxKeys: 10;
17
+ readonly defaultExpiryDays: 90;
18
+ readonly maxExpiryDays: 365;
19
+ readonly expiryPresetDays: readonly [30, 90, 365];
20
+ /** Matches the backend limit. */
21
+ readonly maxNameLength: 100;
22
+ };
23
+ /**
24
+ * A surface id as received from the backend. The four known ones render with their catalog label and
25
+ * scopes; anything else (an older/newer backend, or `admin` slipping through) is shown generically and
26
+ * never throws.
27
+ */
28
+ export type SurfaceId = ApiKeySurface | (string & {});
29
+ /** One personal key as listed (`GET /me/api-keys`). Never contains the secret. */
30
+ export interface ApiKeyRow {
31
+ id: string;
32
+ name: string;
33
+ surface: SurfaceId;
34
+ /** Granted scope ids, e.g. `offers:read`. */
35
+ scopes: readonly string[];
36
+ /** First 12 characters of the key (`cnp_` + 8). */
37
+ prefix: string;
38
+ /** Last 4 characters. */
39
+ hint: string;
40
+ createdAt: string;
41
+ expiresAt: string;
42
+ lastUsedAt: string | null;
43
+ status: ApiKeyStatus;
44
+ }
45
+ /** `POST /me/api-keys` response: the row plus the one-time secret. */
46
+ export interface CreatedApiKey extends ApiKeyRow {
47
+ key: string;
48
+ }
49
+ export interface CreateApiKeyInput {
50
+ name: string;
51
+ surface: ApiKeySurface;
52
+ scopes: string[];
53
+ /** Exactly one of the two is set. */
54
+ expiresInDays?: number;
55
+ /**
56
+ * Full ISO date-time in UTC (the backend rejects bare dates): the chosen day at 23:59:59.999 in the
57
+ * user's LOCAL timezone, converted to UTC and never later than creation + 365 days.
58
+ */
59
+ expiresAt?: string;
60
+ }
61
+ /** One connected app (`GET /me/oauth-grants`). */
62
+ export interface OAuthGrantRow {
63
+ id: string;
64
+ clientName: string;
65
+ /** Host of the client's redirect URI, shown so an unverified app can be recognised. */
66
+ /** Host of the redirect URI; `null` when the backend cannot derive one. */
67
+ clientHost: string | null;
68
+ /** Dynamically registered or unverified client: shows the warning badge. */
69
+ unverified: boolean;
70
+ surface: SurfaceId;
71
+ scopes: readonly string[];
72
+ createdAt: string;
73
+ lastUsedAt: string | null;
74
+ }
75
+ /** The injected data layer. Each dashboard implements this over its API client. */
76
+ export interface ProfileKeysClient {
77
+ listKeys(): Promise<ApiKeyRow[]>;
78
+ createKey(input: CreateApiKeyInput): Promise<CreatedApiKey>;
79
+ revokeKey(id: string): Promise<void>;
80
+ listGrants(): Promise<OAuthGrantRow[]>;
81
+ revokeGrant(id: string): Promise<void>;
82
+ }
83
+ export interface ScopeInfo {
84
+ id: string;
85
+ /** Plain-language label (spec (b) consent labels). */
86
+ label: string;
87
+ access: "read" | "write";
88
+ }
89
+ export interface SurfaceInfo {
90
+ id: ApiKeySurface;
91
+ label: string;
92
+ description: string;
93
+ scopes: readonly ScopeInfo[];
94
+ }
95
+ /** Scopes per surface and their plain-language labels (spec (b) "Scopes" table). */
96
+ export declare const SURFACE_CATALOG: Readonly<Record<ApiKeySurface, SurfaceInfo>>;
97
+ /** Catalog entry for a surface, or a generic one (title-cased id, no known scopes) for anything unknown. */
98
+ export declare function surfaceInfo(surface: SurfaceId): SurfaceInfo;
99
+ /** Look up the plain label for a scope id (falls back to the id for scopes this build does not know). */
100
+ export declare function scopeLabel(surface: SurfaceId, scopeId: string,
101
+ /** Translations keyed by scope id (CEL-2308 follow-up); a scope without an entry keeps its catalog label. */
102
+ overrides?: Partial<Record<string, string>> | undefined): string;
103
+ export declare function readScopes(surface: SurfaceId): string[];
104
+ export declare function allScopes(surface: SurfaceId): string[];
105
+ /** True when the surface offers anything beyond reads. */
106
+ export declare function surfaceAllowsChanges(surface: SurfaceId): boolean;
107
+ export type ScopeSummaryKind = "read" | "write" | "custom";
108
+ /** "Read only", "Read and change" (everything the surface offers), or a custom subset. */
109
+ export declare function summarizeScopes(surface: SurfaceId, scopes: readonly string[]): ScopeSummaryKind;
110
+ /** The public MCP URL a client points at for a surface. */
111
+ export declare const MCP_BASE_URL = "https://mcp.cellarnode.com";
112
+ export declare const mcpUrl: (surface: SurfaceId, base?: string) => string;
113
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profile/api-keys/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Personal API keys + connected apps (CEL-2308, spec 2026-10-05-mcp-remote-oauth-pats-health.md (e)/(f)).
3
+ *
4
+ * The components here are data-agnostic. A dashboard supplies a {@link ProfileKeysClient}
5
+ * (its own fetch layer over `/me/api-keys` and `/me/oauth-grants`); nothing in this package
6
+ * talks to the network. Raw keys exist ONLY in the create response: list rows carry the
7
+ * prefix and the last four characters, never the secret.
8
+ */
9
+ export const API_KEY_SURFACES = ["producer", "importer", "elabel", "readonly"];
10
+ /** Product limits from the spec's decisions. */
11
+ export const API_KEY_LIMITS = {
12
+ /** Active personal keys per user per org. */
13
+ maxKeys: 10,
14
+ defaultExpiryDays: 90,
15
+ maxExpiryDays: 365,
16
+ expiryPresetDays: [30, 90, 365],
17
+ /** Matches the backend limit. */
18
+ maxNameLength: 100,
19
+ };
20
+ const s = (id, label) => ({
21
+ id,
22
+ label,
23
+ access: id.endsWith(":read") ? "read" : "write",
24
+ });
25
+ const PORTFOLIO = s("portfolios:read", "See your portfolio");
26
+ const BEVERAGES_R = s("beverages:read", "See your beverages");
27
+ const BEVERAGES_W = s("beverages:write", "Change your beverages");
28
+ const VARIANTS_R = s("variants:read", "See product versions");
29
+ const VARIANTS_W = s("variants:write", "Change product versions");
30
+ const OFFERS_R = s("offers:read", "See offers");
31
+ const TENDERS_R = s("tenders:read", "See tenders");
32
+ const MATCH_R = s("matching:read", "See matches");
33
+ const EXTRACT_R = s("extraction:read", "See document imports");
34
+ const EXTRACT_W = s("extraction:write", "Start and review document imports");
35
+ const ATTACH_W = s("attachments:write", "Upload documents and certificates");
36
+ const NOTIFY_R = s("notifications:read", "See notifications");
37
+ const NOTIFY_M = s("notifications:manage", "Mark and dismiss notifications");
38
+ const SCHED_R = s("schedules:read", "See automations");
39
+ const SCHED_W = s("schedules:write", "Change automations");
40
+ /** Scopes per surface and their plain-language labels (spec (b) "Scopes" table). */
41
+ export const SURFACE_CATALOG = {
42
+ producer: {
43
+ id: "producer",
44
+ label: "Producer",
45
+ description: "Your portfolio, offers, matches and document imports.",
46
+ scopes: [
47
+ PORTFOLIO,
48
+ BEVERAGES_R,
49
+ BEVERAGES_W,
50
+ VARIANTS_R,
51
+ VARIANTS_W,
52
+ OFFERS_R,
53
+ s("offers:write", "Draft and submit offers"),
54
+ TENDERS_R,
55
+ MATCH_R,
56
+ s("matching:write", "Mark interest in matches"),
57
+ EXTRACT_R,
58
+ EXTRACT_W,
59
+ ATTACH_W,
60
+ NOTIFY_R,
61
+ NOTIFY_M,
62
+ SCHED_R,
63
+ SCHED_W,
64
+ ],
65
+ },
66
+ importer: {
67
+ id: "importer",
68
+ label: "Importer",
69
+ description: "Tenders, offers you receive, and notifications.",
70
+ scopes: [
71
+ OFFERS_R,
72
+ s("offers:respond", "Respond to and accept offers"),
73
+ TENDERS_R,
74
+ s("tenders:write", "Create, edit and publish tenders"),
75
+ NOTIFY_R,
76
+ NOTIFY_M,
77
+ SCHED_R,
78
+ SCHED_W,
79
+ ],
80
+ },
81
+ elabel: {
82
+ id: "elabel",
83
+ label: "E-label",
84
+ description: "Your portfolio and e-labels, including publishing.",
85
+ scopes: [
86
+ PORTFOLIO,
87
+ BEVERAGES_R,
88
+ BEVERAGES_W,
89
+ VARIANTS_R,
90
+ VARIANTS_W,
91
+ EXTRACT_R,
92
+ EXTRACT_W,
93
+ ATTACH_W,
94
+ s("elabel:read", "See e-labels"),
95
+ s("elabel:write", "Change e-labels, including publishing"),
96
+ ],
97
+ },
98
+ readonly: {
99
+ id: "readonly",
100
+ label: "Read only",
101
+ description: "Look but never change: the safest choice for tools you do not fully control.",
102
+ scopes: [PORTFOLIO, BEVERAGES_R, VARIANTS_R, OFFERS_R, TENDERS_R, MATCH_R, EXTRACT_R],
103
+ },
104
+ };
105
+ const KNOWN_SURFACES = new Set(["producer", "importer", "elabel", "readonly"]);
106
+ /** Catalog entry for a surface, or a generic one (title-cased id, no known scopes) for anything unknown. */
107
+ export function surfaceInfo(surface) {
108
+ if (KNOWN_SURFACES.has(surface))
109
+ return SURFACE_CATALOG[surface];
110
+ const label = surface ? surface.charAt(0).toUpperCase() + surface.slice(1) : "Unknown";
111
+ return { id: "readonly", label, description: "", scopes: [] };
112
+ }
113
+ /** Look up the plain label for a scope id (falls back to the id for scopes this build does not know). */
114
+ export function scopeLabel(surface, scopeId,
115
+ /** Translations keyed by scope id (CEL-2308 follow-up); a scope without an entry keeps its catalog label. */
116
+ overrides) {
117
+ return (overrides?.[scopeId] ??
118
+ surfaceInfo(surface).scopes.find((x) => x.id === scopeId)?.label ??
119
+ scopeId);
120
+ }
121
+ export function readScopes(surface) {
122
+ return surfaceInfo(surface)
123
+ .scopes.filter((x) => x.access === "read")
124
+ .map((x) => x.id);
125
+ }
126
+ export function allScopes(surface) {
127
+ return surfaceInfo(surface).scopes.map((x) => x.id);
128
+ }
129
+ /** True when the surface offers anything beyond reads. */
130
+ export function surfaceAllowsChanges(surface) {
131
+ return surfaceInfo(surface).scopes.some((x) => x.access === "write");
132
+ }
133
+ /** "Read only", "Read and change" (everything the surface offers), or a custom subset. */
134
+ export function summarizeScopes(surface, scopes) {
135
+ const set = new Set(scopes);
136
+ const all = allScopes(surface);
137
+ const reads = readScopes(surface);
138
+ if (all.length === 0)
139
+ return "custom"; // a surface this build does not know: never claim read-only
140
+ // Read is tested FIRST: on a surface with no write scopes (readonly) "everything" and "all reads"
141
+ // are the same set, and that set is Read only, never "Read and change".
142
+ if (reads.every((id) => set.has(id)) && set.size === reads.length)
143
+ return "read";
144
+ if (all.every((id) => set.has(id)) && set.size === all.length)
145
+ return "write";
146
+ return "custom";
147
+ }
148
+ /** The public MCP URL a client points at for a surface. */
149
+ export const MCP_BASE_URL = "https://mcp.cellarnode.com";
150
+ export const mcpUrl = (surface, base = MCP_BASE_URL) => `${base.replace(/\/+$/, "")}/${surface}`;
151
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profile/api-keys/types.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,5 @@ export type { AccountActionsCardProps, AccountActionsLabels } from "./account-ac
23
23
  export { SubscriptionCard } from "./subscription-card.js";
24
24
  export type { AccountSubscription, SubscriptionCardLabels, SubscriptionCardProps, } from "./subscription-card.js";
25
25
  export * from "./importer-profile-view.js";
26
+ export * from "./api-keys/index.js";
26
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/profile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,2BAA2B,EAC3B,wBAAwB,EACxB,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/profile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,2BAA2B,EAC3B,wBAAwB,EACxB,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AAGxC,cAAc,YAAY,CAAC"}
@@ -19,4 +19,6 @@ export { AccountPreferencesCard } from "./account-preferences-card.js";
19
19
  export { AccountActionsCard } from "./account-actions-card.js";
20
20
  export { SubscriptionCard } from "./subscription-card.js";
21
21
  export * from "./importer-profile-view.js";
22
+ // CEL-2308: personal API keys + connected apps (spec (e)/(f)). Data-agnostic; dashboards inject a ProfileKeysClient.
23
+ export * from "./api-keys/index.js";
22
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AAEnD,iEAAiE;AACjE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAMpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAMvD,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AAEnD,iEAAiE;AACjE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAMpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAMvD,cAAc,yBAAyB,CAAC;AAExC,qHAAqH;AACrH,cAAc,YAAY,CAAC"}
@@ -12,8 +12,10 @@ interface ProfileCardProps {
12
12
  children: React.ReactNode;
13
13
  footer?: React.ReactNode;
14
14
  className?: string;
15
+ /** Gives the heading an id and makes it programmatically focusable (e.g. to restore focus after a row is removed). */
16
+ headingId?: string | undefined;
15
17
  }
16
- export declare function ProfileCard({ title, description, children, footer, className }: ProfileCardProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function ProfileCard({ title, description, children, footer, className, headingId, }: ProfileCardProps): import("react/jsx-runtime").JSX.Element;
17
19
  interface ProfileDetailRowProps {
18
20
  icon: React.ReactNode;
19
21
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/profile/profile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAUvF;AAID,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAWhG;AAID,UAAU,qBAAqB;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAcxF;AAID,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAI5E;AAID,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,OAAgB,EAChB,SAAS,GACV,EAAE,oBAAoB,2CAOtB;AAID,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAE1E;AAID,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/profile/profile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAUvF;AAID,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sHAAsH;IACtH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,SAAS,EACT,SAAS,GACV,EAAE,gBAAgB,2CAiBlB;AAID,UAAU,qBAAqB;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAcxF;AAID,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAI5E;AAID,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,OAAgB,EAChB,SAAS,GACV,EAAE,oBAAoB,2CAOtB;AAID,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAE1E;AAID,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC"}
@@ -3,8 +3,8 @@ import { cn } from "../lib/utils.js";
3
3
  export function ProfileShell({ title, subtitle, children, className }) {
4
4
  return (_jsxs("div", { className: cn("max-w-4xl mx-auto flex flex-col gap-6", className), children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight text-foreground", children: title }), subtitle && _jsx("p", { className: "text-sm/6 text-muted-foreground", children: subtitle })] }), children] }));
5
5
  }
6
- export function ProfileCard({ title, description, children, footer, className }) {
7
- return (_jsxs("div", { className: cn("border border-border/60 bg-card rounded-2xl overflow-hidden", className), children: [_jsxs("div", { className: "px-6 py-5 border-b border-border/60", children: [_jsx("h2", { className: "text-base font-semibold text-foreground", children: title }), description && _jsx("p", { className: "mt-1 text-sm/5 text-muted-foreground", children: description })] }), _jsx("div", { className: "px-6 py-5", children: children }), footer && _jsx("div", { className: "px-6 py-4 bg-muted/30 border-t border-border/60", children: footer })] }));
6
+ export function ProfileCard({ title, description, children, footer, className, headingId, }) {
7
+ return (_jsxs("div", { className: cn("border border-border/60 bg-card rounded-2xl overflow-hidden", className), children: [_jsxs("div", { className: "px-6 py-5 border-b border-border/60", children: [_jsx("h2", { id: headingId, tabIndex: headingId ? -1 : undefined, className: "text-base font-semibold text-foreground focus-visible:outline-2 focus-visible:outline-ring", children: title }), description && _jsx("p", { className: "mt-1 text-sm/5 text-muted-foreground", children: description })] }), _jsx("div", { className: "px-6 py-5", children: children }), footer && _jsx("div", { className: "px-6 py-4 bg-muted/30 border-t border-border/60", children: footer })] }));
8
8
  }
9
9
  export function ProfileDetailRow({ icon, label, value, className }) {
10
10
  // The wrapping <div> is a `dt-dd` group inside <dl>; per axe's
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/profile/profile.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAqB;IACtF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,uCAAuC,EAAE,SAAS,CAAC,aACpE,eAAK,SAAS,EAAC,qBAAqB,aAClC,aAAI,SAAS,EAAC,mDAAmD,YAAE,KAAK,GAAM,EAC7E,QAAQ,IAAI,YAAG,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAK,IACtE,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAoB;IAC/F,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,6DAA6D,EAAE,SAAS,CAAC,aAC1F,eAAK,SAAS,EAAC,qCAAqC,aAClD,aAAI,SAAS,EAAC,yCAAyC,YAAE,KAAK,GAAM,EACnE,WAAW,IAAI,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,IACjF,EACN,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,EAC1C,MAAM,IAAI,cAAK,SAAS,EAAC,iDAAiD,YAAE,MAAM,GAAO,IACtF,CACP,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAyB;IACvF,+DAA+D;IAC/D,wEAAwE;IACxE,wEAAwE;IACxE,6DAA6D;IAC7D,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mDAAmD,EAAE,SAAS,CAAC,aAChF,cAAI,SAAS,EAAC,8DAA8D,aAC1E,eAAM,SAAS,EAAC,8BAA8B,YAAE,IAAI,GAAQ,EAC5D,yBAAO,KAAK,GAAQ,IACjB,EACL,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,IAChD,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAwB;IAC3E,OAAO,CACL,aAAI,SAAS,EAAE,EAAE,CAAC,iDAAiD,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAM,CACjG,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,OAAO,GAAG,MAAM,EAChB,SAAS,GACY;IACrB,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,eAAe,EAAE,SAAS,CAAC,aAClE,aAAI,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAM,EAClE,aAAI,SAAS,EAAC,8BAA8B,YAAE,QAAQ,GAAM,IACxD,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAuB;IACzE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,CAAC;AAC9F,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,cAAc;CACxB,CAAC"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/profile/profile.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAqB;IACtF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,uCAAuC,EAAE,SAAS,CAAC,aACpE,eAAK,SAAS,EAAC,qBAAqB,aAClC,aAAI,SAAS,EAAC,mDAAmD,YAAE,KAAK,GAAM,EAC7E,QAAQ,IAAI,YAAG,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAK,IACtE,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,SAAS,EACT,SAAS,GACQ;IACjB,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,6DAA6D,EAAE,SAAS,CAAC,aAC1F,eAAK,SAAS,EAAC,qCAAqC,aAClD,aACE,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACpC,SAAS,EAAC,4FAA4F,YAErG,KAAK,GACH,EACJ,WAAW,IAAI,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,IACjF,EACN,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,EAC1C,MAAM,IAAI,cAAK,SAAS,EAAC,iDAAiD,YAAE,MAAM,GAAO,IACtF,CACP,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAyB;IACvF,+DAA+D;IAC/D,wEAAwE;IACxE,wEAAwE;IACxE,6DAA6D;IAC7D,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mDAAmD,EAAE,SAAS,CAAC,aAChF,cAAI,SAAS,EAAC,8DAA8D,aAC1E,eAAM,SAAS,EAAC,8BAA8B,YAAE,IAAI,GAAQ,EAC5D,yBAAO,KAAK,GAAQ,IACjB,EACL,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,IAChD,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAwB;IAC3E,OAAO,CACL,aAAI,SAAS,EAAE,EAAE,CAAC,iDAAiD,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAM,CACjG,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,OAAO,GAAG,MAAM,EAChB,SAAS,GACY;IACrB,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,eAAe,EAAE,SAAS,CAAC,aAClE,aAAI,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAM,EAClE,aAAI,SAAS,EAAC,8BAA8B,YAAE,QAAQ,GAAM,IACxD,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAuB;IACzE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,CAAC;AAC9F,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,cAAc;CACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cellarnode/ui",
3
- "version": "0.194.0",
3
+ "version": "0.195.1",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "packageManager": "pnpm@10.28.2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
@@ -981,6 +981,11 @@
981
981
  to { transform: translateY(-50%) scale(1); }
982
982
  }
983
983
 
984
+ @keyframes copy-check-pop {
985
+ from { transform: scale(0.5); opacity: 0; }
986
+ to { transform: scale(1); opacity: 1; }
987
+ }
988
+
984
989
  @keyframes opportunity-highlight-wash {
985
990
  from { opacity: 0; }
986
991
  40% { opacity: 1; }