@devfellowship/components 3.2.4 → 3.3.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 +523 -0
- package/dist/index.d.cts +1061 -1
- package/dist/index.d.ts +1061 -1
- package/dist/index.js +467 -0
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -39,6 +39,7 @@ import * as ToastPrimitives from '@radix-ui/react-toast';
|
|
|
39
39
|
import * as TogglePrimitive from '@radix-ui/react-toggle';
|
|
40
40
|
import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
|
|
41
41
|
import { LucideIcon } from 'lucide-react';
|
|
42
|
+
import { z } from 'zod';
|
|
42
43
|
export { c as cn } from './utils-Cbsgs0XP.cjs';
|
|
43
44
|
export { ToastProps, ToastVariant, toast, useIframeAuth, useIframeNavigate, useIsMobile, useToast } from './hooks.cjs';
|
|
44
45
|
export { A as AuthContextType, a as AuthProvider, b as AuthProviderProps, U as UserProfile, u as useAuth, c as useSession } from './use-auth-t8aJ9mx7.cjs';
|
|
@@ -2202,4 +2203,1063 @@ declare function validatePublishForm(input: {
|
|
|
2202
2203
|
}): string | null;
|
|
2203
2204
|
declare function PublishDrawer({ open, onOpenChange, supabase, videoUrl, transcript, suggestedTitle, suggestedDescription, suggestedThumbnailUrl, thumbnailTemplateId, buId, registerLesson, onPublished, onError, className, _storyStatus, _storyResult, _storyAccounts, _storyErrorMsg, }: PublishDrawerProps): React$1.JSX.Element;
|
|
2204
2205
|
|
|
2205
|
-
|
|
2206
|
+
/**
|
|
2207
|
+
* RoadmapDocument — the versioned JSON contract of the `Roadmap` organism.
|
|
2208
|
+
*
|
|
2209
|
+
* The component takes a document, not coordinates. A knowledge map is authored
|
|
2210
|
+
* (or emitted by a learning engine) as a list of nodes that each name a COLUMN
|
|
2211
|
+
* and a ROW, plus edges, groups and a legend. The renderer places them in a
|
|
2212
|
+
* 3-column CSS grid. No absolute pixel travels in this shape.
|
|
2213
|
+
*
|
|
2214
|
+
* Why the shape looks like this (plan ADR-2): roadmap.sh stores `position {x,y}`
|
|
2215
|
+
* and scales one fixed canvas, so a 17 px label renders at 6.2 px on a 390 px
|
|
2216
|
+
* phone. Absolute coordinates cannot reflow. `column` + `order` can. A layout
|
|
2217
|
+
* engine (dagre, ELK) cannot pin a node to a lane, so there is no layout engine
|
|
2218
|
+
* either — the author owns the placement, and the grid owns the pixels.
|
|
2219
|
+
*
|
|
2220
|
+
* Colour is a TOKEN, never a hex (plan ADR-6). `tone` is one of eight names and
|
|
2221
|
+
* the schema REJECTS any other string, `"#fdff00"` included. That closed
|
|
2222
|
+
* vocabulary is what keeps the dark design system, the editorial surface and a
|
|
2223
|
+
* downstream `--s-*` rebrand all working from one document.
|
|
2224
|
+
*
|
|
2225
|
+
* The live progress state does NOT live in the document (plan ADR-8). A document
|
|
2226
|
+
* is shared; a learner's state is not. `RoadmapStateOverlay` carries it, and the
|
|
2227
|
+
* overlay wins over an authored `node.state`.
|
|
2228
|
+
*
|
|
2229
|
+
* Versioning rule: `version` is a literal. An additive OPTIONAL field is a minor
|
|
2230
|
+
* release and does not change the literal. A removed field, a renamed field or a
|
|
2231
|
+
* changed DEFAULT becomes `roadmap/v2`, ships with `upgradeV1toV2()` next to this
|
|
2232
|
+
* schema, and `parseRoadmapDocument()` accepts both for one major release of the
|
|
2233
|
+
* package. `meta` is never versioned.
|
|
2234
|
+
*/
|
|
2235
|
+
|
|
2236
|
+
declare const ROADMAP_COLUMNS: readonly ["left", "center", "right"];
|
|
2237
|
+
declare const ROADMAP_TONES: readonly ["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"];
|
|
2238
|
+
declare const ROADMAP_NODE_KINDS: readonly ["topic", "subtopic", "label", "title", "paragraph", "button", "legend"];
|
|
2239
|
+
declare const ROADMAP_NODE_STATES: readonly ["todo", "done", "learning", "skipped", "locked"];
|
|
2240
|
+
declare const ROADMAP_EDGE_STYLES: readonly ["solid", "dashed", "dotted"];
|
|
2241
|
+
declare const ROADMAP_EDGE_ROUTES: readonly ["auto", "straight", "elbow", "curve"];
|
|
2242
|
+
declare const ROADMAP_ARROWS: readonly ["none", "end", "both"];
|
|
2243
|
+
declare const ROADMAP_LEGEND_PLACEMENTS: readonly ["top", "bottom", "inline"];
|
|
2244
|
+
type RoadmapColumn = (typeof ROADMAP_COLUMNS)[number];
|
|
2245
|
+
type RoadmapTone = (typeof ROADMAP_TONES)[number];
|
|
2246
|
+
type RoadmapNodeKind = (typeof ROADMAP_NODE_KINDS)[number];
|
|
2247
|
+
type RoadmapNodeState = (typeof ROADMAP_NODE_STATES)[number];
|
|
2248
|
+
type RoadmapEdgeStyle = (typeof ROADMAP_EDGE_STYLES)[number];
|
|
2249
|
+
type RoadmapEdgeRoute = (typeof ROADMAP_EDGE_ROUTES)[number];
|
|
2250
|
+
type RoadmapArrow = (typeof ROADMAP_ARROWS)[number];
|
|
2251
|
+
type RoadmapLegendPlacement = (typeof ROADMAP_LEGEND_PLACEMENTS)[number];
|
|
2252
|
+
/** A glyph drawn half inside and half outside the node border. */
|
|
2253
|
+
interface RoadmapIcon {
|
|
2254
|
+
/** A `lucide-react` icon name, kebab-case. */
|
|
2255
|
+
name: string;
|
|
2256
|
+
side: "left" | "right";
|
|
2257
|
+
tone?: RoadmapTone;
|
|
2258
|
+
}
|
|
2259
|
+
/** A button INSIDE a node. Exactly one of `href` or `actionId`. */
|
|
2260
|
+
interface RoadmapAction {
|
|
2261
|
+
label: string;
|
|
2262
|
+
href?: string;
|
|
2263
|
+
/** Handed back to `onAction(actionId, node)`; the component never reads it. */
|
|
2264
|
+
actionId?: string;
|
|
2265
|
+
tone?: RoadmapTone;
|
|
2266
|
+
}
|
|
2267
|
+
interface RoadmapLink {
|
|
2268
|
+
label: string;
|
|
2269
|
+
href: string;
|
|
2270
|
+
}
|
|
2271
|
+
interface RoadmapNode {
|
|
2272
|
+
/** `/^[A-Za-z0-9_-]{1,64}$/`, unique in the document. */
|
|
2273
|
+
id: string;
|
|
2274
|
+
column: RoadmapColumn;
|
|
2275
|
+
/** Integer >= 0 — the grid ROW. Unique per `(column, order)` cell. */
|
|
2276
|
+
order: number;
|
|
2277
|
+
/** Default 1. `3` = full width and the `column` is ignored. */
|
|
2278
|
+
span?: 1 | 2 | 3;
|
|
2279
|
+
kind: RoadmapNodeKind;
|
|
2280
|
+
label: string;
|
|
2281
|
+
/** Paragraph body, or the tooltip of a topic. */
|
|
2282
|
+
description?: string;
|
|
2283
|
+
/** Default: topic -> primary, subtopic -> secondary, button -> primary, else neutral. */
|
|
2284
|
+
tone?: RoadmapTone;
|
|
2285
|
+
icon?: RoadmapIcon;
|
|
2286
|
+
/** Id of a legend entry; draws that entry's icon and tone on the node. */
|
|
2287
|
+
badge?: string;
|
|
2288
|
+
/** Authored default. A `RoadmapStateOverlay` wins over it. */
|
|
2289
|
+
state?: RoadmapNodeState;
|
|
2290
|
+
action?: RoadmapAction;
|
|
2291
|
+
/** The whole node becomes a link. */
|
|
2292
|
+
href?: string;
|
|
2293
|
+
/** `paragraph` or `label`: a list of links (the roadmap.sh `linksgroup`). */
|
|
2294
|
+
links?: RoadmapLink[];
|
|
2295
|
+
/** Opaque; passed back on click, never read by the component. */
|
|
2296
|
+
meta?: Record<string, unknown>;
|
|
2297
|
+
}
|
|
2298
|
+
interface RoadmapEdge {
|
|
2299
|
+
id: string;
|
|
2300
|
+
source: string;
|
|
2301
|
+
target: string;
|
|
2302
|
+
/** Default `dashed` — plan ADR-5. 2 719 of 4 411 roadmap.sh edges are dashed. */
|
|
2303
|
+
style?: RoadmapEdgeStyle;
|
|
2304
|
+
/** <= 40 chars. A NEW capability: roadmap.sh has no edge labels at all. */
|
|
2305
|
+
label?: string;
|
|
2306
|
+
/** Default `auto`. */
|
|
2307
|
+
route?: RoadmapEdgeRoute;
|
|
2308
|
+
/** Default `none`. */
|
|
2309
|
+
arrow?: RoadmapArrow;
|
|
2310
|
+
tone?: RoadmapTone;
|
|
2311
|
+
}
|
|
2312
|
+
/**
|
|
2313
|
+
* A group is an inclusive RANGE over `order`, not a box (plan ADR-3). A rect
|
|
2314
|
+
* cannot reflow; a range spans the same rows at every width.
|
|
2315
|
+
*/
|
|
2316
|
+
interface RoadmapGroup {
|
|
2317
|
+
id: string;
|
|
2318
|
+
title?: string;
|
|
2319
|
+
/** Default `neutral`. */
|
|
2320
|
+
tone?: RoadmapTone;
|
|
2321
|
+
from: number;
|
|
2322
|
+
to: number;
|
|
2323
|
+
/** Default: all three columns. */
|
|
2324
|
+
columns?: RoadmapColumn[];
|
|
2325
|
+
description?: string;
|
|
2326
|
+
}
|
|
2327
|
+
interface RoadmapLegendEntry {
|
|
2328
|
+
id: string;
|
|
2329
|
+
label: string;
|
|
2330
|
+
tone: RoadmapTone;
|
|
2331
|
+
/** A `lucide-react` icon name, kebab-case. */
|
|
2332
|
+
icon?: string;
|
|
2333
|
+
}
|
|
2334
|
+
interface RoadmapLegend {
|
|
2335
|
+
entries: RoadmapLegendEntry[];
|
|
2336
|
+
/** `inline` = drawn where a node of kind `legend` sits. Default `top`. */
|
|
2337
|
+
placement?: RoadmapLegendPlacement;
|
|
2338
|
+
}
|
|
2339
|
+
interface RoadmapDocument {
|
|
2340
|
+
version: "roadmap/v1";
|
|
2341
|
+
title?: string;
|
|
2342
|
+
/** v1 accepts only `down`. */
|
|
2343
|
+
direction: "down";
|
|
2344
|
+
/** v1 accepts only 3. */
|
|
2345
|
+
columns: 3;
|
|
2346
|
+
nodes: RoadmapNode[];
|
|
2347
|
+
edges: RoadmapEdge[];
|
|
2348
|
+
groups: RoadmapGroup[];
|
|
2349
|
+
legend?: RoadmapLegend;
|
|
2350
|
+
meta?: Record<string, unknown>;
|
|
2351
|
+
}
|
|
2352
|
+
/** The live state, kept OUT of the document — plan ADR-8. Unknown ids are ignored. */
|
|
2353
|
+
interface RoadmapStateOverlay {
|
|
2354
|
+
version: "roadmap-state/v1";
|
|
2355
|
+
nodes: Record<string, RoadmapNodeState>;
|
|
2356
|
+
}
|
|
2357
|
+
declare const DEFAULT_NODE_SPAN: 1;
|
|
2358
|
+
declare const DEFAULT_EDGE_STYLE: RoadmapEdgeStyle;
|
|
2359
|
+
declare const DEFAULT_EDGE_ROUTE: RoadmapEdgeRoute;
|
|
2360
|
+
declare const DEFAULT_EDGE_ARROW: RoadmapArrow;
|
|
2361
|
+
declare const DEFAULT_GROUP_TONE: RoadmapTone;
|
|
2362
|
+
declare const DEFAULT_LEGEND_PLACEMENT: RoadmapLegendPlacement;
|
|
2363
|
+
declare const DEFAULT_NODE_STATE: RoadmapNodeState;
|
|
2364
|
+
/** Per-kind tone default. Every kind that is not listed falls back to `neutral`. */
|
|
2365
|
+
declare const NODE_KIND_DEFAULT_TONE: Record<RoadmapNodeKind, RoadmapTone>;
|
|
2366
|
+
declare const resolveNodeSpan: (node: RoadmapNode) => 1 | 2 | 3;
|
|
2367
|
+
declare const resolveNodeTone: (node: RoadmapNode) => RoadmapTone;
|
|
2368
|
+
declare const resolveEdgeStyle: (edge: RoadmapEdge) => RoadmapEdgeStyle;
|
|
2369
|
+
declare const resolveEdgeRoute: (edge: RoadmapEdge) => RoadmapEdgeRoute;
|
|
2370
|
+
declare const resolveEdgeArrow: (edge: RoadmapEdge) => RoadmapArrow;
|
|
2371
|
+
declare const resolveGroupTone: (group: RoadmapGroup) => RoadmapTone;
|
|
2372
|
+
declare const resolveGroupColumns: (group: RoadmapGroup) => RoadmapColumn[];
|
|
2373
|
+
declare const resolveLegendPlacement: (legend: RoadmapLegend) => RoadmapLegendPlacement;
|
|
2374
|
+
/** The overlay wins over the authored `node.state` — plan ADR-8. */
|
|
2375
|
+
declare const resolveNodeState: (node: RoadmapNode, overlay?: RoadmapStateOverlay) => RoadmapNodeState;
|
|
2376
|
+
declare const ROADMAP_NODE_ID_PATTERN: RegExp;
|
|
2377
|
+
declare const ROADMAP_EDGE_LABEL_MAX = 40;
|
|
2378
|
+
declare const ROADMAP_LABEL_MAX = 200;
|
|
2379
|
+
declare const roadmapIconSchema: z.ZodObject<{
|
|
2380
|
+
name: z.ZodString;
|
|
2381
|
+
side: z.ZodEnum<["left", "right"]>;
|
|
2382
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2383
|
+
}, "strict", z.ZodTypeAny, {
|
|
2384
|
+
name: string;
|
|
2385
|
+
side: "left" | "right";
|
|
2386
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2387
|
+
}, {
|
|
2388
|
+
name: string;
|
|
2389
|
+
side: "left" | "right";
|
|
2390
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2391
|
+
}>;
|
|
2392
|
+
declare const roadmapActionSchema: z.ZodEffects<z.ZodObject<{
|
|
2393
|
+
label: z.ZodString;
|
|
2394
|
+
href: z.ZodOptional<z.ZodString>;
|
|
2395
|
+
actionId: z.ZodOptional<z.ZodString>;
|
|
2396
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2397
|
+
}, "strict", z.ZodTypeAny, {
|
|
2398
|
+
label: string;
|
|
2399
|
+
href?: string | undefined;
|
|
2400
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2401
|
+
actionId?: string | undefined;
|
|
2402
|
+
}, {
|
|
2403
|
+
label: string;
|
|
2404
|
+
href?: string | undefined;
|
|
2405
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2406
|
+
actionId?: string | undefined;
|
|
2407
|
+
}>, {
|
|
2408
|
+
label: string;
|
|
2409
|
+
href?: string | undefined;
|
|
2410
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2411
|
+
actionId?: string | undefined;
|
|
2412
|
+
}, {
|
|
2413
|
+
label: string;
|
|
2414
|
+
href?: string | undefined;
|
|
2415
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2416
|
+
actionId?: string | undefined;
|
|
2417
|
+
}>;
|
|
2418
|
+
declare const roadmapLinkSchema: z.ZodObject<{
|
|
2419
|
+
label: z.ZodString;
|
|
2420
|
+
href: z.ZodString;
|
|
2421
|
+
}, "strict", z.ZodTypeAny, {
|
|
2422
|
+
label: string;
|
|
2423
|
+
href: string;
|
|
2424
|
+
}, {
|
|
2425
|
+
label: string;
|
|
2426
|
+
href: string;
|
|
2427
|
+
}>;
|
|
2428
|
+
declare const roadmapNodeStateSchema: z.ZodEnum<["todo", "done", "learning", "skipped", "locked"]>;
|
|
2429
|
+
declare const roadmapNodeSchema: z.ZodObject<{
|
|
2430
|
+
id: z.ZodString;
|
|
2431
|
+
column: z.ZodEnum<["left", "center", "right"]>;
|
|
2432
|
+
order: z.ZodNumber;
|
|
2433
|
+
span: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
|
|
2434
|
+
kind: z.ZodEnum<["topic", "subtopic", "label", "title", "paragraph", "button", "legend"]>;
|
|
2435
|
+
label: z.ZodString;
|
|
2436
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2437
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2438
|
+
icon: z.ZodOptional<z.ZodObject<{
|
|
2439
|
+
name: z.ZodString;
|
|
2440
|
+
side: z.ZodEnum<["left", "right"]>;
|
|
2441
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2442
|
+
}, "strict", z.ZodTypeAny, {
|
|
2443
|
+
name: string;
|
|
2444
|
+
side: "left" | "right";
|
|
2445
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2446
|
+
}, {
|
|
2447
|
+
name: string;
|
|
2448
|
+
side: "left" | "right";
|
|
2449
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2450
|
+
}>>;
|
|
2451
|
+
badge: z.ZodOptional<z.ZodString>;
|
|
2452
|
+
state: z.ZodOptional<z.ZodEnum<["todo", "done", "learning", "skipped", "locked"]>>;
|
|
2453
|
+
action: z.ZodOptional<z.ZodEffects<z.ZodObject<{
|
|
2454
|
+
label: z.ZodString;
|
|
2455
|
+
href: z.ZodOptional<z.ZodString>;
|
|
2456
|
+
actionId: z.ZodOptional<z.ZodString>;
|
|
2457
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2458
|
+
}, "strict", z.ZodTypeAny, {
|
|
2459
|
+
label: string;
|
|
2460
|
+
href?: string | undefined;
|
|
2461
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2462
|
+
actionId?: string | undefined;
|
|
2463
|
+
}, {
|
|
2464
|
+
label: string;
|
|
2465
|
+
href?: string | undefined;
|
|
2466
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2467
|
+
actionId?: string | undefined;
|
|
2468
|
+
}>, {
|
|
2469
|
+
label: string;
|
|
2470
|
+
href?: string | undefined;
|
|
2471
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2472
|
+
actionId?: string | undefined;
|
|
2473
|
+
}, {
|
|
2474
|
+
label: string;
|
|
2475
|
+
href?: string | undefined;
|
|
2476
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2477
|
+
actionId?: string | undefined;
|
|
2478
|
+
}>>;
|
|
2479
|
+
href: z.ZodOptional<z.ZodString>;
|
|
2480
|
+
links: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
2481
|
+
label: z.ZodString;
|
|
2482
|
+
href: z.ZodString;
|
|
2483
|
+
}, "strict", z.ZodTypeAny, {
|
|
2484
|
+
label: string;
|
|
2485
|
+
href: string;
|
|
2486
|
+
}, {
|
|
2487
|
+
label: string;
|
|
2488
|
+
href: string;
|
|
2489
|
+
}>, "many">>;
|
|
2490
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
2491
|
+
}, "strict", z.ZodTypeAny, {
|
|
2492
|
+
label: string;
|
|
2493
|
+
id: string;
|
|
2494
|
+
order: number;
|
|
2495
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
2496
|
+
column: "center" | "left" | "right";
|
|
2497
|
+
span?: 1 | 2 | 3 | undefined;
|
|
2498
|
+
meta?: Record<string, unknown> | undefined;
|
|
2499
|
+
href?: string | undefined;
|
|
2500
|
+
action?: {
|
|
2501
|
+
label: string;
|
|
2502
|
+
href?: string | undefined;
|
|
2503
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2504
|
+
actionId?: string | undefined;
|
|
2505
|
+
} | undefined;
|
|
2506
|
+
icon?: {
|
|
2507
|
+
name: string;
|
|
2508
|
+
side: "left" | "right";
|
|
2509
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2510
|
+
} | undefined;
|
|
2511
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2512
|
+
description?: string | undefined;
|
|
2513
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
2514
|
+
badge?: string | undefined;
|
|
2515
|
+
links?: {
|
|
2516
|
+
label: string;
|
|
2517
|
+
href: string;
|
|
2518
|
+
}[] | undefined;
|
|
2519
|
+
}, {
|
|
2520
|
+
label: string;
|
|
2521
|
+
id: string;
|
|
2522
|
+
order: number;
|
|
2523
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
2524
|
+
column: "center" | "left" | "right";
|
|
2525
|
+
span?: 1 | 2 | 3 | undefined;
|
|
2526
|
+
meta?: Record<string, unknown> | undefined;
|
|
2527
|
+
href?: string | undefined;
|
|
2528
|
+
action?: {
|
|
2529
|
+
label: string;
|
|
2530
|
+
href?: string | undefined;
|
|
2531
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2532
|
+
actionId?: string | undefined;
|
|
2533
|
+
} | undefined;
|
|
2534
|
+
icon?: {
|
|
2535
|
+
name: string;
|
|
2536
|
+
side: "left" | "right";
|
|
2537
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2538
|
+
} | undefined;
|
|
2539
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2540
|
+
description?: string | undefined;
|
|
2541
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
2542
|
+
badge?: string | undefined;
|
|
2543
|
+
links?: {
|
|
2544
|
+
label: string;
|
|
2545
|
+
href: string;
|
|
2546
|
+
}[] | undefined;
|
|
2547
|
+
}>;
|
|
2548
|
+
declare const roadmapEdgeSchema: z.ZodObject<{
|
|
2549
|
+
id: z.ZodString;
|
|
2550
|
+
source: z.ZodString;
|
|
2551
|
+
target: z.ZodString;
|
|
2552
|
+
style: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
|
|
2553
|
+
label: z.ZodOptional<z.ZodString>;
|
|
2554
|
+
route: z.ZodOptional<z.ZodEnum<["auto", "straight", "elbow", "curve"]>>;
|
|
2555
|
+
arrow: z.ZodOptional<z.ZodEnum<["none", "end", "both"]>>;
|
|
2556
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2557
|
+
}, "strict", z.ZodTypeAny, {
|
|
2558
|
+
source: string;
|
|
2559
|
+
id: string;
|
|
2560
|
+
target: string;
|
|
2561
|
+
label?: string | undefined;
|
|
2562
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
2563
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2564
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
2565
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
2566
|
+
}, {
|
|
2567
|
+
source: string;
|
|
2568
|
+
id: string;
|
|
2569
|
+
target: string;
|
|
2570
|
+
label?: string | undefined;
|
|
2571
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
2572
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2573
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
2574
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
2575
|
+
}>;
|
|
2576
|
+
declare const roadmapGroupSchema: z.ZodObject<{
|
|
2577
|
+
id: z.ZodString;
|
|
2578
|
+
title: z.ZodOptional<z.ZodString>;
|
|
2579
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2580
|
+
from: z.ZodNumber;
|
|
2581
|
+
to: z.ZodNumber;
|
|
2582
|
+
columns: z.ZodOptional<z.ZodArray<z.ZodEnum<["left", "center", "right"]>, "many">>;
|
|
2583
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2584
|
+
}, "strict", z.ZodTypeAny, {
|
|
2585
|
+
id: string;
|
|
2586
|
+
from: number;
|
|
2587
|
+
to: number;
|
|
2588
|
+
title?: string | undefined;
|
|
2589
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2590
|
+
description?: string | undefined;
|
|
2591
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
2592
|
+
}, {
|
|
2593
|
+
id: string;
|
|
2594
|
+
from: number;
|
|
2595
|
+
to: number;
|
|
2596
|
+
title?: string | undefined;
|
|
2597
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2598
|
+
description?: string | undefined;
|
|
2599
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
2600
|
+
}>;
|
|
2601
|
+
declare const roadmapLegendEntrySchema: z.ZodObject<{
|
|
2602
|
+
id: z.ZodString;
|
|
2603
|
+
label: z.ZodString;
|
|
2604
|
+
tone: z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>;
|
|
2605
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
2606
|
+
}, "strict", z.ZodTypeAny, {
|
|
2607
|
+
label: string;
|
|
2608
|
+
id: string;
|
|
2609
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2610
|
+
icon?: string | undefined;
|
|
2611
|
+
}, {
|
|
2612
|
+
label: string;
|
|
2613
|
+
id: string;
|
|
2614
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2615
|
+
icon?: string | undefined;
|
|
2616
|
+
}>;
|
|
2617
|
+
declare const roadmapLegendSchema: z.ZodObject<{
|
|
2618
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
2619
|
+
id: z.ZodString;
|
|
2620
|
+
label: z.ZodString;
|
|
2621
|
+
tone: z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>;
|
|
2622
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
2623
|
+
}, "strict", z.ZodTypeAny, {
|
|
2624
|
+
label: string;
|
|
2625
|
+
id: string;
|
|
2626
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2627
|
+
icon?: string | undefined;
|
|
2628
|
+
}, {
|
|
2629
|
+
label: string;
|
|
2630
|
+
id: string;
|
|
2631
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2632
|
+
icon?: string | undefined;
|
|
2633
|
+
}>, "many">;
|
|
2634
|
+
placement: z.ZodOptional<z.ZodEnum<["top", "bottom", "inline"]>>;
|
|
2635
|
+
}, "strict", z.ZodTypeAny, {
|
|
2636
|
+
entries: {
|
|
2637
|
+
label: string;
|
|
2638
|
+
id: string;
|
|
2639
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2640
|
+
icon?: string | undefined;
|
|
2641
|
+
}[];
|
|
2642
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
2643
|
+
}, {
|
|
2644
|
+
entries: {
|
|
2645
|
+
label: string;
|
|
2646
|
+
id: string;
|
|
2647
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2648
|
+
icon?: string | undefined;
|
|
2649
|
+
}[];
|
|
2650
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
2651
|
+
}>;
|
|
2652
|
+
/** Which grid tracks a node occupies. `span: 3` ignores `column` and takes all three. */
|
|
2653
|
+
declare function columnsCovered(node: {
|
|
2654
|
+
column: RoadmapColumn;
|
|
2655
|
+
span?: 1 | 2 | 3;
|
|
2656
|
+
}): RoadmapColumn[];
|
|
2657
|
+
/**
|
|
2658
|
+
* The document schema, with every cross-field invariant the plan lists.
|
|
2659
|
+
*
|
|
2660
|
+
* Each issue carries a PATH into the document, so a caller can point an author
|
|
2661
|
+
* at the exact node, edge or group that is wrong.
|
|
2662
|
+
*/
|
|
2663
|
+
declare const roadmapDocumentSchema: z.ZodEffects<z.ZodObject<{
|
|
2664
|
+
version: z.ZodLiteral<"roadmap/v1">;
|
|
2665
|
+
title: z.ZodOptional<z.ZodString>;
|
|
2666
|
+
direction: z.ZodLiteral<"down">;
|
|
2667
|
+
columns: z.ZodLiteral<3>;
|
|
2668
|
+
nodes: z.ZodArray<z.ZodObject<{
|
|
2669
|
+
id: z.ZodString;
|
|
2670
|
+
column: z.ZodEnum<["left", "center", "right"]>;
|
|
2671
|
+
order: z.ZodNumber;
|
|
2672
|
+
span: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>>;
|
|
2673
|
+
kind: z.ZodEnum<["topic", "subtopic", "label", "title", "paragraph", "button", "legend"]>;
|
|
2674
|
+
label: z.ZodString;
|
|
2675
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2676
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2677
|
+
icon: z.ZodOptional<z.ZodObject<{
|
|
2678
|
+
name: z.ZodString;
|
|
2679
|
+
side: z.ZodEnum<["left", "right"]>;
|
|
2680
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2681
|
+
}, "strict", z.ZodTypeAny, {
|
|
2682
|
+
name: string;
|
|
2683
|
+
side: "left" | "right";
|
|
2684
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2685
|
+
}, {
|
|
2686
|
+
name: string;
|
|
2687
|
+
side: "left" | "right";
|
|
2688
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2689
|
+
}>>;
|
|
2690
|
+
badge: z.ZodOptional<z.ZodString>;
|
|
2691
|
+
state: z.ZodOptional<z.ZodEnum<["todo", "done", "learning", "skipped", "locked"]>>;
|
|
2692
|
+
action: z.ZodOptional<z.ZodEffects<z.ZodObject<{
|
|
2693
|
+
label: z.ZodString;
|
|
2694
|
+
href: z.ZodOptional<z.ZodString>;
|
|
2695
|
+
actionId: z.ZodOptional<z.ZodString>;
|
|
2696
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2697
|
+
}, "strict", z.ZodTypeAny, {
|
|
2698
|
+
label: string;
|
|
2699
|
+
href?: string | undefined;
|
|
2700
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2701
|
+
actionId?: string | undefined;
|
|
2702
|
+
}, {
|
|
2703
|
+
label: string;
|
|
2704
|
+
href?: string | undefined;
|
|
2705
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2706
|
+
actionId?: string | undefined;
|
|
2707
|
+
}>, {
|
|
2708
|
+
label: string;
|
|
2709
|
+
href?: string | undefined;
|
|
2710
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2711
|
+
actionId?: string | undefined;
|
|
2712
|
+
}, {
|
|
2713
|
+
label: string;
|
|
2714
|
+
href?: string | undefined;
|
|
2715
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2716
|
+
actionId?: string | undefined;
|
|
2717
|
+
}>>;
|
|
2718
|
+
href: z.ZodOptional<z.ZodString>;
|
|
2719
|
+
links: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
2720
|
+
label: z.ZodString;
|
|
2721
|
+
href: z.ZodString;
|
|
2722
|
+
}, "strict", z.ZodTypeAny, {
|
|
2723
|
+
label: string;
|
|
2724
|
+
href: string;
|
|
2725
|
+
}, {
|
|
2726
|
+
label: string;
|
|
2727
|
+
href: string;
|
|
2728
|
+
}>, "many">>;
|
|
2729
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
2730
|
+
}, "strict", z.ZodTypeAny, {
|
|
2731
|
+
label: string;
|
|
2732
|
+
id: string;
|
|
2733
|
+
order: number;
|
|
2734
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
2735
|
+
column: "center" | "left" | "right";
|
|
2736
|
+
span?: 1 | 2 | 3 | undefined;
|
|
2737
|
+
meta?: Record<string, unknown> | undefined;
|
|
2738
|
+
href?: string | undefined;
|
|
2739
|
+
action?: {
|
|
2740
|
+
label: string;
|
|
2741
|
+
href?: string | undefined;
|
|
2742
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2743
|
+
actionId?: string | undefined;
|
|
2744
|
+
} | undefined;
|
|
2745
|
+
icon?: {
|
|
2746
|
+
name: string;
|
|
2747
|
+
side: "left" | "right";
|
|
2748
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2749
|
+
} | undefined;
|
|
2750
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2751
|
+
description?: string | undefined;
|
|
2752
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
2753
|
+
badge?: string | undefined;
|
|
2754
|
+
links?: {
|
|
2755
|
+
label: string;
|
|
2756
|
+
href: string;
|
|
2757
|
+
}[] | undefined;
|
|
2758
|
+
}, {
|
|
2759
|
+
label: string;
|
|
2760
|
+
id: string;
|
|
2761
|
+
order: number;
|
|
2762
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
2763
|
+
column: "center" | "left" | "right";
|
|
2764
|
+
span?: 1 | 2 | 3 | undefined;
|
|
2765
|
+
meta?: Record<string, unknown> | undefined;
|
|
2766
|
+
href?: string | undefined;
|
|
2767
|
+
action?: {
|
|
2768
|
+
label: string;
|
|
2769
|
+
href?: string | undefined;
|
|
2770
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2771
|
+
actionId?: string | undefined;
|
|
2772
|
+
} | undefined;
|
|
2773
|
+
icon?: {
|
|
2774
|
+
name: string;
|
|
2775
|
+
side: "left" | "right";
|
|
2776
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2777
|
+
} | undefined;
|
|
2778
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2779
|
+
description?: string | undefined;
|
|
2780
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
2781
|
+
badge?: string | undefined;
|
|
2782
|
+
links?: {
|
|
2783
|
+
label: string;
|
|
2784
|
+
href: string;
|
|
2785
|
+
}[] | undefined;
|
|
2786
|
+
}>, "many">;
|
|
2787
|
+
edges: z.ZodArray<z.ZodObject<{
|
|
2788
|
+
id: z.ZodString;
|
|
2789
|
+
source: z.ZodString;
|
|
2790
|
+
target: z.ZodString;
|
|
2791
|
+
style: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
|
|
2792
|
+
label: z.ZodOptional<z.ZodString>;
|
|
2793
|
+
route: z.ZodOptional<z.ZodEnum<["auto", "straight", "elbow", "curve"]>>;
|
|
2794
|
+
arrow: z.ZodOptional<z.ZodEnum<["none", "end", "both"]>>;
|
|
2795
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2796
|
+
}, "strict", z.ZodTypeAny, {
|
|
2797
|
+
source: string;
|
|
2798
|
+
id: string;
|
|
2799
|
+
target: string;
|
|
2800
|
+
label?: string | undefined;
|
|
2801
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
2802
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2803
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
2804
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
2805
|
+
}, {
|
|
2806
|
+
source: string;
|
|
2807
|
+
id: string;
|
|
2808
|
+
target: string;
|
|
2809
|
+
label?: string | undefined;
|
|
2810
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
2811
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2812
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
2813
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
2814
|
+
}>, "many">;
|
|
2815
|
+
groups: z.ZodArray<z.ZodObject<{
|
|
2816
|
+
id: z.ZodString;
|
|
2817
|
+
title: z.ZodOptional<z.ZodString>;
|
|
2818
|
+
tone: z.ZodOptional<z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>>;
|
|
2819
|
+
from: z.ZodNumber;
|
|
2820
|
+
to: z.ZodNumber;
|
|
2821
|
+
columns: z.ZodOptional<z.ZodArray<z.ZodEnum<["left", "center", "right"]>, "many">>;
|
|
2822
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2823
|
+
}, "strict", z.ZodTypeAny, {
|
|
2824
|
+
id: string;
|
|
2825
|
+
from: number;
|
|
2826
|
+
to: number;
|
|
2827
|
+
title?: string | undefined;
|
|
2828
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2829
|
+
description?: string | undefined;
|
|
2830
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
2831
|
+
}, {
|
|
2832
|
+
id: string;
|
|
2833
|
+
from: number;
|
|
2834
|
+
to: number;
|
|
2835
|
+
title?: string | undefined;
|
|
2836
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2837
|
+
description?: string | undefined;
|
|
2838
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
2839
|
+
}>, "many">;
|
|
2840
|
+
legend: z.ZodOptional<z.ZodObject<{
|
|
2841
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
2842
|
+
id: z.ZodString;
|
|
2843
|
+
label: z.ZodString;
|
|
2844
|
+
tone: z.ZodEnum<["primary", "secondary", "accent", "muted", "success", "info", "danger", "neutral"]>;
|
|
2845
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
2846
|
+
}, "strict", z.ZodTypeAny, {
|
|
2847
|
+
label: string;
|
|
2848
|
+
id: string;
|
|
2849
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2850
|
+
icon?: string | undefined;
|
|
2851
|
+
}, {
|
|
2852
|
+
label: string;
|
|
2853
|
+
id: string;
|
|
2854
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2855
|
+
icon?: string | undefined;
|
|
2856
|
+
}>, "many">;
|
|
2857
|
+
placement: z.ZodOptional<z.ZodEnum<["top", "bottom", "inline"]>>;
|
|
2858
|
+
}, "strict", z.ZodTypeAny, {
|
|
2859
|
+
entries: {
|
|
2860
|
+
label: string;
|
|
2861
|
+
id: string;
|
|
2862
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2863
|
+
icon?: string | undefined;
|
|
2864
|
+
}[];
|
|
2865
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
2866
|
+
}, {
|
|
2867
|
+
entries: {
|
|
2868
|
+
label: string;
|
|
2869
|
+
id: string;
|
|
2870
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2871
|
+
icon?: string | undefined;
|
|
2872
|
+
}[];
|
|
2873
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
2874
|
+
}>>;
|
|
2875
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
2876
|
+
}, "strict", z.ZodTypeAny, {
|
|
2877
|
+
direction: "down";
|
|
2878
|
+
version: "roadmap/v1";
|
|
2879
|
+
edges: {
|
|
2880
|
+
source: string;
|
|
2881
|
+
id: string;
|
|
2882
|
+
target: string;
|
|
2883
|
+
label?: string | undefined;
|
|
2884
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
2885
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2886
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
2887
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
2888
|
+
}[];
|
|
2889
|
+
columns: 3;
|
|
2890
|
+
nodes: {
|
|
2891
|
+
label: string;
|
|
2892
|
+
id: string;
|
|
2893
|
+
order: number;
|
|
2894
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
2895
|
+
column: "center" | "left" | "right";
|
|
2896
|
+
span?: 1 | 2 | 3 | undefined;
|
|
2897
|
+
meta?: Record<string, unknown> | undefined;
|
|
2898
|
+
href?: string | undefined;
|
|
2899
|
+
action?: {
|
|
2900
|
+
label: string;
|
|
2901
|
+
href?: string | undefined;
|
|
2902
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2903
|
+
actionId?: string | undefined;
|
|
2904
|
+
} | undefined;
|
|
2905
|
+
icon?: {
|
|
2906
|
+
name: string;
|
|
2907
|
+
side: "left" | "right";
|
|
2908
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2909
|
+
} | undefined;
|
|
2910
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2911
|
+
description?: string | undefined;
|
|
2912
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
2913
|
+
badge?: string | undefined;
|
|
2914
|
+
links?: {
|
|
2915
|
+
label: string;
|
|
2916
|
+
href: string;
|
|
2917
|
+
}[] | undefined;
|
|
2918
|
+
}[];
|
|
2919
|
+
groups: {
|
|
2920
|
+
id: string;
|
|
2921
|
+
from: number;
|
|
2922
|
+
to: number;
|
|
2923
|
+
title?: string | undefined;
|
|
2924
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2925
|
+
description?: string | undefined;
|
|
2926
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
2927
|
+
}[];
|
|
2928
|
+
legend?: {
|
|
2929
|
+
entries: {
|
|
2930
|
+
label: string;
|
|
2931
|
+
id: string;
|
|
2932
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2933
|
+
icon?: string | undefined;
|
|
2934
|
+
}[];
|
|
2935
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
2936
|
+
} | undefined;
|
|
2937
|
+
meta?: Record<string, unknown> | undefined;
|
|
2938
|
+
title?: string | undefined;
|
|
2939
|
+
}, {
|
|
2940
|
+
direction: "down";
|
|
2941
|
+
version: "roadmap/v1";
|
|
2942
|
+
edges: {
|
|
2943
|
+
source: string;
|
|
2944
|
+
id: string;
|
|
2945
|
+
target: string;
|
|
2946
|
+
label?: string | undefined;
|
|
2947
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
2948
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2949
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
2950
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
2951
|
+
}[];
|
|
2952
|
+
columns: 3;
|
|
2953
|
+
nodes: {
|
|
2954
|
+
label: string;
|
|
2955
|
+
id: string;
|
|
2956
|
+
order: number;
|
|
2957
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
2958
|
+
column: "center" | "left" | "right";
|
|
2959
|
+
span?: 1 | 2 | 3 | undefined;
|
|
2960
|
+
meta?: Record<string, unknown> | undefined;
|
|
2961
|
+
href?: string | undefined;
|
|
2962
|
+
action?: {
|
|
2963
|
+
label: string;
|
|
2964
|
+
href?: string | undefined;
|
|
2965
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2966
|
+
actionId?: string | undefined;
|
|
2967
|
+
} | undefined;
|
|
2968
|
+
icon?: {
|
|
2969
|
+
name: string;
|
|
2970
|
+
side: "left" | "right";
|
|
2971
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2972
|
+
} | undefined;
|
|
2973
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2974
|
+
description?: string | undefined;
|
|
2975
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
2976
|
+
badge?: string | undefined;
|
|
2977
|
+
links?: {
|
|
2978
|
+
label: string;
|
|
2979
|
+
href: string;
|
|
2980
|
+
}[] | undefined;
|
|
2981
|
+
}[];
|
|
2982
|
+
groups: {
|
|
2983
|
+
id: string;
|
|
2984
|
+
from: number;
|
|
2985
|
+
to: number;
|
|
2986
|
+
title?: string | undefined;
|
|
2987
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
2988
|
+
description?: string | undefined;
|
|
2989
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
2990
|
+
}[];
|
|
2991
|
+
legend?: {
|
|
2992
|
+
entries: {
|
|
2993
|
+
label: string;
|
|
2994
|
+
id: string;
|
|
2995
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
2996
|
+
icon?: string | undefined;
|
|
2997
|
+
}[];
|
|
2998
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
2999
|
+
} | undefined;
|
|
3000
|
+
meta?: Record<string, unknown> | undefined;
|
|
3001
|
+
title?: string | undefined;
|
|
3002
|
+
}>, {
|
|
3003
|
+
direction: "down";
|
|
3004
|
+
version: "roadmap/v1";
|
|
3005
|
+
edges: {
|
|
3006
|
+
source: string;
|
|
3007
|
+
id: string;
|
|
3008
|
+
target: string;
|
|
3009
|
+
label?: string | undefined;
|
|
3010
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
3011
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3012
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
3013
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
3014
|
+
}[];
|
|
3015
|
+
columns: 3;
|
|
3016
|
+
nodes: {
|
|
3017
|
+
label: string;
|
|
3018
|
+
id: string;
|
|
3019
|
+
order: number;
|
|
3020
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
3021
|
+
column: "center" | "left" | "right";
|
|
3022
|
+
span?: 1 | 2 | 3 | undefined;
|
|
3023
|
+
meta?: Record<string, unknown> | undefined;
|
|
3024
|
+
href?: string | undefined;
|
|
3025
|
+
action?: {
|
|
3026
|
+
label: string;
|
|
3027
|
+
href?: string | undefined;
|
|
3028
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3029
|
+
actionId?: string | undefined;
|
|
3030
|
+
} | undefined;
|
|
3031
|
+
icon?: {
|
|
3032
|
+
name: string;
|
|
3033
|
+
side: "left" | "right";
|
|
3034
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3035
|
+
} | undefined;
|
|
3036
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3037
|
+
description?: string | undefined;
|
|
3038
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
3039
|
+
badge?: string | undefined;
|
|
3040
|
+
links?: {
|
|
3041
|
+
label: string;
|
|
3042
|
+
href: string;
|
|
3043
|
+
}[] | undefined;
|
|
3044
|
+
}[];
|
|
3045
|
+
groups: {
|
|
3046
|
+
id: string;
|
|
3047
|
+
from: number;
|
|
3048
|
+
to: number;
|
|
3049
|
+
title?: string | undefined;
|
|
3050
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3051
|
+
description?: string | undefined;
|
|
3052
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
3053
|
+
}[];
|
|
3054
|
+
legend?: {
|
|
3055
|
+
entries: {
|
|
3056
|
+
label: string;
|
|
3057
|
+
id: string;
|
|
3058
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
3059
|
+
icon?: string | undefined;
|
|
3060
|
+
}[];
|
|
3061
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
3062
|
+
} | undefined;
|
|
3063
|
+
meta?: Record<string, unknown> | undefined;
|
|
3064
|
+
title?: string | undefined;
|
|
3065
|
+
}, {
|
|
3066
|
+
direction: "down";
|
|
3067
|
+
version: "roadmap/v1";
|
|
3068
|
+
edges: {
|
|
3069
|
+
source: string;
|
|
3070
|
+
id: string;
|
|
3071
|
+
target: string;
|
|
3072
|
+
label?: string | undefined;
|
|
3073
|
+
style?: "dashed" | "dotted" | "solid" | undefined;
|
|
3074
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3075
|
+
route?: "auto" | "straight" | "elbow" | "curve" | undefined;
|
|
3076
|
+
arrow?: "end" | "none" | "both" | undefined;
|
|
3077
|
+
}[];
|
|
3078
|
+
columns: 3;
|
|
3079
|
+
nodes: {
|
|
3080
|
+
label: string;
|
|
3081
|
+
id: string;
|
|
3082
|
+
order: number;
|
|
3083
|
+
kind: "button" | "label" | "legend" | "title" | "topic" | "subtopic" | "paragraph";
|
|
3084
|
+
column: "center" | "left" | "right";
|
|
3085
|
+
span?: 1 | 2 | 3 | undefined;
|
|
3086
|
+
meta?: Record<string, unknown> | undefined;
|
|
3087
|
+
href?: string | undefined;
|
|
3088
|
+
action?: {
|
|
3089
|
+
label: string;
|
|
3090
|
+
href?: string | undefined;
|
|
3091
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3092
|
+
actionId?: string | undefined;
|
|
3093
|
+
} | undefined;
|
|
3094
|
+
icon?: {
|
|
3095
|
+
name: string;
|
|
3096
|
+
side: "left" | "right";
|
|
3097
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3098
|
+
} | undefined;
|
|
3099
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3100
|
+
description?: string | undefined;
|
|
3101
|
+
state?: "done" | "todo" | "learning" | "skipped" | "locked" | undefined;
|
|
3102
|
+
badge?: string | undefined;
|
|
3103
|
+
links?: {
|
|
3104
|
+
label: string;
|
|
3105
|
+
href: string;
|
|
3106
|
+
}[] | undefined;
|
|
3107
|
+
}[];
|
|
3108
|
+
groups: {
|
|
3109
|
+
id: string;
|
|
3110
|
+
from: number;
|
|
3111
|
+
to: number;
|
|
3112
|
+
title?: string | undefined;
|
|
3113
|
+
tone?: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral" | undefined;
|
|
3114
|
+
description?: string | undefined;
|
|
3115
|
+
columns?: ("center" | "left" | "right")[] | undefined;
|
|
3116
|
+
}[];
|
|
3117
|
+
legend?: {
|
|
3118
|
+
entries: {
|
|
3119
|
+
label: string;
|
|
3120
|
+
id: string;
|
|
3121
|
+
tone: "muted" | "info" | "success" | "danger" | "primary" | "secondary" | "accent" | "neutral";
|
|
3122
|
+
icon?: string | undefined;
|
|
3123
|
+
}[];
|
|
3124
|
+
placement?: "inline" | "bottom" | "top" | undefined;
|
|
3125
|
+
} | undefined;
|
|
3126
|
+
meta?: Record<string, unknown> | undefined;
|
|
3127
|
+
title?: string | undefined;
|
|
3128
|
+
}>;
|
|
3129
|
+
declare const roadmapStateOverlaySchema: z.ZodObject<{
|
|
3130
|
+
version: z.ZodLiteral<"roadmap-state/v1">;
|
|
3131
|
+
nodes: z.ZodRecord<z.ZodString, z.ZodEnum<["todo", "done", "learning", "skipped", "locked"]>>;
|
|
3132
|
+
}, "strict", z.ZodTypeAny, {
|
|
3133
|
+
version: "roadmap-state/v1";
|
|
3134
|
+
nodes: Record<string, "done" | "todo" | "learning" | "skipped" | "locked">;
|
|
3135
|
+
}, {
|
|
3136
|
+
version: "roadmap-state/v1";
|
|
3137
|
+
nodes: Record<string, "done" | "todo" | "learning" | "skipped" | "locked">;
|
|
3138
|
+
}>;
|
|
3139
|
+
/** Kept as an alias: the plan names this schema `roadmapStateSchema`. */
|
|
3140
|
+
declare const roadmapStateSchema: z.ZodObject<{
|
|
3141
|
+
version: z.ZodLiteral<"roadmap-state/v1">;
|
|
3142
|
+
nodes: z.ZodRecord<z.ZodString, z.ZodEnum<["todo", "done", "learning", "skipped", "locked"]>>;
|
|
3143
|
+
}, "strict", z.ZodTypeAny, {
|
|
3144
|
+
version: "roadmap-state/v1";
|
|
3145
|
+
nodes: Record<string, "done" | "todo" | "learning" | "skipped" | "locked">;
|
|
3146
|
+
}, {
|
|
3147
|
+
version: "roadmap-state/v1";
|
|
3148
|
+
nodes: Record<string, "done" | "todo" | "learning" | "skipped" | "locked">;
|
|
3149
|
+
}>;
|
|
3150
|
+
/** Throws a `ZodError` whose issues carry a path into the document. */
|
|
3151
|
+
declare function parseRoadmapDocument(input: unknown): RoadmapDocument;
|
|
3152
|
+
declare function safeParseRoadmapDocument(input: unknown): z.SafeParseReturnType<unknown, RoadmapDocument>;
|
|
3153
|
+
declare function parseRoadmapStateOverlay(input: unknown): RoadmapStateOverlay;
|
|
3154
|
+
declare function safeParseRoadmapStateOverlay(input: unknown): z.SafeParseReturnType<unknown, RoadmapStateOverlay>;
|
|
3155
|
+
|
|
3156
|
+
/** 0 for `left`, 1 for `center`, 2 for `right`. */
|
|
3157
|
+
declare function columnIndex(column: RoadmapColumn): number;
|
|
3158
|
+
/**
|
|
3159
|
+
* The CSS grid placement of a node, 1-based as `grid-column` wants it.
|
|
3160
|
+
* A `span: 3` node always starts at track 1 and covers all three.
|
|
3161
|
+
*/
|
|
3162
|
+
declare function gridColumnFor(node: Pick<RoadmapNode, "column" | "span">): {
|
|
3163
|
+
start: number;
|
|
3164
|
+
span: number;
|
|
3165
|
+
};
|
|
3166
|
+
/** The `order` values that carry at least one node, ascending. */
|
|
3167
|
+
declare function rowsOf(doc: Pick<RoadmapDocument, "nodes">): number[];
|
|
3168
|
+
/** The highest `order` in the document, or `-1` when there is no node. */
|
|
3169
|
+
declare function maxRowOf(doc: Pick<RoadmapDocument, "nodes">): number;
|
|
3170
|
+
/**
|
|
3171
|
+
* Nodes bucketed by `order`, each bucket ordered left to right. That order is
|
|
3172
|
+
* also the DOM order the renderer emits, which is what makes a screen reader
|
|
3173
|
+
* read the map in reading order.
|
|
3174
|
+
*/
|
|
3175
|
+
declare function nodesByRow(doc: Pick<RoadmapDocument, "nodes">): Map<number, RoadmapNode[]>;
|
|
3176
|
+
/**
|
|
3177
|
+
* The columns that at least one node occupies.
|
|
3178
|
+
*
|
|
3179
|
+
* `collapseEmptyColumns` (round R4) reads this. It is the fix for the measured
|
|
3180
|
+
* ITERA regression of 2026-09-03, where 512 of 776 px were reserved for two
|
|
3181
|
+
* side columns that held nothing.
|
|
3182
|
+
*/
|
|
3183
|
+
declare function columnsUsed(doc: Pick<RoadmapDocument, "nodes">): RoadmapColumn[];
|
|
3184
|
+
/** One resolved group: its row range and the tracks it paints. */
|
|
3185
|
+
interface RoadmapGroupRange {
|
|
3186
|
+
id: string;
|
|
3187
|
+
from: number;
|
|
3188
|
+
to: number;
|
|
3189
|
+
columns: RoadmapColumn[];
|
|
3190
|
+
/** 1-based `grid-row` start and span. */
|
|
3191
|
+
row: {
|
|
3192
|
+
start: number;
|
|
3193
|
+
span: number;
|
|
3194
|
+
};
|
|
3195
|
+
/** 1-based `grid-column` start and span. Contiguous groups only (see below). */
|
|
3196
|
+
column: {
|
|
3197
|
+
start: number;
|
|
3198
|
+
span: number;
|
|
3199
|
+
};
|
|
3200
|
+
/** True when `columns` is not a contiguous run — the renderer paints one box per run. */
|
|
3201
|
+
fragmented: boolean;
|
|
3202
|
+
}
|
|
3203
|
+
/**
|
|
3204
|
+
* Resolve every group to the range and the tracks it paints.
|
|
3205
|
+
*
|
|
3206
|
+
* A group is a RANGE over `order`, never a rect (plan ADR-3), so it spans the
|
|
3207
|
+
* same rows at every viewport width. `columns` may be any subset; when the
|
|
3208
|
+
* subset is not contiguous (`['left','right']`), `fragmented` is true and the
|
|
3209
|
+
* renderer draws one box per contiguous run rather than one box that swallows
|
|
3210
|
+
* the middle track.
|
|
3211
|
+
*/
|
|
3212
|
+
declare function groupRanges(doc: Pick<RoadmapDocument, "groups">): RoadmapGroupRange[];
|
|
3213
|
+
/** The contiguous column runs of a group — one painted box each. */
|
|
3214
|
+
declare function groupColumnRuns(group: RoadmapGroup): {
|
|
3215
|
+
start: number;
|
|
3216
|
+
span: number;
|
|
3217
|
+
}[];
|
|
3218
|
+
/** One reported collision between two things that want the same space. */
|
|
3219
|
+
interface RoadmapOverlap {
|
|
3220
|
+
kind: "node" | "group";
|
|
3221
|
+
/** `(column, order)` for a node collision; `(column, row)` for a group collision. */
|
|
3222
|
+
column: RoadmapColumn;
|
|
3223
|
+
row: number;
|
|
3224
|
+
/** The two ids that collide, in document order. */
|
|
3225
|
+
ids: [string, string];
|
|
3226
|
+
}
|
|
3227
|
+
/**
|
|
3228
|
+
* Every cell claimed twice — by two nodes, or by two groups.
|
|
3229
|
+
*
|
|
3230
|
+
* The zod schema rejects both cases, so a parsed document always returns an
|
|
3231
|
+
* empty array here. The helper exists for the CONVERTER, which must find and
|
|
3232
|
+
* repair a collision before it emits a document, and for the renderer's dev
|
|
3233
|
+
* assertions.
|
|
3234
|
+
*/
|
|
3235
|
+
declare function validateNoOverlap(doc: Pick<RoadmapDocument, "nodes" | "groups">): RoadmapOverlap[];
|
|
3236
|
+
/** One node, resolved to its grid placement. */
|
|
3237
|
+
interface RoadmapPlacement {
|
|
3238
|
+
node: RoadmapNode;
|
|
3239
|
+
row: {
|
|
3240
|
+
start: number;
|
|
3241
|
+
span: number;
|
|
3242
|
+
};
|
|
3243
|
+
column: {
|
|
3244
|
+
start: number;
|
|
3245
|
+
span: number;
|
|
3246
|
+
};
|
|
3247
|
+
}
|
|
3248
|
+
/**
|
|
3249
|
+
* Place every node in the 3-column grid, in DOM order (row by row, left to
|
|
3250
|
+
* right). `rows` is the ascending list of occupied `order` values and
|
|
3251
|
+
* `rowCount` is `maxRow + 1`, because the grid keeps an empty row that a group
|
|
3252
|
+
* may still paint.
|
|
3253
|
+
*/
|
|
3254
|
+
declare function placeNodes(doc: Pick<RoadmapDocument, "nodes">): {
|
|
3255
|
+
placements: RoadmapPlacement[];
|
|
3256
|
+
rows: number[];
|
|
3257
|
+
rowCount: number;
|
|
3258
|
+
};
|
|
3259
|
+
/**
|
|
3260
|
+
* The first free `order` at or below `from` for a node in `columns`.
|
|
3261
|
+
* The converter uses it to resolve a cell collision by shifting a node down.
|
|
3262
|
+
*/
|
|
3263
|
+
declare function firstFreeRow(taken: ReadonlySet<string>, columns: readonly RoadmapColumn[], from: number): number;
|
|
3264
|
+
|
|
3265
|
+
export { ALLOWED_ORIGINS, AVATAR_MEMBER_PALETTE_SIZE, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, type AlertDialogActionProps, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppNavbar, type AppNavbarProps, AppSidebar, type AppSidebarProps, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarImage, type AvatarSize, AvatarStatus, type AvatarStatusValue, type AvatarTone, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, type BreadcrumbEntry, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselDots, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleHeader, CollapsibleItem, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_EDGE_ARROW, DEFAULT_EDGE_ROUTE, DEFAULT_EDGE_STYLE, DEFAULT_GROUP_TONE, DEFAULT_LEGEND_PLACEMENT, DEFAULT_NAME_COL_WIDTH, DEFAULT_NODE_SPAN, DEFAULT_NODE_STATE, type DflIframeMessage, type DflNavigateMessage, type DflReadyMessage, DflRemote, type DflRemoteProps, type DflResizeMessage, type DflSetTokenMessage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gantt, type GanttDependency, type GanttMilestone, type GanttProps, type GanttStage, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, IframeAware, type IframeAwareProps, IframeContext, type IframeContextValue, type IframeMessageType, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, type KbdProps, Label, LoginPage, type LoginPageProps, LoginScreen, type LoginScreenProps, MEMBER_PALETTE_SIZE, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NODE_KIND_DEFAULT_TONE, type NavGroup, type NavItem, type NavbarUserInfo, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, type OTPStatus, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PasswordInput, type PasswordInputProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, type ProgressProps, ProtectedRoute, type ProtectedRouteProps, PublishDrawer, type PublishDrawerProps, type PublishDrawerSupabase, type PublishResult, type PublishStatus, type PublisherAccount, ROADMAP_ARROWS, ROADMAP_COLUMNS, ROADMAP_EDGE_LABEL_MAX, ROADMAP_EDGE_ROUTES, ROADMAP_EDGE_STYLES, ROADMAP_LABEL_MAX, ROADMAP_LEGEND_PLACEMENTS, ROADMAP_NODE_ID_PATTERN, ROADMAP_NODE_KINDS, ROADMAP_NODE_STATES, ROADMAP_TONES, RadioGroup, RadioGroupItem, RadioGroupRow, ResizableHandle, ResizablePanel, ResizablePanelGroup, type RoadmapAction, type RoadmapArrow, type RoadmapColumn, type RoadmapDocument, type RoadmapEdge, type RoadmapEdgeRoute, type RoadmapEdgeStyle, type RoadmapGroup, type RoadmapGroupRange, type RoadmapIcon, type RoadmapLegend, type RoadmapLegendEntry, type RoadmapLegendPlacement, type RoadmapLink, type RoadmapNode, type RoadmapNodeKind, type RoadmapNodeState, type RoadmapOverlap, type RoadmapPlacement, type RoadmapStateOverlay, type RoadmapTone, ScrollArea, type ScrollAreaScrollbars, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SeparatorWithLabel, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SonnerToaster, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Toast, ToastAction, type ToastActionElement, ToastClose, type ToastComponentProps, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatar, type UserAvatarProps, type UserInfo, UserMenu, type UserMenuItem, type UserMenuProps, avatarMemberColor, badgeVariants, barGridColumn, buttonVariants, clampPct, columnIndex, columnsCovered, columnsUsed, filterPublishableAccounts, firstFreeRow, getInitials, gridColumnFor, groupColumnRuns, groupRanges, iconButtonVariants, isAllowedOrigin, kbdVariants, labelVariants, maxRowOf, memberHueIndex, memberHueVar, navigationMenuTriggerStyle, nodesByRow, parseRoadmapDocument, parseRoadmapStateOverlay, parseTags, placeNodes, resolveEdgeArrow, resolveEdgeRoute, resolveEdgeStyle, resolveGroupColumns, resolveGroupTone, resolveLegendPlacement, resolveNameColWidth, resolveNodeSpan, resolveNodeState, resolveNodeTone, resolveWeekCount, resolveWeekLabels, roadmapActionSchema, roadmapDocumentSchema, roadmapEdgeSchema, roadmapGroupSchema, roadmapIconSchema, roadmapLegendEntrySchema, roadmapLegendSchema, roadmapLinkSchema, roadmapNodeSchema, roadmapNodeStateSchema, roadmapStateOverlaySchema, roadmapStateSchema, rowsOf, safeParseRoadmapDocument, safeParseRoadmapStateOverlay, stageProgress, toggleVariants, useFormField, useSidebar, validateNoOverlap, validatePublishForm };
|