@blaaiz/docs-core 0.5.0 → 0.6.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.
Files changed (43) hide show
  1. package/dist/{chunk-ZWDLAW5M.js → chunk-2GUUVNTP.js} +222 -28
  2. package/dist/chunk-2GUUVNTP.js.map +1 -0
  3. package/dist/{chunk-ZKOOKLZ3.js → chunk-6H6OB7YP.js} +17 -2
  4. package/dist/chunk-6H6OB7YP.js.map +1 -0
  5. package/dist/generator.cjs +161 -18
  6. package/dist/generator.cjs.map +1 -1
  7. package/dist/generator.d.cts +24 -0
  8. package/dist/generator.d.ts +24 -0
  9. package/dist/generator.js +140 -13
  10. package/dist/generator.js.map +1 -1
  11. package/dist/index.cjs +224 -25
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +249 -4
  14. package/dist/index.d.ts +249 -4
  15. package/dist/index.js +1 -1
  16. package/dist/{navigation-CGqFIPlP.d.cts → navigation-DvgyWSZ4.d.cts} +22 -1
  17. package/dist/{navigation-CGqFIPlP.d.ts → navigation-DvgyWSZ4.d.ts} +22 -1
  18. package/dist/ui/api-try-it.cjs +15 -0
  19. package/dist/ui/api-try-it.cjs.map +1 -1
  20. package/dist/ui/api-try-it.js +1 -1
  21. package/dist/ui/ask-ai.cjs +26 -6
  22. package/dist/ui/ask-ai.cjs.map +1 -1
  23. package/dist/ui/ask-ai.d.cts +6 -1
  24. package/dist/ui/ask-ai.d.ts +6 -1
  25. package/dist/ui/ask-ai.js +26 -6
  26. package/dist/ui/ask-ai.js.map +1 -1
  27. package/dist/ui/copy-page.cjs +15 -0
  28. package/dist/ui/copy-page.cjs.map +1 -1
  29. package/dist/ui/copy-page.js +1 -1
  30. package/dist/ui.cjs +77 -6
  31. package/dist/ui.cjs.map +1 -1
  32. package/dist/ui.d.cts +99 -8
  33. package/dist/ui.d.ts +99 -8
  34. package/dist/ui.js +62 -8
  35. package/dist/ui.js.map +1 -1
  36. package/package.json +1 -1
  37. package/skills/SKILL.md +68 -27
  38. package/styles/api-reference.css +45 -2
  39. package/styles/ask-ai.css +28 -0
  40. package/styles/docs.css +96 -1
  41. package/styles/home.css +34 -1
  42. package/dist/chunk-ZKOOKLZ3.js.map +0 -1
  43. package/dist/chunk-ZWDLAW5M.js.map +0 -1
package/styles/docs.css CHANGED
@@ -127,12 +127,17 @@ button:has(kbd) {
127
127
  position: absolute;
128
128
  inset: 0 0 auto 0;
129
129
  height: 2.75rem;
130
- background: color-mix(in oklab, var(--color-fd-card) 88%, black);
130
+ background: color-mix(in oklab, var(--color-fd-card) 94%, black);
131
131
  border-bottom: 1px solid var(--color-fd-border);
132
132
  border-top-left-radius: inherit;
133
133
  border-top-right-radius: inherit;
134
134
  }
135
135
 
136
+ /* Dark cards are already near black; the strip needs a deeper mix to read. */
137
+ .dark #nd-page figure.shiki::before {
138
+ background: color-mix(in oklab, var(--color-fd-card) 88%, black);
139
+ }
140
+
136
141
  #nd-page figure.shiki::after {
137
142
  content: '';
138
143
  position: absolute;
@@ -273,3 +278,93 @@ body {
273
278
  width: 15px;
274
279
  height: 15px;
275
280
  }
