@sableui/react 0.17.0 → 0.18.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 (86) hide show
  1. package/AGENTS.md +10 -3
  2. package/CHANGELOG.md +106 -0
  3. package/README.md +11 -4
  4. package/bin/sable.mjs +160 -18
  5. package/dist/activity-DT8VK9fx.d.ts +25 -0
  6. package/dist/adapters/github.d.ts +41 -0
  7. package/dist/adapters/github.js +24 -0
  8. package/dist/components/activity-heatmap/activity-heatmap.js +420 -0
  9. package/dist/components/activity-heatmap/activity-heatmap.meta.js +142 -0
  10. package/dist/components/activity-heatmap/index.js +9 -0
  11. package/dist/components/code-block/code-block.js +5 -3
  12. package/dist/components/code-block/code-block.meta.js +6 -0
  13. package/dist/components/dialog/dialog.js +25 -5
  14. package/dist/components/dialog/dialog.meta.js +26 -5
  15. package/dist/components/media-image/media-image.js +3 -1
  16. package/dist/components/media-image/media-image.meta.js +15 -1
  17. package/dist/components/media-tile/media-tile.js +13 -1
  18. package/dist/components/media-tile/media-tile.meta.js +10 -0
  19. package/dist/components/page-header/page-header.js +9 -4
  20. package/dist/components/page-header/page-header.meta.js +26 -1
  21. package/dist/components/pill/pill.meta.js +15 -6
  22. package/dist/components/pill/pill.variants.js +1 -0
  23. package/dist/components/search-input/search-input.js +30 -5
  24. package/dist/components/search-input/search-input.meta.js +29 -4
  25. package/dist/components/section-header/section-header.js +27 -17
  26. package/dist/components/section-header/section-header.meta.js +27 -5
  27. package/dist/components/sheet/sheet.js +15 -3
  28. package/dist/components/sheet/sheet.meta.js +2 -2
  29. package/dist/file-hashes.json +46 -36
  30. package/dist/icon-sets/reicon.js +23 -1
  31. package/dist/index.d.ts +270 -27
  32. package/dist/index.js +8 -1
  33. package/dist/layout/AspectBox.js +2 -5
  34. package/dist/layout/Bleed.js +10 -6
  35. package/dist/layout/Center.js +11 -3
  36. package/dist/layout/Columns.js +6 -3
  37. package/dist/layout/Grid.js +14 -6
  38. package/dist/layout/GridOverlay.js +7 -7
  39. package/dist/layout/Region.js +18 -3
  40. package/dist/layout/Row.js +27 -20
  41. package/dist/layout/Spacer.js +13 -2
  42. package/dist/layout/SplitPane.js +1 -1
  43. package/dist/layout/Stack.js +25 -18
  44. package/dist/layout/index.d.ts +57 -6
  45. package/dist/lib/chart/activity.js +32 -0
  46. package/dist/lib/chart/calendar.js +67 -0
  47. package/dist/lib/chart/chart-tooltip.js +2 -2
  48. package/dist/lib/chart/heat.js +55 -0
  49. package/dist/lib/focus-return.js +53 -0
  50. package/dist/lib/taxonomy.js +1 -0
  51. package/dist/styles.css +122 -114
  52. package/llms/components/activity-heatmap.md +133 -0
  53. package/llms/components/code-block.md +1 -0
  54. package/llms/components/dialog.md +34 -3
  55. package/llms/components/media-image.md +12 -0
  56. package/llms/components/media-tile.md +21 -0
  57. package/llms/components/page-header.md +16 -1
  58. package/llms/components/pill.md +24 -5
  59. package/llms/components/search-input.md +37 -4
  60. package/llms/components/section-header.md +28 -4
  61. package/llms/components/sheet.md +2 -2
  62. package/llms/layout/aspect-box.md +1 -1
  63. package/llms/layout/bleed.md +1 -1
  64. package/llms/layout/center.md +1 -1
  65. package/llms/layout/columns.md +1 -1
  66. package/llms/layout/grid.md +1 -1
  67. package/llms/layout/region.md +1 -1
  68. package/llms/layout/row.md +9 -1
  69. package/llms/layout/spacer.md +1 -1
  70. package/llms/layout/split-pane.md +1 -1
  71. package/llms/layout/stack.md +1 -1
  72. package/llms/tasks/auditing-an-app.md +31 -0
  73. package/llms/tasks/getting-started.md +10 -3
  74. package/llms/tasks/using-presets.md +1 -2
  75. package/llms-full.txt +372 -35
  76. package/llms.txt +3 -2
  77. package/package.json +6 -1
  78. package/registry.json +532 -36
  79. package/scripts/adoption.mjs +239 -0
  80. package/scripts/agent-setup.mjs +110 -18
  81. package/scripts/grade.mjs +17 -0
  82. package/scripts/wiring.mjs +2 -1
  83. package/skills/entry/SKILL.md +1 -1
  84. package/skills/sable/SKILL.md +33 -4
  85. package/skills/sable/agents/openai.yaml +1 -1
  86. package/targets/ios.json +9 -0
