@cloudgrid-io/ui 0.40.0 → 0.41.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 (98) hide show
  1. package/dist/blocks/action-link.d.ts +31 -0
  2. package/dist/blocks/action-link.d.ts.map +1 -0
  3. package/dist/blocks/action-link.js +40 -0
  4. package/dist/blocks/action-link.js.map +1 -0
  5. package/dist/blocks/activity-row.d.ts +42 -0
  6. package/dist/blocks/activity-row.d.ts.map +1 -0
  7. package/dist/blocks/activity-row.js +37 -0
  8. package/dist/blocks/activity-row.js.map +1 -0
  9. package/dist/blocks/add-tile.d.ts +31 -0
  10. package/dist/blocks/add-tile.d.ts.map +1 -0
  11. package/dist/blocks/add-tile.js +29 -0
  12. package/dist/blocks/add-tile.js.map +1 -0
  13. package/dist/blocks/avatar-stack.d.ts +40 -0
  14. package/dist/blocks/avatar-stack.d.ts.map +1 -0
  15. package/dist/blocks/avatar-stack.js +41 -0
  16. package/dist/blocks/avatar-stack.js.map +1 -0
  17. package/dist/blocks/avatar.d.ts +31 -5
  18. package/dist/blocks/avatar.d.ts.map +1 -1
  19. package/dist/blocks/avatar.js +57 -9
  20. package/dist/blocks/avatar.js.map +1 -1
  21. package/dist/blocks/copy-button.d.ts +59 -0
  22. package/dist/blocks/copy-button.d.ts.map +1 -0
  23. package/dist/blocks/copy-button.js +76 -0
  24. package/dist/blocks/copy-button.js.map +1 -0
  25. package/dist/blocks/dashed-banner.d.ts +36 -0
  26. package/dist/blocks/dashed-banner.d.ts.map +1 -0
  27. package/dist/blocks/dashed-banner.js +31 -0
  28. package/dist/blocks/dashed-banner.js.map +1 -0
  29. package/dist/blocks/dashed-line.d.ts +44 -0
  30. package/dist/blocks/dashed-line.d.ts.map +1 -0
  31. package/dist/blocks/dashed-line.js +46 -0
  32. package/dist/blocks/dashed-line.js.map +1 -0
  33. package/dist/blocks/empty-creations.d.ts +18 -1
  34. package/dist/blocks/empty-creations.d.ts.map +1 -1
  35. package/dist/blocks/empty-creations.js +25 -9
  36. package/dist/blocks/empty-creations.js.map +1 -1
  37. package/dist/blocks/entity-card.d.ts +37 -2
  38. package/dist/blocks/entity-card.d.ts.map +1 -1
  39. package/dist/blocks/entity-card.js +70 -7
  40. package/dist/blocks/entity-card.js.map +1 -1
  41. package/dist/blocks/filter-tabs.d.ts +45 -0
  42. package/dist/blocks/filter-tabs.d.ts.map +1 -0
  43. package/dist/blocks/filter-tabs.js +48 -0
  44. package/dist/blocks/filter-tabs.js.map +1 -0
  45. package/dist/blocks/header-menu.d.ts +54 -0
  46. package/dist/blocks/header-menu.d.ts.map +1 -0
  47. package/dist/blocks/header-menu.js +63 -0
  48. package/dist/blocks/header-menu.js.map +1 -0
  49. package/dist/blocks/header-pill.d.ts +41 -0
  50. package/dist/blocks/header-pill.d.ts.map +1 -0
  51. package/dist/blocks/header-pill.js +67 -0
  52. package/dist/blocks/header-pill.js.map +1 -0
  53. package/dist/blocks/icons.d.ts +19 -2
  54. package/dist/blocks/icons.d.ts.map +1 -1
  55. package/dist/blocks/icons.js +22 -2
  56. package/dist/blocks/icons.js.map +1 -1
  57. package/dist/blocks/menu-trigger.d.ts +35 -0
  58. package/dist/blocks/menu-trigger.d.ts.map +1 -0
  59. package/dist/blocks/menu-trigger.js +24 -0
  60. package/dist/blocks/menu-trigger.js.map +1 -0
  61. package/dist/blocks/meter.d.ts +9 -1
  62. package/dist/blocks/meter.d.ts.map +1 -1
  63. package/dist/blocks/meter.js +6 -2
  64. package/dist/blocks/meter.js.map +1 -1
  65. package/dist/blocks/phosphor-marks.d.ts +8 -2
  66. package/dist/blocks/phosphor-marks.d.ts.map +1 -1
  67. package/dist/blocks/phosphor-marks.js +12 -3
  68. package/dist/blocks/phosphor-marks.js.map +1 -1
  69. package/dist/blocks/ranked-list.d.ts +15 -1
  70. package/dist/blocks/ranked-list.d.ts.map +1 -1
  71. package/dist/blocks/ranked-list.js +18 -5
  72. package/dist/blocks/ranked-list.js.map +1 -1
  73. package/dist/blocks/scroll-rail.d.ts +15 -0
  74. package/dist/blocks/scroll-rail.d.ts.map +1 -0
  75. package/dist/blocks/scroll-rail.js +134 -0
  76. package/dist/blocks/scroll-rail.js.map +1 -0
  77. package/dist/blocks/section-heading.d.ts +21 -0
  78. package/dist/blocks/section-heading.d.ts.map +1 -0
  79. package/dist/blocks/section-heading.js +18 -0
  80. package/dist/blocks/section-heading.js.map +1 -0
  81. package/dist/blocks/stat-tile.d.ts +21 -1
  82. package/dist/blocks/stat-tile.d.ts.map +1 -1
  83. package/dist/blocks/stat-tile.js +11 -6
  84. package/dist/blocks/stat-tile.js.map +1 -1
  85. package/dist/index.d.ts +13 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +13 -0
  88. package/dist/index.js.map +1 -1
  89. package/dist/theme.css +2 -0
  90. package/dist/tokens/base.json +42 -2
  91. package/dist/tokens.css +18 -2
  92. package/dist/tokens.json +6 -2
  93. package/dist/ui/button.d.ts +1 -1
  94. package/dist/ui/button.d.ts.map +1 -1
  95. package/dist/ui/button.js +10 -0
  96. package/dist/ui/button.js.map +1 -1
  97. package/dist/ui/drawer.d.ts +1 -1
  98. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { cn } from "../lib/cloudgrid-cn.js";