281
+
282
+ /* --- The top bar's action cluster and second row ------------------------- */
283
+
284
+ /* Actions at the end of row one: extras, the secondary link, sign-out, and
285
+ the primary button. */
286
+ .nav-actions {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 1.25rem;
290
+ }
291
+
292
+ .nav-actions__secondary,
293
+ .nav-actions__signout {
294
+ border: none;
295
+ background: none;
296
+ padding: 0;
297
+ font-size: 0.875rem;
298
+ font-weight: 500;
299
+ color: var(--color-fd-muted-foreground);
300
+ cursor: pointer;
301
+ text-decoration: none;
302
+ transition: color 0.15s;
303
+ white-space: nowrap;
304
+ }
305
+
306
+ .nav-actions__secondary:hover,
307
+ .nav-actions__signout:hover {
308
+ color: var(--color-fd-foreground);
309
+ }
310
+
311
+ .nav-actions__primary {
312
+ display: inline-flex;
313
+ align-items: center;
314
+ padding: 0.4375rem 1rem;
315
+ border-radius: 999px;
316
+ background: var(--color-fd-primary);
317
+ color: #fff;
318
+ font-size: 0.875rem;
319
+ font-weight: 600;
320
+ text-decoration: none;
321
+ white-space: nowrap;
322
+ transition: opacity 0.15s;
323
+ }
324
+
325
+ .nav-actions__primary:hover {
326
+ opacity: 0.9;
327
+ }
328
+
329
+ /* Dark-mode primaries run light, so the button's text runs dark. */
330
+ .dark .nav-actions__primary {
331
+ color: #000;
332
+ }
333
+
334
+ /* The second row: the section links, under the utility row. */
335
+ .site-subnav {
336
+ display: flex;
337
+ align-items: center;
338
+ gap: 0.25rem;
339
+ height: 2.875rem;
340
+ padding-inline: 1rem;
341
+ border-bottom: 1px solid color-mix(in oklab, var(--color-fd-border) 60%, transparent);
342
+ background: color-mix(in oklab, var(--color-fd-background) 80%, transparent);
343
+ backdrop-filter: blur(16px);
344
+ overflow-x: auto;
345
+ scrollbar-width: none;
346
+ }
347
+
348
+ .site-subnav > * {
349
+ flex-shrink: 0;
350
+ }
351
+
352
+ /* The sidebar's section headings: the separators the headings sidebar style
353
+ renders for top-level groups. fumadocs marks them as bare <p> rows. */
354
+ #nd-sidebar [data-radix-scroll-area-viewport] p {
355
+ font-weight: 600;
356
+ }
357
+
358
+ /* The docs header draws its own rules under both rows; run them as faint as
359
+ the landing's, so the chrome doesn't outweigh the content. */
360
+ #nd-subnav [data-header-body],
361
+ #nd-subnav [data-header-tabs] {
362
+ border-color: color-mix(in oklab, var(--color-fd-border) 60%, transparent);
363
+ }
364
+
365
+ /* The navbar tabs render only the title node, so the section icon travels
366
+ inside it (docsLayoutTabs); size it like the landing's links. */
367
+ #nd-subnav [data-header-tabs] svg {
368
+ width: 15px;
369
+ height: 15px;
370
+ }
package/styles/home.css CHANGED
@@ -1,3 +1,32 @@
1
+ /* The landing's top bar stands as tall as the docs pages' rendered header
2
+ (72px), so the two layouts read as one site. #nd-nav exists only in the
3
+ home layout; the docs layout's header is #nd-subnav. */
4
+ #nd-nav {
5
+ height: 4.5rem;
6
+ }
7
+
8
+ #nd-nav nav {
9
+ height: 4.5rem;
10
+ }
11
+
12
+ /* The landing header's rule, as faint as the subnav's. */
13
+ #nd-nav > div {
14
+ border-color: color-mix(in oklab, var(--color-fd-border) 60%, transparent);
15
+ }
16
+
17
+ /* On the landing the section links render as a sticky row under the top bar
18
+ (the home layout's header slot replaces its navbar rather than wrapping it,
19
+ so the row lives outside the header there). The row is full-bleed while the
20
+ header centres its content to --fd-layout-width, so the padding re-derives
21
+ that inset; the extra 0.625rem is the first link's own padding, backed out
22
+ so its icon sits flush with the logo above. */
23
+ .site-subnav--home {
24
+ position: sticky;
25
+ top: 4.5rem;
26
+ z-index: 30;
27
+ padding-inline: max(0.375rem, calc((100% - var(--fd-layout-width, 100%)) / 2 + 0.375rem));
28
+ }
29
+
1
30
  /*
2
31
  * @blaaiz/docs-core — the landing-page layout.
3
32
  *
@@ -37,7 +66,11 @@
37
66
  */
38
67
 