@@ -3,9 +3,10 @@ import { useId } from "react";
3
3
  import { cn } from "../../lib/cn.js";
4
4
  import { HeadingRow } from "../../lib/heading-row.js";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
- var TITLE_TIER = {
7
- md: "text-heading-3",
8
- sm: "text-heading-4"
6
+ var SIZE = {
7
+ lg: { root: "gap-3", title: "text-heading-2", description: "text-body-md" },
8
+ md: { root: "gap-2", title: "text-heading-3", description: "text-body-sm" },
9
+ sm: { root: "gap-2", title: "text-heading-4", description: "text-body-sm" }
9
10
  };
10
11
  function SectionHeader({
11
12
  title,
@@ -18,20 +19,29 @@ function SectionHeader({
18
19
  ...props
19
20
  }) {
20
21
  const generatedId = useId();
21
- return /* @__PURE__ */ jsxs("div", { "data-slot": "section-header", className: cn("flex flex-col gap-2", className), ...props, children: [
22
- /* @__PURE__ */ jsx(
23
- HeadingRow,
24
- {
25
- as: titleAs,
26
- title,
27
- titleId: titleId ?? generatedId,
28
- titleClassName: TITLE_TIER[size],
29
- band: "flex min-h-(--control-sm) items-center",
30
- actions
31
- }
32
- ),
33
- description ? /* @__PURE__ */ jsx("p", { className: "max-w-(--measure-prose) text-body-sm text-pretty text-muted-foreground", children: description }) : null
34
- ] });
22
+ return /* @__PURE__ */ jsxs(
23
+ "div",
24
+ {
25
+ "data-slot": "section-header",
26
+ "data-size": size,
27
+ className: cn("flex flex-col", SIZE[size].root, className),
28
+ ...props,
29
+ children: [
30
+ /* @__PURE__ */ jsx(
31
+ HeadingRow,
32
+ {
33
+ as: titleAs,
34
+ title,
35
+ titleId: titleId ?? generatedId,
36
+ titleClassName: SIZE[size].title,
37
+ band: "flex min-h-(--control-sm) items-center mt-[min(0px,calc((var(--control-sm)_-_1lh)/2))]",
38
+ actions
39
+ }
40
+ ),
41
+ description ? /* @__PURE__ */ jsx("p", { className: cn("max-w-(--measure-prose) text-pretty text-muted-foreground", SIZE[size].description), children: description }) : null
42
+ ]
43
+ }
44
+ );
35
45
  }
36
46
  SectionHeader.displayName = "SectionHeader";
37
47
  export {
@@ -14,7 +14,9 @@ var sectionHeaderMeta = {
14
14
  "h2",
15
15
  "subsection",
16
16
  "optical alignment",
17
- "bleed"
17
+ "bleed",
18
+ "editorial section",
19
+ "large section title"
18
20
  ],
19
21
  usage: {
20
22
  description: "Use SectionHeader to head each section below the page title \u2014 a home-page shelf with View all, a settings group, a list with its own actions. PageHeader is the route's single h1; every section under it takes a SectionHeader, with titleId wired to the section's aria-labelledby.",
@@ -25,7 +27,7 @@ var sectionHeaderMeta = {
25
27
  },
26
28
  {
27
29
  guidance: "do",
28
- description: "Pick titleAs by the document outline (h2 under the page h1, h3 inside an h2 section) and size by visual weight: md for a page's sections and shelves, sm for denser groups like settings."
30
+ description: `Pick titleAs by the document outline (h2 under the page h1, h3 inside an h2 section) and size by visual weight: lg for an editorial page's sections under a PageHeader size="lg", md for a page's sections and shelves, sm for denser groups like settings.`
29
31
  },
30
32
  {
31
33
  guidance: "do",
@@ -87,13 +89,13 @@ var sectionHeaderMeta = {
87
89
  },
88
90
  {
89
91
  name: "size",
90
- type: '"md" | "sm"',
92
+ type: '"lg" | "md" | "sm"',
91
93
  default: '"md"',
92
- description: "Visual weight, independent of the heading level: md (text-heading-3) for a page's sections and shelves; sm (text-heading-4) for denser sets \u2014 settings groups, subsections."
94
+ description: `Visual weight, independent of the heading level: lg (text-heading-2 over a text-body-md description) for an editorial page's sections, under a PageHeader size="lg"; md (text-heading-3) for a page's sections and shelves; sm (text-heading-4) for denser sets \u2014 settings groups, subsections. lg stops at heading-2: heading-1 is the page title's, one per route. The actions stay centred on the title's first line at every size.`
93
95
  }
94
96
  ],
95
97
  variants: {
96
- size: ["md", "sm"]
98
+ size: ["lg", "md", "sm"]
97
99
  },
98
100
  tokensUsed: ["foreground", "muted-foreground"],
99
101
  a11y: [
@@ -161,6 +163,26 @@ var sectionHeaderMeta = {
161
163
  <Entity className="[--entity-px:0]" title="Late drives" subtitle="42 tracks" />
162
164
  <Entity className="[--entity-px:0]" title="Focus" subtitle="18 tracks" />
163
165
  </Stack>
166
+ </section>`
167
+ },
168
+ {
169
+ label: "An editorial section (size lg)",
170
+ code: `<section aria-labelledby="selected-work" className="flex flex-col gap-6">
171
+ <SectionHeader
172
+ titleId="selected-work"
173
+ size="lg"
174
+ title="Selected work"
175
+ description="Five projects from the last two years."
176
+ actions={
177
+ <Button variant="ghost" size="sm" render={<a href="/work" />} aria-label="View all work">
178
+ View all
179
+ </Button>
180
+ }
181
+ />
182
+ <Grid minItemWidth="16rem" gap={3}>
183
+ <Card><CardHeader><CardTitle>Tidewater</CardTitle><CardDescription>Brand identity</CardDescription></CardHeader></Card>
184
+ <Card><CardHeader><CardTitle>Northlight</CardTitle><CardDescription>Product design</CardDescription></CardHeader></Card>
185
+ </Grid>
164
186
  </section>`
165
187
  },
166
188
  {
@@ -8,6 +8,7 @@ import {
8
8
  useState
9
9
  } from "react";
10
10
  import { cn } from "../../lib/cn.js";
11
+ import { FocusReturnProvider, useFocusReturn, useFocusReturnDefault } from "../../lib/focus-return.js";
11
12
  import { withPortalThemeScope } from "../../lib/portal-theme-scope.js";
12
13
  import { PresentationProvider, StackedActionsContext, usePresentation } from "../../lib/presentation.js";
13
14
  import { mergeRefs } from "../../lib/refs.js";
@@ -27,15 +28,20 @@ function Sheet({
27
28
  defaultSnapPoint,
28
29
  onSnapPointChange,
29
30
  snapToSequentialPoints,
31
+ open,
32
+ onOpenChange,
30
33
  ...props
31
34
  }) {
35
+ const focus = useFocusReturn(open, onOpenChange);
32
36
  const [side, setSide] = useState("right");
33
37
  const snaps = Boolean(snapPoints?.length);
34
38
  const context = useMemo(() => ({ reportSide: setSide, snaps }), [snaps]);
35
- return /* @__PURE__ */ jsx(SheetRootContext.Provider, { value: context, children: /* @__PURE__ */ jsx(
39
+ return /* @__PURE__ */ jsx(SheetRootContext.Provider, { value: context, children: /* @__PURE__ */ jsx(FocusReturnProvider, { value: focus.focusReturn, children: /* @__PURE__ */ jsx(
36
40
  Base.Root,
37
41
  {
38
42
  ...props,
43
+ open,
44
+ onOpenChange: focus.onOpenChange,
39
45
  snapPoints: snaps && side === "bottom" ? snapPoints : void 0,
40
46
  snapPoint,
41
47
  defaultSnapPoint,
@@ -43,7 +49,7 @@ function Sheet({
43
49
  snapToSequentialPoints,
44
50
  swipeDirection: SWIPE_DIRECTION[side]
45
51
  }
46
- ) });
52
+ ) }) });
47
53
  }
48
54
  function isDevelopment() {
49
55
  try {
@@ -81,10 +87,12 @@ function SheetContent({
81
87
  children,
82
88
  side,
83
89
  initialFocus,
90
+ finalFocus,
84
91
  ref,
85
92
  style,
86
93
  ...props
87
94
  }) {
95
+ const focusReturn = useFocusReturnDefault();
88
96
  const root = useContext(SheetRootContext);
89
97
  const resolvedSide = side ?? "right";
90
98
  const reportSide = root?.reportSide;
@@ -98,7 +106,10 @@ function SheetContent({
98
106
  }
99
107
  const popupRef = useRef(null);
100
108
  const [popup, setPopup] = useState(null);
101
- const mergedRef = useMemo(() => mergeRefs(popupRef, ref, setPopup), [ref]);
109
+ const mergedRef = useMemo(
110
+ () => mergeRefs(popupRef, ref, setPopup, focusReturn?.popupRef),
111
+ [ref, focusReturn]
112
+ );
102
113
  const keyboardInset = useKeyboardInset(resolvedSide === "bottom" && popup !== null);
103
114
  const keyboardVars = { "--sheet-keyboard-inset": `${keyboardInset}px` };
104
115
  useIsomorphicLayoutEffect(() => {
@@ -121,6 +132,7 @@ function SheetContent({
121
132
  {
122
133
  ref: mergedRef,
123
134
  initialFocus: initialFocus === void 0 ? (type) => type === "touch" ? popupRef.current : true : initialFocus,
135
+ finalFocus: finalFocus === void 0 ? focusReturn?.finalFocus : finalFocus,
124
136
  "data-sable-sheet": resolvedSide,
125
137
  "data-snap-points": snaps ? "" : void 0,
126
138
  className: cn(sheetVariants({ side }), className),
@@ -93,7 +93,7 @@ var sheetMeta = {
93
93
  {
94
94
  name: "Sheet (Root)",
95
95
  type: "Base UI Drawer.Root props (open, defaultOpen, onOpenChange, onOpenChangeComplete, modal, disablePointerDismissal, actionsRef, handle, snapPoints, snapPoint, defaultSnapPoint, onSnapPointChange, snapToSequentialPoints) \u2014 minus swipeDirection",
96
- description: `Controls open state. Uncontrolled by default. The dismiss swipe direction is not a prop: it follows SheetContent's side. onOpenChange reports reason "swipe" when a swipe closed it.`
96
+ description: `Controls open state. Uncontrolled by default. The dismiss swipe direction is not a prop: it follows SheetContent's side. onOpenChange reports reason "swipe" when a swipe closed it. Records the element focused when the sheet opens, trigger or not, and returns focus there on close.`
97
97
  },
98
98
  {
99
99
  name: "snapPoints",
@@ -171,7 +171,7 @@ var sheetMeta = {
171
171
  "The panel scrolls its own content (thin scrollbar, contained overscroll) when it outgrows its bound \u2014 the full height on left/right, 80vh on top/bottom.",
172
172
  "Esc and click-outside dismiss by default; on touch, a swipe toward the sheet's own edge dismisses too. A short or slow drag springs back.",
173
173
  "Swipe is an extra path, never the only one: Esc, click-outside and SheetClose all still work.",
174
- "Focus matches Dialog: the first tabbable on mouse/keyboard open, the panel itself on touch (so the virtual keyboard stays down); focus returns to the trigger on close.",
174
+ "Focus matches Dialog: the first tabbable on mouse/keyboard open, the panel itself on touch (so the virtual keyboard stays down). On close, focus returns to the element that held it when the sheet opened: the SheetTrigger, or your own button when it drives a controlled open. It is captured before the content mounts, so an autoFocus field inside cannot displace it; an explicit finalFocus on SheetContent wins.",
175
175
  "Render a SheetClose inside SheetContent so screen-reader users can escape the popup.",
176
176
  "Slide animation runs via data-[starting-style]/data-[ending-style] attributes on the motion-duration token; while swiping the panel tracks the finger directly, and a released swipe finishes on the same token (scaled by flick speed), so reduced motion makes it instant.",
177
177
  "A mouse drag that starts on sheet content selects text rather than dragging the panel; mouse dragging only starts from the padding edge.",
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "dist/_contract-CDa9-NdB.d.ts": "062fb08b461ea845",
3
+ "dist/activity-DT8VK9fx.d.ts": "528ef87bbc766d76",
4
+ "dist/adapters/github.d.ts": "7e30b303e1daa370",
5
+ "dist/adapters/github.js": "3a2c4593e2ad1e18",
3
6
  "dist/blocks/api-keys-block.js": "0c6d54126392e4fb",
4
7
  "dist/blocks/api-keys-block.meta.js": "41903f3a7743b068",
5
8
  "dist/blocks/approval-block.js": "b84f4d310ce30664",
@@ -89,6 +92,9 @@
89
92
  "dist/components/accordion/accordion.js": "4f41376e208ac29d",
90
93
  "dist/components/accordion/accordion.meta.js": "27ec6ddc51914b4a",
91
94
  "dist/components/accordion/index.js": "4181a2720d5c1ed8",
95
+ "dist/components/activity-heatmap/activity-heatmap.js": "a368d466be3be631",
96
+ "dist/components/activity-heatmap/activity-heatmap.meta.js": "3723ae0dd4aa5b9d",
97
+ "dist/components/activity-heatmap/index.js": "5b15c2c64908174f",
92
98
  "dist/components/app-header/app-header.js": "2149806a151306c4",
93
99
  "dist/components/app-header/app-header.meta.js": "04631f9c2069f30d",
94
100
  "dist/components/app-header/index.js": "012804273e56f06d",
@@ -169,8 +175,8 @@
169
175
  "dist/components/code/code.js": "4be51f4cfb283bb2",
170
176
  "dist/components/code/code.meta.js": "8e5173d8b59e846b",
171
177
  "dist/components/code/index.js": "34e13acc13b39cfd",
172
- "dist/components/code-block/code-block.js": "b96d1db552e8f8f0",
173
- "dist/components/code-block/code-block.meta.js": "838282c7addf5dd2",
178
+ "dist/components/code-block/code-block.js": "b66aed579438bca7",
179
+ "dist/components/code-block/code-block.meta.js": "d7e869100f45e650",
174
180
  "dist/components/code-block/index.js": "e40982950359204b",
175
181
  "dist/components/collapsible/collapsible.js": "fecb96bdc056e7bb",
176
182
  "dist/components/collapsible/collapsible.meta.js": "5d677ef03ee2f7e9",
@@ -207,8 +213,8 @@
207
213
  "dist/components/destructive-action-modal/destructive-action-modal.js": "3806d39cb3fb0cdf",
208
214
  "dist/components/destructive-action-modal/destructive-action-modal.meta.js": "a1a0a6d441f602b4",
209
215
  "dist/components/destructive-action-modal/index.js": "23b46c051e8c4e4e",
210
- "dist/components/dialog/dialog.js": "efdca40a11df5bff",
211
- "dist/components/dialog/dialog.meta.js": "98de0730d852851c",
216
+ "dist/components/dialog/dialog.js": "b8bfdb6f5ed94dfd",
217
+ "dist/components/dialog/dialog.meta.js": "376df87eddc07ef9",
212
218
  "dist/components/dialog/index.js": "4ed284cc7b4692d5",
213
219
  "dist/components/disclosure-picker/disclosure-picker.js": "6f7a28eee89e1c1f",
214
220
  "dist/components/disclosure-picker/disclosure-picker.meta.js": "c32223ff1ff098bc",
@@ -273,11 +279,11 @@
273
279
  "dist/components/marquee/marquee.js": "0e56221adeebb781",
274
280
  "dist/components/marquee/marquee.meta.js": "6c406bddddc5e010",
275
281
  "dist/components/media-image/index.js": "d423b869156da3f6",
276
- "dist/components/media-image/media-image.js": "f68499e9f84b6e64",
277
- "dist/components/media-image/media-image.meta.js": "0778fd790511a701",
282
+ "dist/components/media-image/media-image.js": "f5555312b3415e89",
283
+ "dist/components/media-image/media-image.meta.js": "ff488a1d4f80a5a9",
278
284
  "dist/components/media-tile/index.js": "00281f6f8cc246d1",
279
- "dist/components/media-tile/media-tile.js": "faf79c27ec15c8d4",
280
- "dist/components/media-tile/media-tile.meta.js": "6a21970f9b463812",
285
+ "dist/components/media-tile/media-tile.js": "bf91dd717a27613a",
286
+ "dist/components/media-tile/media-tile.meta.js": "a1323b8f1f945e58",
281
287
  "dist/components/media-tile/media-tile.variants.js": "e22c08004b4a55ad",
282
288
  "dist/components/menu/index.js": "c368589e92d3a189",
283
289
  "dist/components/menu/menu.js": "d31a3cd0d737447d",
@@ -323,8 +329,8 @@
323
329
  "dist/components/overflow-menu/overflow-menu.js": "ae21a09facac6c64",
324
330
  "dist/components/overflow-menu/overflow-menu.meta.js": "d53fec5c53db5035",
325
331
  "dist/components/page-header/index.js": "e4da1f42473e10d1",
326
- "dist/components/page-header/page-header.js": "6dc82f8bd222c2f5",
327
- "dist/components/page-header/page-header.meta.js": "94dba3334f2cfb47",
332
+ "dist/components/page-header/page-header.js": "c45cc2ebd02d1ed2",
333
+ "dist/components/page-header/page-header.meta.js": "7b0d7fc28cb748f8",
328
334
  "dist/components/page-loader/index.js": "73989c61d8df9fee",
329
335
  "dist/components/page-loader/page-loader.js": "39eb2d9a5747c950",
330
336
  "dist/components/page-loader/page-loader.meta.js": "dc43852dd1b4dcea",
@@ -346,8 +352,8 @@
346
352
  "dist/components/pie-chart/pie-chart.meta.js": "04078e0b1d7853fc",
347
353
  "dist/components/pill/index.js": "20ff8b276a4f0515",
348
354
  "dist/components/pill/pill.js": "1c1d6180acce0e53",
349
- "dist/components/pill/pill.meta.js": "4ff1e10fbef549e9",
350
- "dist/components/pill/pill.variants.js": "6b6a824b44bfae13",
355
+ "dist/components/pill/pill.meta.js": "1b8ff366e5cd39ba",
356
+ "dist/components/pill/pill.variants.js": "d3bc3ce5d3871472",
351
357
  "dist/components/popover/index.js": "125e46824329b2b9",
352
358
  "dist/components/popover/popover.js": "8eb733ebc4c5c3cb",
353
359
  "dist/components/popover/popover.meta.js": "b69532ebeaf000c6",
@@ -381,11 +387,11 @@
381
387
  "dist/components/scrub-field/scrub-field.js": "1f6ebbdd1e7b0d64",
382
388
  "dist/components/scrub-field/scrub-field.meta.js": "1cf791914578f353",
383
389
  "dist/components/search-input/index.js": "075fb823b5e7bc3f",
384
- "dist/components/search-input/search-input.js": "457351a57507282c",
385
- "dist/components/search-input/search-input.meta.js": "8bc6e7ec025c61f3",
390
+ "dist/components/search-input/search-input.js": "c5f60cd755d435bb",
391
+ "dist/components/search-input/search-input.meta.js": "a71d684f391b3a10",
386
392
  "dist/components/section-header/index.js": "11f5658b3805ce6e",
387
- "dist/components/section-header/section-header.js": "eafb346c6efc6d84",
388
- "dist/components/section-header/section-header.meta.js": "011c13a1916b1d04",
393
+ "dist/components/section-header/section-header.js": "d8ef1818ba904a7a",
394
+ "dist/components/section-header/section-header.meta.js": "b3cbb9a0a37db87f",
389
395
  "dist/components/section-rail/index.js": "30fd32b042f1721e",
390
396
  "dist/components/section-rail/section-rail.js": "0eb588ecae9c68ce",
391
397
  "dist/components/section-rail/section-rail.meta.js": "fa1993dcde9735db",
@@ -404,8 +410,8 @@
404
410
  "dist/components/settings-menu/settings-menu.meta.js": "46bdda712ce13d85",
405
411
  "dist/components/settings-menu/settings-menu.variants.js": "1eefc629793ed7b3",
406
412
  "dist/components/sheet/index.js": "b19aacba55e7de80",
407
- "dist/components/sheet/sheet.js": "9f96dceaa8f091cf",
408
- "dist/components/sheet/sheet.meta.js": "c327b7a9c399c12a",
413
+ "dist/components/sheet/sheet.js": "183a4dfb92da3bc3",
414
+ "dist/components/sheet/sheet.meta.js": "d407fb54c9eb7f62",
409
415
  "dist/components/sheet/sheet.variants.js": "80af36bc54106a55",
410
416
  "dist/components/show-more/index.js": "e7c7e37ffedde2c2",
411
417
  "dist/components/show-more/show-more.js": "842adf12a2d31a26",
@@ -511,9 +517,9 @@
511
517
  "dist/icon-sets/brands.generated.js": "901e198df0563b0b",
512
518
  "dist/icon-sets/brands.js": "9a37d8739f14f2a9",
513
519
  "dist/icon-sets/reicon.d.ts": "52f6e41dc8137b4e",
514
- "dist/icon-sets/reicon.js": "0f73074baac9b866",
515
- "dist/index.d.ts": "2eefd1036ccd7232",
516
- "dist/index.js": "8d2cf095c3399a97",
520
+ "dist/icon-sets/reicon.js": "9cac6fee5ad95a62",
521
+ "dist/index.d.ts": "ad94845a460a1df4",
522
+ "dist/index.js": "fe1322803fff6cf8",
517
523
  "dist/ios/chrome.css": "a7ca9e3735d8658e",
518
524
  "dist/ios/chrome.js": "37091fef7b68bd28",
519
525
  "dist/ios/frame.css": "dd2703c944ce575a",
@@ -529,33 +535,36 @@
529
535
  "dist/ios/sheet.js": "9cdd685cde4609fe",
530
536
  "dist/ios/styles.css": "057885e6f8429a12",
531
537
  "dist/ios/theme.js": "dfc8112eccfb7c7a",
532
- "dist/layout/AspectBox.js": "4b50c3987baca27c",
533
- "dist/layout/Bleed.js": "cb567b6a19b85c94",
534
- "dist/layout/Center.js": "dd1543f34aed94ba",
535
- "dist/layout/Columns.js": "023a72bd3166fa1c",
536
- "dist/layout/Grid.js": "70ebd69b52edb4e6",
537
- "dist/layout/GridOverlay.js": "d07e43330b1ca3ed",
538
+ "dist/layout/AspectBox.js": "ecb51bf8689afe54",
539
+ "dist/layout/Bleed.js": "192fa3833ecda57c",
540
+ "dist/layout/Center.js": "d3b61dd229c2beed",
541
+ "dist/layout/Columns.js": "218fbaf5d486d819",
542
+ "dist/layout/Grid.js": "fe22c21836bda34a",
543
+ "dist/layout/GridOverlay.js": "626e6517d5cb2ce0",
538
544
  "dist/layout/Page.js": "a02d3a5534492c6a",
539
- "dist/layout/Region.js": "c76c75a54f405649",
540
- "dist/layout/Row.js": "83d771177f752610",
545
+ "dist/layout/Region.js": "ee32da8bd1b7d6df",
546
+ "dist/layout/Row.js": "c9a95bedbacc0dbf",
541
547
  "dist/layout/SafeArea.js": "1e4739d51e0eb71d",
542
- "dist/layout/Spacer.js": "bf8d580752acab02",
543
- "dist/layout/SplitPane.js": "2807f49a8917b70f",
544
- "dist/layout/Stack.js": "44a775e68e21f673",
548
+ "dist/layout/Spacer.js": "a601bb6c555beb43",
549
+ "dist/layout/SplitPane.js": "45ed3a3f795a924a",
550
+ "dist/layout/Stack.js": "2ab65a7c88843fe9",
545
551
  "dist/layout/_responsive.js": "8c2ca35545706660",
546
552
  "dist/layout/_safeArea.js": "7ed61b7dde139cd5",
547
- "dist/layout/index.d.ts": "57b40bbed43af5d3",
553
+ "dist/layout/index.d.ts": "c6e7f389a079bf07",
548
554
  "dist/layout/index.js": "f755ffdfe16d844c",
549
555
  "dist/lib/anchored-scroll.js": "c077ce237b964310",
550
556
  "dist/lib/bleed.js": "73fe9b97e5d528b3",
557
+ "dist/lib/chart/activity.js": "a7c35cf1f8643caa",
558
+ "dist/lib/chart/calendar.js": "25ecaa6d5279c965",
551
559
  "dist/lib/chart/cartesian.js": "27ae6dcb86dfbf45",
552
560
  "dist/lib/chart/chart-center.js": "bb826860d493ec09",
553
561
  "dist/lib/chart/chart-frame.js": "748f838a3e3c17d5",
554
562
  "dist/lib/chart/chart-legend.js": "751476cea4ec7db9",
555
- "dist/lib/chart/chart-tooltip.js": "e42c899bd2ecf521",
563
+ "dist/lib/chart/chart-tooltip.js": "97b93418bb334f57",
556
564
  "dist/lib/chart/dim.js": "e67e46858379174a",
557
565
  "dist/lib/chart/format.js": "f0256bbe226a0967",
558
566
  "dist/lib/chart/geometry.js": "10acd4c2626b0969",
567
+ "dist/lib/chart/heat.js": "ca6d47e6d28d4428",
559
568
  "dist/lib/chart/motion.js": "8edb50cf54b30a1a",
560
569
  "dist/lib/chart/scale.js": "b4b329322bfdd17a",
561
570
  "dist/lib/chart/types.js": "5665ade26e2b21a7",
@@ -564,6 +573,7 @@
564
573
  "dist/lib/component-guidance.js": "add930d690472d31",
565
574
  "dist/lib/density.js": "304cdaf6733fbad1",
566
575
  "dist/lib/field-shell.js": "cd47989e26b4f1ce",
576
+ "dist/lib/focus-return.js": "7166e37a052bd125",
567
577
  "dist/lib/glyphs.js": "9164497629a3fa70",
568
578
  "dist/lib/heading-row.js": "ef1faf4955e0fec6",
569
579
  "dist/lib/highlight-glide.js": "555668682863ac0d",
@@ -578,7 +588,7 @@
578
588
  "dist/lib/segmented.js": "43c21955f7f3ae33",
579
589
  "dist/lib/selection-card.js": "43c49c8c51dde54c",
580
590
  "dist/lib/status-tone.js": "61f0a8bb4fb9c7d6",
581
- "dist/lib/taxonomy.js": "f1de3ec452d7516f",
591
+ "dist/lib/taxonomy.js": "b68841921136149d",
582
592
  "dist/lib/trim-label.js": "9998d45e03c95515",
583
593
  "dist/lib/use-active-section.js": "9cdda6529e332ac8",
584
594
  "dist/lib/use-caret-trigger.js": "e9dba2b3bc27f18e",
@@ -623,7 +633,7 @@
623
633
  "dist/presets/index.d.ts": "454f6f809cc08d6a",
624
634
  "dist/presets/index.js": "fe9c4f8231bf18b2",
625
635
  "dist/registry-CyL28OzJ.d.ts": "b068fc89571517d8",
626
- "dist/styles.css": "7b8fe19fbd504785",
636
+ "dist/styles.css": "d02c108604a72bb5",
627
637
  "dist/theme-provider-BydfM5Z0.d.ts": "71808ed18b268496",
628
638
  "dist/themes/_contract.js": "f566700602557a22",
629
639
  "dist/themes/atelier/atelier.css": "ca476ee9fe980307",
@@ -87,6 +87,14 @@ import { VolumeLow2 } from "reicon-react/icons/VolumeLow2";
87
87
  import { VolumeCross } from "reicon-react/icons/VolumeCross";
88
88
  import { Playlist } from "reicon-react/icons/Playlist";
89
89
  import { MusicNote } from "reicon-react/icons/MusicNote";
90
+ import { Briefcase } from "reicon-react/icons/Briefcase";
91
+ import { Layers } from "reicon-react/icons/Layers";
92
+ import { Microphone } from "reicon-react/icons/Microphone";
93
+ import { Video } from "reicon-react/icons/Video";
94
+ import { SignalStream } from "reicon-react/icons/SignalStream";
95
+ import { Doc2 } from "reicon-react/icons/Doc2";
96
+ import { Palette2 } from "reicon-react/icons/Palette2";
97
+ import { Gamepad } from "reicon-react/icons/Gamepad";
90
98
  import { memo } from "react";
91
99
  import { jsx } from "react/jsx-runtime";
92
100
  var ICONS = {
@@ -191,7 +199,21 @@ var ICONS = {
191
199
  replay: Restart,
192
200
  motion: PlaybackSpeed,
193
201
  // Added for the add-reaction pill under a chat bubble.
194
- emoji: EmojiHappy
202
+ emoji: EmojiHappy,
203
+ // Added when a portfolio imported reicon-react directly for its work,
204
+ // projects, audio, video, live, press, design and games sections.
205
+ // `broadcast` is the radiating-waves mark that reads as "live" (Reicon's
206
+ // `Station` tower is too detailed at text size); `newspaper` is Reicon's
207
+ // folded paper, its nearest press glyph; `palette` is the painter's palette,
208
+ // not Reicon's `Palette` (a swatch fan, which reads as colour picking).
209
+ briefcase: Briefcase,
210
+ layers: Layers,
211
+ microphone: Microphone,
212
+ video: Video,
213
+ broadcast: SignalStream,
214
+ newspaper: Doc2,
215
+ palette: Palette2,
216
+ gamepad: Gamepad
195
217
  };
196
218
  var WEIGHTS = {
197
219
  regular: "Outline",