4
4
  import { Avatar } from "./avatar.js";
@@ -10,10 +10,22 @@ import { Skeleton } from "../ui/skeleton.js";
10
10
  const ANONYMOUS_LABEL = "Anonymous visitors";
11
11
  /** The frames' avatar size. */
12
12
  const AVATAR_SIZE = 32;
13
- function RankedRow({ avatar, name, count, max, formatCount, anonymous, }) {
14
- return (_jsxs("li", { "data-slot": "ranked-list-row", "data-anonymous": anonymous ? "" : undefined, className: "flex min-w-0 items-center gap-4", children: [avatar, _jsxs("div", { className: "grid min-w-0 flex-1 gap-2", children: [_jsxs("div", { className: "flex min-w-0 items-baseline justify-between gap-3 text-body-sm leading-none", children: [_jsx("span", { "data-slot": "ranked-list-name", className: "min-w-0 truncate font-medium", children: name }), _jsx("span", { "data-slot": "ranked-list-count", className: "shrink-0 tabular-nums", children: formatCount(count) })] }), _jsx(Meter, { "aria-hidden": "true", size: "sm", value: count, max: max })] })] }));
13
+ function RankedRow({ avatar, name, count, max, formatCount, anonymous, bottom, href, linkComponent, tone, }) {
14
+ const content = (_jsxs(_Fragment, { children: [avatar, _jsxs("div", { className: "grid min-w-0 flex-1 gap-2", children: [_jsxs("div", { className: "flex min-w-0 items-baseline justify-between gap-3 text-body-sm leading-none", children: [_jsx("span", { "data-slot": "ranked-list-name", className: "min-w-0 truncate font-medium", children: name }), _jsx("span", { "data-slot": "ranked-list-count", className: "shrink-0 tabular-nums", children: formatCount(count) })] }), _jsx(Meter, { "aria-hidden": "true", size: "sm", tone: tone, value: count, max: max })] })] }));
15
+ const align = bottom ? "items-end" : "items-center";
16
+ if (href === undefined) {
17
+ return (_jsx("li", { "data-slot": "ranked-list-row", "data-anonymous": anonymous ? "" : undefined, className: bottom ? "flex min-w-0 items-end gap-4" : "flex min-w-0 items-center gap-4", children: content }));
18
+ }
19
+ // A row that opens something (#382): the whole row's content is the link,
20
+ // inside the list item, so the list keeps its list semantics.
21
+ const Link = linkComponent ?? "a";
22
+ return (_jsx("li", { "data-slot": "ranked-list-row", className: cn("flex min-w-0", align), children: _jsx(Link, { href: href, "data-slot": "ranked-list-link", className: cn("flex min-w-0 flex-1 gap-4 rounded-xs text-ink no-underline outline-none hover:bg-(--cg-hover) focus-visible:ring-3 focus-visible:ring-ring", align), children: content }) }));
23
+ }
24
+ /** A creation's 64x37 thumbnail at radius 8 (#382, Figma 11323:8966). */
25
+ function RankedThumbnail({ src }) {
26
+ return (_jsx("span", { "data-slot": "ranked-list-thumbnail", className: "block h-[37px] w-16 shrink-0 overflow-hidden rounded-xs bg-raised", children: _jsx("img", { src: src, alt: "", decoding: "async", draggable: false, className: "block size-full object-cover" }) }));
15
27
  }
16
- function RankedList({ items, anonymous, anonymousLabel = ANONYMOUS_LABEL, max, formatCount = formatChartNumber, emptyLabel = "Nothing in this window.", pending = false, pendingRows = 4, className, ...props }) {
28
+ function RankedList({ items, anonymous, anonymousLabel = ANONYMOUS_LABEL, max, formatCount = formatChartNumber, emptyLabel = "Nothing in this window.", pending = false, pendingRows = 4, tone, linkComponent, className, ...props }) {
17
29
  if (pending) {
18
30
  return (_jsxs("div", { "data-slot": "ranked-list", "data-pending": "", "aria-busy": "true", className: cn("grid gap-5", className), children: [_jsx("span", { className: "sr-only", children: CHART_LOADING_TEXT }), Array.from({ length: pendingRows }, (_, i) => (_jsxs("div", { "aria-hidden": "true", className: "flex items-center gap-4", children: [_jsx(Skeleton, { className: "size-8 shrink-0 rounded-pill" }), _jsxs("div", { className: "grid flex-1 gap-2", children: [_jsx(Skeleton, { className: "h-3.5 w-1/3" }), _jsx(Skeleton, { className: "h-1 w-full" })] })] }, i)))] }));
19
31
  }
@@ -26,7 +38,8 @@ function RankedList({ items, anonymous, anonymousLabel = ANONYMOUS_LABEL, max, f
26
38
  const scale = max && max > 0 ? max : Math.max(1, ...counts, anonymousCount);
27
39
  return (_jsxs("ol", { "data-slot": "ranked-list",
28
40
  // text-ink on the root, because text does not flip by inheritance (rule 3).
29
- className: cn("m-0 grid list-none gap-5 p-0 text-ink", className), ...props, children: [items.map((it, i) => (_jsx(RankedRow, { avatar: _jsx(Avatar, { name: it.name, seed: it.id, src: it.avatarSrc, size: AVATAR_SIZE }), name: it.name, count: counts[i], max: scale, formatCount: formatCount }, it.id ?? `${it.name}-${i}`))), hasAnonymous ? (_jsx(RankedRow, { anonymous: true, avatar: _jsx("span", { "data-slot": "ranked-list-anonymous-avatar", "aria-hidden": "true", className: "inline-flex size-8 shrink-0 items-center justify-center rounded-pill bg-hairline text-faint-strong", children: _jsx(PersonIcon, { className: "size-4" }) }), name: anonymousLabel, count: anonymousCount, max: scale, formatCount: formatCount })) : null] }));
41
+ className: cn("m-0 grid list-none gap-5 p-0 text-ink", className), ...props, children: [items.map((it, i) => (_jsx(RankedRow, { avatar: it.leading ??
42
+ (it.thumbnailSrc !== undefined ? (_jsx(RankedThumbnail, { src: it.thumbnailSrc })) : (_jsx(Avatar, { name: it.name, seed: it.id, src: it.avatarSrc, size: AVATAR_SIZE }))), bottom: it.leading !== undefined || it.thumbnailSrc !== undefined, href: it.href, linkComponent: linkComponent, tone: tone, name: it.name, count: counts[i], max: scale, formatCount: formatCount }, it.id ?? `${it.name}-${i}`))), hasAnonymous ? (_jsx(RankedRow, { anonymous: true, avatar: _jsx("span", { "data-slot": "ranked-list-anonymous-avatar", "aria-hidden": "true", className: "inline-flex size-8 shrink-0 items-center justify-center rounded-pill bg-hairline text-faint-strong", children: _jsx(PersonIcon, { className: "size-4" }) }), tone: tone, name: anonymousLabel, count: anonymousCount, max: scale, formatCount: formatCount })) : null] }));
30
43
  }
31
44
  export { RankedList };
32
45
  //# sourceMappingURL=ranked-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ranked-list.js","sourceRoot":"","sources":["../../src/blocks/ranked-list.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ranked-list.js","sourceRoot":"","sources":["../../src/blocks/ranked-list.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ declare function ScrollRail({ children, label, gap, previousLabel, nextLabel, className, style, ...props }: Omit<React.ComponentProps<"div">, "children"> & {
3
+ /** Each child becomes one list item. */
4
+ children: React.ReactNode;
5
+ /** Names the scroll region, e.g. "On the Grid". */
6
+ label: string;
7
+ /** Pixels between items. Default 20. */
8
+ gap?: number;
9
+ /** The previous button's accessible name. */
10
+ previousLabel?: string;
11
+ /** The next button's accessible name. */
12
+ nextLabel?: string;
13
+ }): React.JSX.Element;
14
+ export { ScrollRail };
15
+ //# sourceMappingURL=scroll-rail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-rail.d.ts","sourceRoot":"","sources":["../../src/blocks/scroll-rail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAwD9B,iBAAS,UAAU,CAAC,EAClB,QAAQ,EACR,KAAK,EACL,GAAQ,EACR,aAA6B,EAC7B,SAA4B,EAC5B,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG;IACjD,wCAAwC;IACxC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,qBA8IA;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -0,0 +1,134 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../lib/cloudgrid-cn.js";
5
+ import { RailNextIcon, RailPreviousIcon } from "./icons.js";
6
+ /**
7
+ * A horizontal row that scrolls: Home's My Creations and On the Grid rails
8
+ * (#382, spec §4.4 and §4.8, Figma scroll button `11355:10564`).
9
+ *
10
+ * ## What it draws
11
+ *
12
+ * Any nodes, one list item each, `gap` apart (default 20, the frames'), in a
13
+ * viewport that scrolls sideways and snaps each item's start edge. At either
14
+ * side that has more, a 64px fade into the rail's fade colour (the page colour
15
+ * by default, spec §8.6: the frames fade into pure white on a page-coloured
16
+ * page) and a 48px square button (white, radius 16, a 1px `--cg-tertiary-dark`
17
+ * line, a 20px arrow in the same teal), at the edge and vertically centred. At
18
+ * an end the button is disabled and invisible and its fade is gone, so a rail
19
+ * that fits draws neither.
20
+ *
21
+ * ## Measured, so the server draws no controls
22
+ *
23
+ * Which side has more is a measurement, and the server has no layout. The
24
+ * first paint shows the row alone; the browser measures on mount, on scroll and
25
+ * whenever the viewport or the list changes size (a `ResizeObserver`), so a
26
+ * window resized from overflowing to fitting drops its controls.
27
+ *
28
+ * ## A press
29
+ *
30
+ * Moves by the viewport's width less one fade, so the item that was half under
31
+ * the fade becomes the first one shown; the snap then settles it on its edge.
32
+ * Smooth, or instant under `prefers-reduced-motion: reduce`.
33
+ *
34
+ * ## Keyboard and touch
35
+ *
36
+ * The viewport is a named, focusable region, so the arrow keys scroll it even
37
+ * when the items hold nothing focusable; a focused card inside it is scrolled
38
+ * into view by the browser. A button that reaches its end hands focus to the
39
+ * other one, so pressing Enter through the row never drops focus to the page. On a coarse pointer the buttons are not drawn
40
+ * (`pointer-coarse:hidden`): the row scrolls under a finger, and the fades stay
41
+ * to say there is more.
42
+ *
43
+ * The line and the arrow are `--cg-tertiary-dark` (ui#381), the frames'
44
+ * Tertiary Dark.
45
+ */
46
+ /** The fade's width, and how much of the viewport a press does not travel. */
47
+ const FADE = 64;
48
+ /** How long a press counts for the focus hand-off: longer than a smooth scroll. */
49
+ const PRESS_WINDOW = 1000;
50
+ const useIsoLayoutEffect = typeof document === "undefined" ? React.useEffect : React.useLayoutEffect;
51
+ function ScrollRail({ children, label, gap = 20, previousLabel = "Scroll back", nextLabel = "Scroll forward", className, style, ...props }) {
52
+ const id = React.useId();
53
+ const viewport = React.useRef(null);
54
+ const list = React.useRef(null);
55
+ const startButton = React.useRef(null);
56
+ const endButton = React.useRef(null);
57
+ // Both "at the end" until measured: the server draws no controls.
58
+ const [edges, setEdges] = React.useState({ start: true, end: true });
59
+ const measure = React.useCallback(() => {
60
+ const el = viewport.current;
61
+ if (!el)
62
+ return;
63
+ const start = el.scrollLeft <= 1;
64
+ const end = el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;
65
+ setEdges((prev) => (prev.start === start && prev.end === end ? prev : { start, end }));
66
+ }, []);
67
+ useIsoLayoutEffect(() => {
68
+ const el = viewport.current;
69
+ if (!el)
70
+ return;
71
+ measure();
72
+ el.addEventListener("scroll", measure, { passive: true });
73
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
74
+ observer?.observe(el);
75
+ if (list.current)
76
+ observer?.observe(list.current);
77
+ return () => {
78
+ el.removeEventListener("scroll", measure);
79
+ observer?.disconnect();
80
+ };
81
+ }, [measure]);
82
+ // A button disables itself at its end, and a disabled button loses focus to
83
+ // the page. When that happens to the focused one, hand focus to the other
84
+ // button, or to the region when the row fits, so a keyboard reader stays here.
85
+ //
86
+ // The browser has already moved focus to the body by the time this runs, so
87
+ // what is tracked is the button last pressed while it held focus. A press
88
+ // only counts for the scroll it starts: it is forgotten after PRESS_WINDOW,
89
+ // so reaching the end later by wheel or trackpad never pulls focus in.
90
+ const pressed = React.useRef(null);
91
+ const pressedTimer = React.useRef(undefined);
92
+ React.useEffect(() => () => clearTimeout(pressedTimer.current), []);
93
+ React.useEffect(() => {
94
+ const side = pressed.current;
95
+ if (!side || !edges[side])
96
+ return;
97
+ pressed.current = null;
98
+ const active = document.activeElement;
99
+ const own = side === "start" ? startButton.current : endButton.current;
100
+ if (active !== own && active !== document.body && active !== null)
101
+ return;
102
+ const other = side === "start" ? (edges.end ? null : endButton.current) : edges.start ? null : startButton.current;
103
+ (other ?? viewport.current)?.focus();
104
+ }, [edges]);
105
+ const scroll = (direction) => {
106
+ const el = viewport.current;
107
+ if (!el)
108
+ return;
109
+ const reduce = typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
110
+ el.scrollBy({ left: direction * Math.max(el.clientWidth - FADE, el.clientWidth / 2), behavior: reduce ? "auto" : "smooth" });
111
+ };
112
+ const items = React.Children.toArray(children);
113
+ const sideButton = (side) => {
114
+ const atEnd = side === "start" ? edges.start : edges.end;
115
+ const Icon = side === "start" ? RailPreviousIcon : RailNextIcon;
116
+ return (_jsx("button", { ref: side === "start" ? startButton : endButton, type: "button", "data-slot": "scroll-rail-button", "data-side": side, "aria-label": side === "start" ? previousLabel : nextLabel, "aria-controls": id, disabled: atEnd, onClick: (event) => {
117
+ pressed.current = event.currentTarget === document.activeElement ? side : null;
118
+ clearTimeout(pressedTimer.current);
119
+ pressedTimer.current = setTimeout(() => {
120
+ pressed.current = null;
121
+ }, PRESS_WINDOW);
122
+ scroll(side === "start" ? -1 : 1);
123
+ }, className: cn("absolute top-1/2 z-10 inline-flex size-12 -translate-y-1/2 items-center justify-center rounded-xl border border-(--cg-tertiary-dark) bg-card text-(--cg-tertiary-dark) outline-none", "hover:[background-image:linear-gradient(var(--cg-hover),var(--cg-hover))] focus-visible:ring-3 focus-visible:ring-ring", "pointer-coarse:hidden", side === "start" ? "left-0" : "right-0", atEnd && "invisible"), children: _jsx(Icon, { className: "size-5" }) }));
124
+ };
125
+ const sideFade = (side) => {
126
+ const atEnd = side === "start" ? edges.start : edges.end;
127
+ return (_jsx("span", { "data-slot": "scroll-rail-fade", "data-side": side, "aria-hidden": "true", className: cn("pointer-events-none absolute inset-y-0 z-[1] w-16 from-(--scroll-rail-fade) to-transparent", side === "start" ? "left-0 bg-linear-to-r" : "right-0 bg-linear-to-l", atEnd && "hidden") }));
128
+ };
129
+ return (_jsxs("div", { "data-slot": "scroll-rail", className: cn("relative min-w-0", className), style: { "--scroll-rail-fade": "var(--cg-surface-page)", ...style }, ...props, children: [_jsx("div", { ref: viewport, id: id, role: "region", "aria-label": label,
130
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- a scroll region must be reachable by keyboard even when its items hold nothing focusable (WCAG 2.1.1; axe's scrollable-region-focusable)
131
+ tabIndex: 0, "data-slot": "scroll-rail-viewport", className: "snap-x snap-mandatory overflow-x-auto overscroll-x-contain outline-none [scrollbar-width:none] focus-visible:ring-3 focus-visible:ring-ring [&::-webkit-scrollbar]:hidden", children: _jsx("ul", { ref: list, "data-slot": "scroll-rail-list", className: "m-0 flex w-max list-none p-0", style: { gap }, children: items.map((child, i) => (_jsx("li", { "data-slot": "scroll-rail-item", className: "shrink-0 snap-start", children: child }, React.isValidElement(child) && child.key != null ? child.key : i))) }) }), sideFade("start"), sideFade("end"), sideButton("start"), sideButton("end")] }));
132
+ }
133
+ export { ScrollRail };
134
+ //# sourceMappingURL=scroll-rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-rail.js","sourceRoot":"","sources":["../../src/blocks/scroll-rail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ /**
3
+ * A section's heading row on the 2026 Home (#382, spec §4.4, §4.6 to §4.8).
4
+ *
5
+ * The title at the frames' H4 (`text-heading-lg`, 22 / 1.2, Medium) in Ink, not
6
+ * the `#000000` two of the frames paint (spec §8.3). `inline` sits 24 to its
7
+ * right: My Creations' filter tabs. `action` sits at the far end: On the Grid's
8
+ * "Explore All". The heading level is the caller's, because the page decides
9
+ * the outline.
10
+ */
11
+ declare function SectionHeading({ title, level, inline, action, className, ...props }: Omit<React.ComponentProps<"div">, "title" | "children"> & {
12
+ title: React.ReactNode;
13
+ /** The heading element. Default 2. */
14
+ level?: 2 | 3 | 4;
15
+ /** 24px after the title: the filter tabs. */
16
+ inline?: React.ReactNode;
17
+ /** At the far end: "Explore All". */
18
+ action?: React.ReactNode;
19
+ }): React.JSX.Element;
20
+ export { SectionHeading };
21
+ //# sourceMappingURL=section-heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-heading.d.ts","sourceRoot":"","sources":["../../src/blocks/section-heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B;;;;;;;;GAQG;AACH,iBAAS,cAAc,CAAC,EACtB,KAAK,EACL,KAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC3D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,sCAAsC;IACtC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,qCAAqC;IACrC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB,qBA0BA;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cloudgrid-cn.js";
4
+ /**
5
+ * A section's heading row on the 2026 Home (#382, spec §4.4, §4.6 to §4.8).
6
+ *
7
+ * The title at the frames' H4 (`text-heading-lg`, 22 / 1.2, Medium) in Ink, not
8
+ * the `#000000` two of the frames paint (spec §8.3). `inline` sits 24 to its
9
+ * right: My Creations' filter tabs. `action` sits at the far end: On the Grid's
10
+ * "Explore All". The heading level is the caller's, because the page decides
11
+ * the outline.
12
+ */
13
+ function SectionHeading({ title, level = 2, inline, action, className, ...props }) {
14
+ const Heading = `h${level}`;
15
+ return (_jsxs("div", { "data-slot": "section-heading", className: cn("flex min-w-0 items-center justify-between gap-6 text-ink", className), ...props, children: [_jsxs("div", { "data-slot": "section-heading-start", className: "flex min-w-0 items-center gap-6", children: [_jsx(Heading, { "data-slot": "section-heading-title", className: "m-0 shrink-0 text-heading-lg font-medium text-ink", children: title }), inline ? (_jsx("div", { "data-slot": "section-heading-inline", className: "min-w-0", children: inline })) : null] }), action ? (_jsx("div", { "data-slot": "section-heading-action", className: "shrink-0", children: action })) : null] }));
16
+ }
17
+ export { SectionHeading };
18
+ //# sourceMappingURL=section-heading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-heading.js","sourceRoot":"","sources":["../../src/blocks/section-heading.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAEvC;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,EACtB,KAAK,EACL,KAAK,GAAG,CAAC,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EAST;IACC,MAAM,OAAO,GAAG,IAAI,KAAK,EAAwB,CAAA;IAEjD,OAAO,CACL,4BACY,iBAAiB,EAC3B,SAAS,EAAE,EAAE,CAAC,0DAA0D,EAAE,SAAS,CAAC,KAChF,KAAK,aAET,4BAAe,uBAAuB,EAAC,SAAS,EAAC,iCAAiC,aAChF,KAAC,OAAO,iBAAW,uBAAuB,EAAC,SAAS,EAAC,mDAAmD,YACrG,KAAK,GACE,EACT,MAAM,CAAC,CAAC,CAAC,CACR,2BAAe,wBAAwB,EAAC,SAAS,EAAC,SAAS,YACxD,MAAM,GACH,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,MAAM,CAAC,CAAC,CAAC,CACR,2BAAe,wBAAwB,EAAC,SAAS,EAAC,UAAU,YACzD,MAAM,GACH,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -88,7 +88,25 @@ export type StatHintTone = "neutral" | "positive";
88
88
  type StatTileIcon = React.ComponentType<{
89
89
  className?: string;
90
90
  }>;
91
- declare function StatTile({ label, value, hint, hintTone, pending, icon: Icon, valueFirst, example, className, ...props }: Omit<React.ComponentProps<"div">, "ref" | "children"> & {
91
+ /**
92
+ * ## `tone`, the Home tile (#382, spec §4.2, Figma 4964:4905)
93
+ *
94
+ * The App page's KPI tile puts a purple mark on a violet square. The 2026 Home
95
+ * draws the same arrangement in neutrals: a slate glyph on a page-coloured
96
+ * square, the number in Manrope Medium 24 (not the display face), the card
97
+ * rounded at 12 rather than 16, and 16 by 24 of padding with the hairline drawn
98
+ * inside it, so the tile is the frame's 79 tall.
99
+ *
100
+ * `brand` is the default and is the 0.39 tile exactly. `tone` only changes a
101
+ * tile that has an `icon`: without one there is no square to retone.
102
+ *
103
+ * The label stays on `--cg-text-muted-strong`, not the frame's slate-500:
104
+ * #828C98 is 3.41:1 on white, and a label is content (#232). So the neutral tile
105
+ * does not take the brand tile's ink label either; it reads muted, as drawn,
106
+ * at the rung that clears AA.
107
+ */
108
+ export type StatTileTone = "brand" | "neutral";
109
+ declare function StatTile({ label, value, hint, hintTone, pending, icon: Icon, valueFirst, example, tone, className, ...props }: Omit<React.ComponentProps<"div">, "ref" | "children"> & {
92
110
  /** Names the metric. Small and muted, above the value. */
93
111
  label: React.ReactNode;
94
112
  /** The measurement. Ignored when `pending`. */
@@ -104,6 +122,8 @@ declare function StatTile({ label, value, hint, hintTone, pending, icon: Icon, v
104
122
  valueFirst?: boolean;
105
123
  /** The values are illustrative: set them muted. Pair with a ComingSoonTag on the card. */
106
124
  example?: boolean;
125
+ /** The icon square's palette: the App page's brand violet, or Home's neutrals. */
126
+ tone?: StatTileTone;
107
127
  }): React.JSX.Element;
108
128
  declare function StatTileRow({ className, children, ...props }: Omit<React.ComponentProps<"div">, "ref">): React.JSX.Element;
109
129
  export { StatTile, StatTileRow };
@@ -1 +1 @@
1
- {"version":3,"file":"stat-tile.d.ts","sourceRoot":"","sources":["../../src/blocks/stat-tile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,iGAAiG;AACjG,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAA;AAWjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,KAAK,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE/D,iBAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAoB,EACpB,OAAO,EACP,IAAI,EAAE,IAAI,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG;IACzD,0DAA0D;IAC1D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,qEAAqE;IACrE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,qBAsFA;AAsBD,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,qBAiB1C;AAcD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"stat-tile.d.ts","sourceRoot":"","sources":["../../src/blocks/stat-tile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,iGAAiG;AACjG,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAA;AAWjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,KAAK,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE/D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE9C,iBAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAoB,EACpB,OAAO,EACP,IAAI,EAAE,IAAI,EACV,UAAU,EACV,OAAO,EACP,IAAc,EACd,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG;IACzD,0DAA0D;IAC1D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,qEAAqE;IACrE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB,qBA+FA;AAsBD,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,qBAiB1C;AAcD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA"}
@@ -9,21 +9,24 @@ const HINT_TONE = {
9
9
  neutral: "text-faint-strong",
10
10
  positive: "text-online-strong",
11
11
  };
12
- function StatTile({ label, value, hint, hintTone = "neutral", pending, icon: Icon, valueFirst, example, className, ...props }) {
12
+ function StatTile({ label, value, hint, hintTone = "neutral", pending, icon: Icon, valueFirst, example, tone = "brand", className, ...props }) {
13
13
  const muted = example && !pending;
14
14
  const kpi = Icon !== undefined;
15
+ const neutral = kpi && tone === "neutral";
15
16
  const order = kpi || valueFirst ? "value-first" : undefined;
16
17
  const labelNode = (_jsx("span", { "data-slot": "stat-tile-label", className: "text-caption text-faint-strong", children: label }));
17
18
  const valueNode = (_jsx("span", { "data-slot": "stat-tile-value", "data-pending": pending ? "" : undefined, className: cn(
18
19
  // The KPI tile's value is the 24px title rung, whose own leading is
19
20
  // tight; spelled as a separate string rather than an override, so no
20
21
  // merge has to decide between two leadings.
21
- kpi
22
- ? "font-display text-title-24 font-medium tabular-nums"
23
- : "font-display text-display-sm leading-display font-medium tabular-nums", pending && "text-faint", muted && "text-faint-strong"), children: pending ? "Coming soon" : value }));
22
+ neutral
23
+ ? "font-ui text-title-24 leading-none font-medium tabular-nums"
24
+ : kpi
25
+ ? "font-display text-title-24 font-medium tabular-nums"
26
+ : "font-display text-display-sm leading-display font-medium tabular-nums", pending && "text-faint", muted && "text-faint-strong"), children: pending ? "Coming soon" : value }));
24
27
  const hintNode = hint ? (_jsx("span", { "data-slot": "stat-tile-hint", "data-tone": hintTone, className: cn("text-caption", HINT_TONE[hintTone]), children: hint })) : null;
25
28
  const lines = order ? (_jsxs(_Fragment, { children: [valueNode, labelNode, hintNode] })) : (_jsxs(_Fragment, { children: [labelNode, valueNode, hintNode] }));
26
- return (_jsx("div", { "data-slot": "stat-tile", "data-pending": pending ? "" : undefined, "data-example": muted ? "" : undefined, "data-order": order, "data-icon": kpi ? "" : undefined,
29
+ return (_jsx("div", { "data-slot": "stat-tile", "data-pending": pending ? "" : undefined, "data-example": muted ? "" : undefined, "data-order": order, "data-icon": kpi ? "" : undefined, "data-tone": neutral ? "neutral" : undefined,
27
30
  // text-ink on the root, because text does not flip by inheritance
28
31
  // (rule 3): without it a tile inside a panel inherits the page's dark ink
29
32
  // and its value stays dark on purple.
@@ -33,7 +36,9 @@ function StatTile({ label, value, hint, hintTone = "neutral", pending, icon: Ico
33
36
  // In the KPI tile the label captions a value that leads: ink, as drawn.
34
37
  // Set from the root so the label keeps its one class string (#232's
35
38
  // guardrail pins it).
36
- kpi && !muted && "**:data-[slot=stat-tile-label]:text-ink", className), ...props, children: kpi ? (_jsxs(_Fragment, { children: [_jsx("span", { "data-slot": "stat-tile-icon", "aria-hidden": "true", className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-brand-100 text-brand", children: _jsx(Icon, { className: "size-6" }) }), _jsx("div", { className: "flex min-w-0 flex-col gap-1", children: lines })] })) : (lines) }));
39
+ kpi && !neutral && !muted && "**:data-[slot=stat-tile-label]:text-ink",
40
+ // Home's tile: radius 12, and 16 by 24 less the hairline it draws inside.
41
+ neutral && "rounded-md px-[23px] py-[15px]", className), ...props, children: kpi ? (_jsxs(_Fragment, { children: [_jsx("span", { "data-slot": "stat-tile-icon", "aria-hidden": "true", className: cn("flex size-10 shrink-0 items-center justify-center", neutral ? "rounded-md bg-page text-steel" : "rounded-xl bg-brand-100 text-brand"), children: _jsx(Icon, { className: "size-6" }) }), _jsx("div", { className: "flex min-w-0 flex-col gap-1", children: lines })] })) : (lines) }));
37
42
  }
38
43
  /**
39
44
  * A row of tiles: two, three or four, side by side, stacking as the column
@@ -1 +1 @@
1
- {"version":3,"file":"stat-tile.js","sourceRoot":"","sources":["../../src/blocks/stat-tile.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stat-tile.js","sourceRoot":"","sources":["../../src/blocks/stat-tile.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -26,9 +26,16 @@ export * from "./ui/table.js";
26
26
  export * from "./ui/tabs.js";
27
27
  export * from "./ui/textarea.js";
28
28
  export * from "./ui/tooltip.js";
29
+ export * from "./blocks/action-link.js";
30
+ export * from "./blocks/activity-row.js";
31
+ export * from "./blocks/add-tile.js";
29
32
  export * from "./blocks/agent-prompt.js";
30
33
  export * from "./blocks/avatar.js";
31
34
  export * from "./blocks/avatar-picker.js";
35
+ export * from "./blocks/avatar-stack.js";
36
+ export * from "./blocks/menu-trigger.js";
37
+ export * from "./blocks/header-menu.js";
38
+ export * from "./blocks/header-pill.js";
32
39
  export * from "./blocks/bar-chart.js";
33
40
  export * from "./blocks/card-grid.js";
34
41
  export * from "./blocks/celebration.js";
@@ -38,8 +45,11 @@ export * from "./blocks/coming-soon-tag.js";
38
45
  export * from "./blocks/command-field.js";
39
46
  export * from "./blocks/compare-table.js";
40
47
  export * from "./blocks/confirm-delete-dialog.js";
48
+ export * from "./blocks/copy-button.js";
41
49
  export * from "./blocks/creation-tile.js";
42
50
  export * from "./blocks/cta-banner.js";
51
+ export * from "./blocks/dashed-banner.js";
52
+ export * from "./blocks/dashed-line.js";
43
53
  export * from "./blocks/disabled-button.js";
44
54
  export * from "./blocks/drop-zone.js";
45
55
  export * from "./blocks/empty-creations.js";
@@ -50,6 +60,7 @@ export * from "./blocks/eyebrow.js";
50
60
  export * from "./blocks/expiry-notice.js";
51
61
  export * from "./blocks/feature-cells.js";
52
62
  export * from "./blocks/feed-post.js";
63
+ export * from "./blocks/filter-tabs.js";
53
64
  export * from "./blocks/full-screen-button.js";
54
65
  export * from "./blocks/hub-index.js";
55
66
  export * from "./blocks/install-content.js";
@@ -72,6 +83,8 @@ export * from "./blocks/prompt-block.js";
72
83
  export * from "./blocks/quote.js";
73
84
  export * from "./blocks/ranked-list.js";
74
85
  export * from "./blocks/rich-text.js";
86
+ export * from "./blocks/scroll-rail.js";
87
+ export * from "./blocks/section-heading.js";
75
88
  export * from "./blocks/shelf.js";
76
89
  export * from "./blocks/showcase-scroll.js";
77
90
  export * from "./blocks/side-nav.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -43,9 +43,16 @@ export * from "./ui/tabs.js";
43
43
  export * from "./ui/textarea.js";
44
44
  export * from "./ui/tooltip.js";
45
45
  // Composed blocks.
46
+ export * from "./blocks/action-link.js";
47
+ export * from "./blocks/activity-row.js";
48
+ export * from "./blocks/add-tile.js";
46
49
  export * from "./blocks/agent-prompt.js";
47
50
  export * from "./blocks/avatar.js";
48
51
  export * from "./blocks/avatar-picker.js";
52
+ export * from "./blocks/avatar-stack.js";
53
+ export * from "./blocks/menu-trigger.js";
54
+ export * from "./blocks/header-menu.js";
55
+ export * from "./blocks/header-pill.js";
49
56
  export * from "./blocks/bar-chart.js";
50
57
  export * from "./blocks/card-grid.js";
51
58
  export * from "./blocks/celebration.js";
@@ -55,8 +62,11 @@ export * from "./blocks/coming-soon-tag.js";
55
62
  export * from "./blocks/command-field.js";
56
63
  export * from "./blocks/compare-table.js";
57
64
  export * from "./blocks/confirm-delete-dialog.js";
65
+ export * from "./blocks/copy-button.js";
58
66
  export * from "./blocks/creation-tile.js";
59
67
  export * from "./blocks/cta-banner.js";
68
+ export * from "./blocks/dashed-banner.js";
69
+ export * from "./blocks/dashed-line.js";
60
70
  export * from "./blocks/disabled-button.js";
61
71
  export * from "./blocks/drop-zone.js";
62
72
  export * from "./blocks/empty-creations.js";
@@ -67,6 +77,7 @@ export * from "./blocks/eyebrow.js";
67
77
  export * from "./blocks/expiry-notice.js";
68
78
  export * from "./blocks/feature-cells.js";
69
79
  export * from "./blocks/feed-post.js";
80
+ export * from "./blocks/filter-tabs.js";
70
81
  export * from "./blocks/full-screen-button.js";
71
82
  export * from "./blocks/hub-index.js";
72
83
  export * from "./blocks/install-content.js";
@@ -89,6 +100,8 @@ export * from "./blocks/prompt-block.js";
89
100
  export * from "./blocks/quote.js";
90
101
  export * from "./blocks/ranked-list.js";
91
102
  export * from "./blocks/rich-text.js";
103
+ export * from "./blocks/scroll-rail.js";
104
+ export * from "./blocks/section-heading.js";
92
105
  export * from "./blocks/shelf.js";
93
106
  export * from "./blocks/showcase-scroll.js";
94
107
  export * from "./blocks/side-nav.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/theme.css CHANGED
@@ -131,6 +131,8 @@
131
131
  --color-cyan-tint: var(--cg-cyan-200);
132
132
  --color-cyan-wash: var(--cg-cyan-300);
133
133
  --color-cyan-fill: var(--cg-cyan-400);
134
+ /* #381 — Figma "Tertiary Dark": teal text links and the rail button line. */
135
+ --color-cyan-dark: var(--cg-tertiary-dark);
134
136
  --color-lime-tint: var(--cg-lime-200);
135
137
  --color-lime-wash: var(--cg-lime-600);
136
138
  --color-lime-edge: var(--cg-lime-700);
@@ -297,6 +297,16 @@
297
297
  }
298
298
  }
299
299
  },
300
+ "tertiary-dark": {
301
+ "$value": "#45cdd4",
302
+ "$type": "color",
303
+ "$description": "Figma \"Tertiary Dark\" (CloudGrid-2026; the header menus' \"+ New\", node 11324:90629).\n\nTeal text links (\"+ New\", \"Explore All\", \"Open\", \"Dismiss\") and the line of the rail's scroll button.\n\nMeasures 1.92:1 on white and 1.70:1 on the page ground: under AA, used knowingly as a design decision (Gilad, 2026-11-01). Every link drawn in it also carries an accessible name.\n\nNot --cg-tertiary-press (#4dd8e0), which is the cta's pressed fill.",
304
+ "$extensions": {
305
+ "io.cloudgrid": {
306
+ "css": "--cg-tertiary-dark"
307
+ }
308
+ }
309
+ },
300
310
  "accent-press": {
301
311
  "$value": "#0052da",
302
312
  "$type": "color",
@@ -2002,9 +2012,9 @@
2002
2012
  "kind": {
2003
2013
  "$description": "kind: what an entity IS, as a ground for its 20px badge (#196).\n\nDeclared at :root ONLY, like the identity tile and unlike everything else in\nthis file. The badge sits on a screenshot, and a picture does not flip: half of\na mark flipping is a light disc with a white glyph on the ink surface, which\nrenders perfectly and shows nothing. --cg-text-on-accent is the glyph on all\nthree, and it measures 12.74:1, 14.65:1 and 10.24:1 on them.",
2004
2014
  "kind-inspiration": {
2005
- "$value": "#fae4b3",
2015
+ "$value": "#f0f8e1",
2006
2016
  "$type": "color",
2007
- "$description": "SOURCE: the founder's draft, the Inspiration badge.",
2017
+ "$description": "SOURCE: the 2026 Figma (CloudGrid-2026, the Tile's Inspiration badge, node I11324:91033), paint style \"Secondary 20\" (#382). It was #fae4b3, the founder's 2025 draft; the Gilad-approved 2026 frames put the lightbulb on lime. Ink on it measures 14.56:1.",
2008
2018
  "$extensions": {
2009
2019
  "io.cloudgrid": {
2010
2020
  "css": "--cg-kind-inspiration"
@@ -2044,5 +2054,35 @@
2044
2054
  }
2045
2055
  }
2046
2056
  }
2057
+ },
2058
+ "avatar": {
2059
+ "$description": "The grid avatar grounds, raw hex in the CloudGrid-2026 frames (11323:8600, 11324:90635, 11324:90641). Letters are --cg-ink: 12.02:1, 10.74:1 and 11.43:1. An identity colour, so it does not flip on the panel or ink surfaces.",
2060
+ "avatar-pastel-1": {
2061
+ "$value": "#dce4bc",
2062
+ "$type": "color",
2063
+ "$extensions": {
2064
+ "io.cloudgrid": {
2065
+ "css": "--cg-avatar-pastel-1"
2066
+ }
2067
+ }
2068
+ },
2069
+ "avatar-pastel-2": {
2070
+ "$value": "#bcd9e4",
2071
+ "$type": "color",
2072
+ "$extensions": {
2073
+ "io.cloudgrid": {
2074
+ "css": "--cg-avatar-pastel-2"
2075
+ }
2076
+ }
2077
+ },
2078
+ "avatar-pastel-3": {
2079
+ "$value": "#bce4ca",
2080
+ "$type": "color",
2081
+ "$extensions": {
2082
+ "io.cloudgrid": {
2083
+ "css": "--cg-avatar-pastel-3"
2084
+ }
2085
+ }
2086
+ }
2047
2087
  }
2048
2088
  }