39
68
  .home-page {
40
- --home-gutter: clamp(1.25rem, 4vw, 3.5rem);
69
+ /* The gutter re-derives the header's centred inset (--fd-layout-width plus
70
+ its 1rem padding), so every section's content column starts where the
71
+ logo does. Sections stay full-bleed: the inset is padding, so backgrounds
72
+ and borders still run edge to edge. */
73
+ --home-gutter: max(1rem, calc((100% - var(--fd-layout-width, 100%)) / 2 + 1rem));
41
74
  --home-mono: var(--font-code, var(--font-mono, ui-monospace, 'SF Mono', Menlo, monospace));
42
75
  width: 100%;
43
76
  padding-bottom: 5rem;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/icons.tsx"],"names":[],"mappings":"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","file":"chunk-ZKOOKLZ3.js","sourcesContent":["import type { ReactNode } from 'react';\n\n/**\n * The framework's inline-SVG glyph set — internal.\n *\n * Five UI modules drew their own icons, and four glyphs were drawn twice: the\n * house on the error screen and in the sidebar icon map, the padlock on the\n * sign-in and the `403` screen, the info circle on both of those, the key in\n * both places again, and the check mark in the copy-page button and the\n * playground. One drawing per glyph now lives here.\n *\n * Nothing is exported from the package: the modules below compose these paths,\n * and `docsIcon` remains the only public icon surface. Zero dependencies — the\n * paths are Lucide-shaped, on the same 24×24 grid, so any glyph works at any\n * size.\n *\n * @packageDocumentation\n */\n\n/**\n * The glyph paths, keyed by name. Each value is the *inside* of an `<svg>`, so\n * a caller decides the size, the stroke, and the class.\n */\nconst GLYPHS = {\n house: (\n <>\n <path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </>\n ),\n book: <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20\" />,\n code: (\n <>\n <path d=\"m16 18 6-6-6-6\" />\n <path d=\"m8 6-6 6 6 6\" />\n </>\n ),\n rocket: (\n <>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91 0z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </>\n ),\n terminal: (\n <>\n <path d=\"m4 17 6-6-6-6\" />\n <path d=\"M12 19h8\" />\n </>\n ),\n wallet: (\n <>\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\" />\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\n </>\n ),\n key: (\n <>\n <path d=\"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\" />\n <path d=\"m21 2-9.6 9.6\" />\n <circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />\n </>\n ),\n webhook: (\n <>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </>\n ),\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </>\n ),\n mail: (\n <>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </>\n ),\n user: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 21a8 8 0 0 1 16 0\" />\n </>\n ),\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n /** A circled `i` — an informational note, and the generic error state. */\n info: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4M12 16h.01\" strokeLinecap=\"round\" />\n </>\n ),\n /** A warning triangle — a caution, and the `500` screen. */\n alert: (\n <>\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <path d=\"M12 9v4M12 17h.01\" strokeLinecap=\"round\" />\n </>\n ),\n /** A light bulb — a tip. */\n bulb: (\n <path d=\"M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V17h6v-.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2Z\" />\n ),\n /** A circle with a cross — the `404` screen. */\n crossCircle: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m14.31 8-1.31 2.4M9.69 8l4.62 8M14.31 16 9.69 8\" strokeLinecap=\"round\" />\n </>\n ),\n /** Struck-through signal bars — the offline screen. */\n offline: (\n <>\n <path d=\"M5 12.55a11 11 0 0 1 14 0M8.5 16.11a6 6 0 0 1 7 0M12 20h.01\" strokeLinecap=\"round\" />\n <path d=\"m2 2 20 20\" strokeLinecap=\"round\" />\n </>\n ),\n copy: (\n <path d=\"M9 9h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2ZM5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n ),\n check: <path d=\"M20 6 9 17l-5-5\" />,\n chevronDown: <path d=\"m6 9 6 6 6-6\" />,\n /** Stacked chevrons — a value this control switches between. */\n chevronUpDown: <path d=\"m7 15 5 5 5-5M7 9l5-5 5 5\" />,\n /** An open arc — one turn of a loading spinner. */\n spinner: <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" strokeLinecap=\"round\" />,\n markdown: (\n <>\n <rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M6 15V9l3 3 3-3v6M17 9v4m0 0 2-2m-2 2-2-2\" />\n </>\n ),\n} satisfies Record<string, ReactNode>;\n\n/** A glyph in {@link GLYPHS}. */\nexport type GlyphName = keyof typeof GLYPHS;\n\n/**\n * How one icon is drawn. Every field is optional, and the defaults match the\n * house style: 24×24 grid, current colour, hidden from assistive technology.\n */\nexport interface IconOptions {\n /**\n * React key for the `<svg>`. Set it when a host may place the icon in an\n * array of children — fumadocs renders a sidebar link as `[icon, text]`, and\n * an unkeyed element there raises React's \"unique key\" warning in the\n * consuming site's console.\n */\n readonly key?: string;\n /** Pixel size for `width` and `height`. Omit to let CSS size the icon. */\n readonly size?: number;\n /** Stroke width. Default 2. */\n readonly strokeWidth?: number;\n /** Round the stroke's ends and joins. Default `false`. */\n readonly rounded?: boolean;\n /** Class for the `<svg>`, e.g. a spin animation. */\n readonly className?: string;\n}\n\n/**\n * Draw a stroked glyph.\n *\n * @param name - the glyph\n * @param options - size, stroke, and class\n * @returns the `<svg>` element\n */\nexport function strokeIcon(name: GlyphName, options: IconOptions = {}): ReactNode {\n return (\n <svg\n key={options.key}\n {...(options.className === undefined ? {} : { className: options.className })}\n {...(options.size === undefined ? {} : { width: options.size, height: options.size })}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={options.strokeWidth ?? 2}\n {...(options.rounded ? { strokeLinecap: 'round', strokeLinejoin: 'round' } : {})}\n aria-hidden=\"true\"\n >\n {GLYPHS[name]}\n </svg>\n );\n}\n\n/**\n * Draw a filled glyph. Used by the solid play triangle, where a stroke would\n * read as an outline.\n *\n * @param path - the path data\n * @param options - size and class\n * @returns the `<svg>` element\n */\nexport function filledIcon(path: string, options: IconOptions = {}): ReactNode {\n return (\n <svg\n key={options.key}\n {...(options.className === undefined ? {} : { className: options.className })}\n {...(options.size === undefined ? {} : { width: options.size, height: options.size })}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n}\n\n/** A solid right-pointing triangle: run this request. */\nexport const PLAY_PATH = 'M8 5v14l11-7z';\n"]}